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
クリーンアップする
次のコマンドは、古いバージョンとダウンロードキャッシュを実際に削除します。 まだ実行せず、後述のプレビューで対象を確認してください。
brew cleanup
現行の Homebrew マニュアル
によると、通常のクリーンアップは、デフォルトで古いインストール済みバージョンと
120 日より古いダウンロードを削除します。HOMEBREW_CLEANUP_MAX_AGE_DAYS でこの期間を
変更できます。ドライランには -n を使います。より踏み込んだ -s モードは、
現在インストールされている formula と cask 用のダウンロードは残しつつ、
キャッシュ済みダウンロードをより多く掃除します。
brew cleanup -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 の
インストールでは場所が異なります。
三つの保存領域を別々に測る
一つの合計では三つの判断が隠れます。クリーンアップ前にインストール済み formula、cask メタデータ、ダウンロードキャッシュを記録します。
du -sh "$(brew --cellar)" "$(brew --caskroom)" "$(brew --cache)" 2>/dev/null
大きなキャッシュは再ダウンロードできるため回収しやすい領域です。大きな Cellar は主にインストール済みソフトウェアで、cleanup が消せるのは置き換え済みの版だけです。Caskroom が大きくてもアプリ本体がそこにあるとは限らず、通常は /Applications にあります。後でもう一度測り、実際に縮んだ領域を確認します。
設計上の安全性
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 の役割分担
ディスクマップやクリーナーは、Homebrew のキャッシュを見つけ、サイズを示すことができます。 Mole はそのカテゴリを表示できますが、Cellar のバージョンと依存関係については、 Homebrew 自身のコマンドが依然として権威です。発見と所有権を混同しないでください。
安全な作業の順序
Homebrew のパス用コマンドで使用量を測り、brew cleanup -n で通常の削除対象を確認します。
-s を検討するときは、そのモードにもプレビュー用オプションを付け、広がる範囲を確認してください。brew autoremove は
別途事前確認してください。キャッシュの問題ではなく、依存関係の問題に答えるからです。
自動クリーンアップが動いており、ディスク圧が低いときは、固定のクリーンアップ予定は
必要ありません。