MacのHomebrewをbrew cleanupとautoremoveで整理する
Homebrew は、以前よりも積極的に古いバージョンやキャッシュ済みのダウンロードを管理します。 自動クリーンアップが無効になっていなければ、インストールやアップグレード時に対象の formula を整理し、Homebrew は定期的にすべての formula をクリーンアップします。長く使っている インストール環境でも、ダウンロード、ピン留めされたバージョン、ビルド成果物、依存関係は たまり得ます。prefix 配下を削除する前に、Homebrew 自身のメタデータを確認してください。
Homebrew が残しておくもの
次の 3 種類の残り物がたまります。
- 古いバージョン。 クリーンアップは通常、置き換えられたバージョンを削除しますが、保持された バージョンや最近アップグレードしたバージョンは、しばらく Cellar に残ることがあります。
- ダウンロード済みアーカイブ。 bottle と cask のダウンロードはすべて Homebrew のキャッシュに保存され、再ダウンロードを避けるために残されます。
- 未使用の依存関係。 現在の Homebrew のクリーンアップとアンインストール操作は通常、 不要になった formula を削除します。自動削除が無効になっていない限りです。 古いインストールや中断された操作では、一部が残ることがあります。
ダウンロードキャッシュのサイズは次のように直接確認できます。
brew --cache
du -sh "$(brew --cache)" 2>/dev/null
三つの保存領域を別々に測る
一つの合計では三つの判断が隠れます。クリーンアップ前にインストール済み formula、cask メタデータ、ダウンロードキャッシュを記録します。
du -sh "$(brew --cellar)" "$(brew --caskroom)" "$(brew --cache)" 2>/dev/null
大きなキャッシュは再ダウンロードできるため回収しやすい領域です。大きな Cellar は主にインストール済みソフトウェアで、cleanup が消せるのは置き換え済みの版だけです。Caskroom が大きくてもアプリ本体がそこにあるとは限らず、通常は /Applications にあります。後でもう一度測り、実際に縮んだ領域を確認します。
クリーンアップする
まず、Homebrew が削除対象にする古いバージョンとダウンロードを確認します。次のコマンドでは削除しません。
brew cleanup -n
表示されたパスを確認します。正常に終了して削除候補がなければ、その範囲に対象はありません。エラーは対象なしとは異なります。古いバージョンやオフライン用ダウンロードが不要なら、通常のクリーンアップを実行します。
brew cleanup
現行の Homebrew マニュアル
によると、通常のクリーンアップは、デフォルトで古いインストール済みバージョンと
120 日より古いダウンロードを削除します。HOMEBREW_CLEANUP_MAX_AGE_DAYS でこの期間を
変更できます。ドライランには -n を使います。より踏み込んだ -s モードは、
現在インストールされている formula と cask 用のダウンロードは残しつつ、
キャッシュ済みダウンロードをより多く掃除します。
より広いキャッシュ削除には別のプレビューが必要です。最初のコマンドで対象を確認し、その範囲でよければ 2 番目を別に実行します。
brew cleanup -s -n
brew cleanup -s
Homebrew のクリーンアップとアンインストールは、いまでは未使用の formula 依存関係を
デフォルトで削除します。その依存関係の判断を直接確認したいときは、
brew autoremove が役立ちます。まず次の 1 行目だけで対象を確認し、自分のスクリプトや
プロジェクトが直接使っていないと分かってから、2 行目を別に実行してください。
brew autoremove --dry-run
brew autoremove
brew list はインストール済みパッケージを、brew outdated は未適用の更新を示します。
パスをハードコードする代わりに、brew --cellar、brew --caskroom、brew --cache で
場所を調べてください。/opt/homebrew を決め打ちしないこと。Intel と Apple silicon の
インストールでは場所が異なります。
設計上の安全性
Homebrew のクリーンアップは、Cellar ディレクトリを手で消すよりリスクが低いです。 バージョンと依存関係のメタデータを使うためです。それでも、ロールバック用のバージョンや オフラインで使う予定だったキャッシュ済み bottle は削除されることがあります。 クリーンアップと autoremove の両方を事前確認し、ピン留めしたバージョンや運用上重要な バージョンは意図的に残してください。
内部の仕組み:Cellar、Caskroom、クリーンアップの判断
Homebrew は各 formula を、brew --cellar が示す Cellar 内のバージョン付きディレクトリに
インストールし、有効なバージョンを prefix へリンクします。アップグレードでは、
シンボリックリンクを張り替える前に、新しいバージョンを古いものの隣に置きます。
cask はバージョン付きメタデータを Caskroom に保持し、アプリ本体は多くの場合
/Applications に置かれます。ダウンロードは brew --cache が示すパスを使い、
Homebrew の方針に従って保持されます。brew cleanup は、単に現行以外のディレクトリを
すべて消すのではなく、インストール済みバージョン、保持期間、依存関係のメタデータを
使います。brew autoremove は、依存関係だけの部分を別コマンドとして公開します。
どちらも推測ではなく Homebrew 自身の記録に基づくため、フォルダを手で消すより安全で
説明しやすくなります。古いツールチェーンやオフライン bottle に依存するマシンでは、
事前確認が依然として有用です。
ディスクマップと Homebrew の役割分担
Mole は Homebrew のダウンロードと、brew cleanup --dry-run が削除候補にする古い formula のバージョンを表示します。古いバージョンの検出は標準の /opt/homebrew と /usr/local に対応し、リンク中やピン留め済みのバージョンは残します。Cellar 全体を空にしたり、Homebrew の依存関係の判断を置き換えたりはしません。実際の候補を確認してからクリーンアップします。 古いバージョンは未選択で表示され、確認してから選べます。
安全な作業の順序
Homebrew のパス用コマンドで使用量を測り、brew cleanup -n で通常の削除対象を確認します。
-s を検討するときは、そのモードにもプレビュー用オプションを付け、広がる範囲を確認してください。brew autoremove は
別途事前確認してください。キャッシュの問題ではなく、依存関係の問題に答えるからです。
自動クリーンアップが動いており、ディスク圧が低いときは、固定のクリーンアップ予定は
必要ありません。