Homebrew の依存関係を表示する方法
macOS パッケージマネージャ Homebrew を使っているときに, このフォーミュラはどんなフォーミュラに依存しているのだろうかと確認したい時ってありませんか?
もしくはこのフォーミュラはどんなフォーミュラに依存されているのだろうかと確認したいときはないでしょうか.
今回はそのような Homebrew のフォーミュラの依存関係を表示する方法を紹介します.
brew deps
brew deps <formula>
brew deps <formula>
で <formula>
が依存しているフォーミュラを検索します.
例えば, 僕がいつもお世話になっている Vim がどんなフォーミュラに依存しているのか表示する場合, 次のようになります:
$ brew deps vim
gdbm
libyaml
openssl
perl
python
readline
ruby
sqlite
xz
このように Vim ってそれなりの数のフォーミュラに依存しているというのがわかりますね.
perl
, python
, ruby
といったプログラミング言語にも依存しているんですね.
brew deps --1 <formula>
--1
というオプションを付けると, 依存しているフォーミュラを再帰的にではなく, 一つ下の階層にのみ限定して表示します:
$ brew deps --1 vim
perl
python
ruby
すると面白いことに, 今さっき触れた perl
, python
, ruby
というプログラミング言語のフォーミュラのみ表示されました.
つまりはこれらのフォーミュラが一つ下の階層になるというわけなので, gdbm
, libyaml
, openssl
, readline
, sqlite
, xz
といったそのほかのフォーミュラはそれら 3 つのフォーミュラに依存されているというのがわかります.
依存の依存という関係ですね.
そのことに僕は何か人間味を感じます…
brew deps --tree <formula>
えっと --tree
オプションを付けると, そのような依存の依存の関係がツリー状で表示します:
$ brew deps --tree vim
vim
├── perl
├── ruby
│ ├── libyaml
│ ├── openssl
│ └── readline
└── python
├── gdbm
├── openssl
├── readline
├── sqlite
│ └── readline
└── xz
ツリー状で表示されるので, Vim が依存しているフォーミュラ同士の依存関係を視覚的に確認することができます.
依存関係が手に取るようにわかりますね.
Vim にとっては readline というのは依存の依存の依存ということになりますね.
ところで, ちょっと xz
という名前のフォーミュラが気になったので, brew info xz
で調べてみたら:
General-purpose data compression with high compression ratio
一般目的の高い圧縮率のデータ圧縮
というように, データを圧縮するためのユーティリィなんですね.
Vim で何を圧縮しているんでしょうね, ちょっと気になります…
brew uses
brew uses <formula>
今度は brew uses <formula>
で <formula>
に依存しているフォーミュラを検索することができます.
brew deps <formula>
の逆ですね.
流石に Vim に依存しているフォーミュラは見つからなかったので:
$ brew uses vim
先ほどの xz
で検索してみました:
$ brew uses xz
avfs imagemagick pxz squashfs
bcftools imagemagick@6 pypy3 termrec
binwalk innoextract python the_silver_searcher
crosstool-ng io r vice
dpkg libarchive root xar-mackyle
folly openttd rpm xdelta
gst-libav osquery rpm2cpio zbackup
htslib pixz shogun zbar
このようにデータを圧縮するユーティリティだけあって色々なフォーミュラに依存されて使われています.
こういう情報が簡単に見れるって Homebrew って賢いなぁって思います.
ただ brew uses <formula>
は <formula>
に依存している Homebrew でインストール可能な全てのフォーミュラが検索されるので, サーバーとのやりとりが発生し少し時間がかかるのでそこのところは注意が必要です.
brew uses --installed <formula>
なのでインストールしたフォーミュラの中からのみ検索したいという場合には --installed
オプションが使えます:
$ brew uses --installed xz
python the_silver_searcher vim
すると僕がインストールしているフォーミュラの中で xz
に依存しているフォーミュラはこれだけに絞られました.
当たり前ですがずいぶん絞られましたね.
何故だか the_silver_searcher が目立っているような気がして恥ずかしいです.
the_silver_searcher はまったく恥ずかしいフォーミュラではないのですが…
brew uses --recursive <formula>
で最後にちょっとだけ危険なオプション --recursive
を付けると, 再帰的に検索されることになるので <formula>
に依存しているフォーミュラで終わらず, さらにそのフォーミュラに依存しているフォーミュラも検索されることになります. 再帰的なのでさらに検索される可能性もあります.
で xz
で検索しちゃったらこんな感じになります:
$ git uses --recursive xz
arcade-learning-environment hfstospell py3cairo
archivemount htslib pybind11
arx-libertatis httpie pygitup
asciinema iamy pygobject3
asciinema2gif imagemagick pypy3
aubio imagemagick@6 pyqt
avfs innoextract python
aws-shell io pytouhou
awscli ipython qscintilla2
azure-cli iso-codes r
bandcamp-dl juju-wait rdup
bcftools jupyter redex
binwalk keepassc root
biogeme keepkey-agent rpm
blockhash khal rpm2cpio
boost-python3 khard rtv
buku lensfun samtools
certbot libarchive scipy
conan libgxps shogun
conjure-up libhttpseverywhere shyaml
corebird liblas simgrid
crosstool-ng libvoikko simple-tiles
csvkit macvim sip
csvtomd magic-wormhole siril
dartsim makepkg skafos
dcos-cli mapserver snakemake
ddgr mat snapcraft
dgen meson spaceman-diff
diffoscope meson-internal squashfs
distcc mgba submarine
dmtx-utils mitmproxy termrec
dpkg mps-youtube the_silver_searcher
dynare mvtools thefuck
eccodes mypy todoman
fades negfix8 tox
fb-client neofetch traildb
fdroidserver nestopia-ue trezor-agent
file-roller nlopt ttygif
flintrock numpy twoping
folly nuxeo twtxt
fwup ocrmypdf urh
gdal octave vapoursynth
gedit opencv vcftools
geeqie opencv@2 vcs
gifify openimageio vdirsyncer
git-annex openttd vice
git-cola osm2pgrouting vim
gmt osquery vim@7.4
gmt@4 pastebinit vips
gnome-autoar pdal virtualpg
gnome-builder pdf-redact-tools visp
gnome-latex pdfsandwich vsts-cli
gnome-recipes pgrouting whatmp3
gnuradio pipenv xar-mackyle
googler pixz xdelta
gr-osmosdr points2grid xdot
graph-tool ponysay xonsh
grc postgis yamllint
grib-api pqiv yosys
gspell pre-commit you-get
gst-libav pstoedit zbackup
gst-python pxz zbar
はい, 一気に量が増えましたね.
検索される対象に制限がかからなくなり, サーバーとの交信時間がさらに増えることになりました.
なので --recursive
を使うときはお気をつけていただければと思います.
まとめ
このように時々このフォーミュラの依存関係はどういう風になっているのかなと調べたくなったときは, brew deps
と brew uses
をそれぞれ使ってみていただけたらと思います.
僕は暇なときにたまにこのコマンドで遊んでいますw.
遊ぶためのコマンドではないと思いますが…
より詳しい情報は brew help deps
, brew help uses
で見ることができます.
関連記事
Homebrew で macOS に GNU コマンドをインストールする2018.07.25
Homebrew で macOS に Neovim をインストールして, 使えるように設定する方法2018.08.03
Homebrew のインストールと基本的な使い方2018.04.12
Ruby のクラスやメソッドのドキュメントを見れる ri コマンドが便利な件2018.09.08
Vim の :nmap と :nnoremap の違い2018.08.02