Macでソフトウェア開発をしていると、Homebrewは欠かせないツールですよね。
でも、いくつものパッケージをインストールするうちに、
「このパッケージは他のどんなものに依存しているの?」
「これを削除したら他のソフトが動かなくなる?」
と悩んだことはありませんか?
特に長期間使っている開発環境では、依存関係が複雑に絡み合い、次のような問題が起きがちです:
- 使っていないパッケージが大量に残ってディスク容量を圧迫
- 削除したつもりのパッケージが完全に消えていない
- パッケージの更新時に予期せぬエラーが発生
この記事では、Homebrewのパッケージ依存関係を視覚的に理解し、効率的に管理する方法を初心者にもわかりやすく解説します。
Homebrewにおける「依存関係」とは?

Homebrewでパッケージ(Formula)をインストールするとき、そのパッケージが正常に動作するために必要な他のパッケージも一緒にインストールされます。
これが「依存関係(dependency)」です。
わかりやすい例:
- ffmpeg (動画処理ツール) は、x264(動画エンコーダ)、lame(MP3エンコーダ)、libvpx(VP8/VP9エンコーダ)などに依存しています
- node (Node.js) は、icu4c(国際化コンポーネント)、openssl(暗号化ライブラリ)に依存しています
こうした依存関係を把握しておくことで:
- ディスク容量を節約できる(不要な依存を削除)
- トラブルシューティングがスムーズになる
- アンインストール時の影響を予測できる
依存関係を確認する基本コマンド

基本:パッケージが依存しているものを確認
brew deps パッケージ名
このコマンドでパッケージの依存先がわかります。
例えば、ffmpegの依存関係を確認してみましょう:
brew deps ffmpeg
出力例:
aom
dav1d
fontconfig
freetype
frei0r
gnutls
lame
libass
libbluray
...
これは単純なリスト表示でffmpegの依存先を表示しています。
ですが、複雑なパッケージだと依存が多すぎて把握しづらいことがあります。
階層構造で確認(より分かりやすい)
brew deps --tree パッケージ名
例:
brew deps --tree ffmpeg
出力例:
ffmpeg
├── aom
│ ├── jpeg-xl
│ │ ├── brotli
│ │ ├── highway
│ │ └── ...
│ └── ...
├── dav1d
├── fontconfig
│ ├── freetype
...
これで、どのパッケージがどのパッケージに依存しているかがツリー構造で分かります。
隠れた依存関係まで全て確認
brew deps --include-build --include-optional --tree パッケージ名
このコマンドを使うと、ビルド時のみ使用される依存関係やオプションの依存関係も含めてすべての依存関係を表示できます。
逆依存(何に使われているか)を調べる方法

通常の依存関係は「このパッケージが何に依存しているか」ですが、逆依存は「このパッケージは何に使われているか」を示します。
brew uses --installed パッケージ名
これでパッケージに依存しているインストール済みのものが表示されます。
例えば、opensslが他のどのパッケージに使われているかを確認してみましょう:
brew uses --installed openssl
出力例:
curl
git
node
python@3.9
wget
...
この情報は、特定のパッケージを削除する前に確認すべき重要な情報です。
重要なパッケージに使われていると、削除時に問題が発生する可能性があります。
依存グラフを可視化するツール紹介

ターミナルの文字だけでは依存関係が把握しづらい場合、視覚化ツールが非常に役立ちます。
brew-graphで依存関係を画像として出力
まず必要なツールをインストールします:
brew install graphviz
brew install brew-graph
そして依存グラフを生成:
brew graph パッケージ名 | dot -Tpng -o dependency-graph.png
例えば、nodeの依存グラフを生成するには:
brew graph node | dot -Tpng -o node-deps.png
これにより、依存関係が視覚的に表現され、複雑な関係も一目で把握できるようになります。
複数パッケージの依存グラフを作成
brew graph パッケージ1 パッケージ2 | dot -Tpng -o multiple-deps.png
インタラクティブな依存グラフ(HTML形式)
より詳細に調査したい場合はHTMLバージョンも作成できます:
brew graph --highlight パッケージ名 | dot -Tsvg -o deps.svg
echo '<html><body><img src="deps.svg"></body></html>' > deps.html
このHTMLファイルをブラウザで開くと、拡大・縮小が可能なインタラクティブな依存グラフが表示されます。
不要な依存を削除する方法(autoremove)

依存関係を理解したら、次は不要なパッケージの削除です。
Homebrewには、使われなくなった依存パッケージを自動的に検出して削除する機能があります。
使われていない依存パッケージを表示
brew autoremove --dry-run
これにより、削除可能な依存パッケージの一覧が表示されます。実際には削除されません。
使われていない依存パッケージを実際に削除
brew autoremove
このコマンドは、他のパッケージから使われなくなった依存パッケージを自動的に削除します。
古いバージョンやキャッシュの削除
brew cleanup
これにより、古いバージョンのパッケージやダウンロードしたインストールファイルのキャッシュが削除され、ディスク領域を節約できます。
特定のパッケージとその依存関係を完全に削除
brew uninstall --ignore-dependencies パッケージ名
brew autoremove
この2つのコマンドを組み合わせることで、パッケージとそれに関連する使用されなくなった依存関係を完全に削除できます。
よくある注意点と落とし穴
よくある問題 | 対処・回避策 |
---|---|
brew uninstall したのに依存が残る | brew autoremove で手動削除する |
brew deps に表示されない依存がある | --include-optional オプションを追加する |
逆依存を見落として削除してしまった | 削除前に必ずbrew uses で確認する |
GUIアプリ(Cask)の依存関係が見えない | brew cask は依存管理が異なるため注意 |
システムが遅くなるほどの依存チェック | --installed オプションを使って範囲を限定する |
依存関係が壊れたときの復旧方法
依存関係に問題が発生した場合は、以下のコマンドで修復できることがあります:
brew doctor
brew update
brew upgrade
それでも解決しない場合は:
brew link --overwrite パッケージ名
まとめ
操作内容 | コマンド |
---|---|
依存を確認 | brew deps パッケージ名 |
階層的に依存を確認 | brew deps --tree パッケージ名 |
逆依存を確認 | brew uses パッケージ名 |
不要な依存を削除 | brew autoremove |
可視化グラフ生成 | brew graph パッケージ名 | dot -Tpng -o deps.png |
依存関係の診断 | brew doctor |
コメント