パッケージ一覧を失わずに Homebrew を消す
Homebrew には公式のアンインストーラがあり、その名のとおり動きます。驚くのは削除の範囲です。Homebrew 本体を消し、Homebrew が入れたものも消します。この二つは、今の目的によって意味がまったく違います。
ディスクの空きを増やしたいなら、多くの開発者の Mac ではいちばん効果の大きい手段になります。1 つの formula だけ直したいなら、必要以上の削除になります。
公式のアンインストーラー
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"
実行する前に読んでください。スクリプトは短く、これから起きることのもっとも正確な説明です。記事がそれを超えることはありません。
--dry-run に対応しており、大事なマシンではまずこれを実行するのが正しい手順です。削除予定だけを表示し、何も変えません。
スクリプトが実際に削除するもの
アンインストーラは Homebrew のプレフィックスと、その下のディレクトリを消します。bin、etc、include、lib、opt、sbin、share、var、Frameworks、そして Cellar と Caskroom の両方です。
要になるのは最後の二つです。Cellar には各 formula のファイルがあり、Caskroom には cask のメタデータがあります。Homebrew を消すとこれらも消えるので、Homebrew 経由で入れたコマンドラインツールは同時に消えます。
あわせて ~/Library/Caches/Homebrew と ~/Library/Logs/Homebrew、システムレベルの Homebrew キャッシュ、/etc/paths.d/homebrew、および /Applications と ~/Applications にある Homebrew 管理のアプリも消します。
削除する前に、手元の一覧を控えておく
一覧はあとから復元できず、必要なのはコマンド 1 つです。
brew leaves > ~/Desktop/brew-formulae.txt
brew list --cask > ~/Desktop/brew-casks.txt
brew leaves は依存関係を含まず、自分で指定した formula だけを出します。再構築のときに欲しいのはまさにその一覧です。新しいマシンでは、この 2 ファイルがあれば、何を入れていたかを一日かけて思い出す必要がなく、brew install 1 行で済みます。
パッケージが自分のディレクトリ外に置いたファイルは消えず、残しておく価値があります。Postgres のデータディレクトリ、/opt/homebrew/var 配下のローカル DB、ホームディレクトリ内の設定などです。アンインストーラはプレフィックス下の var も消すので、そこに置いた DB は一緒に消えます。大事なら先に外へコピーしてください。
最後に出る、つい読み飛ばしてしまうメッセージ
スクリプト終了時に、削除できなかった可能性のある Homebrew ファイルがあり、自分で消してもよい、というメッセージと一覧が出ることがあります。
それらのパスが具体名で示されるのは、このメッセージだけです。Homebrew が作っていないディレクトリの権限が原因であることが多く、一覧は短いです。ターミナルを閉じる前にどこかへ控えてください。すでに消したインストールにアンインストーラを再実行しても、同じ一覧は出ません。
シェルのプロファイルにはまだ記述が残る
アンインストーラは .zprofile、.zshrc、.bash_profile を編集しません。インストール時に足した eval "$(/opt/homebrew/bin/brew shellenv)" の行は残り、新しいシェルは毎回、もう存在しないバイナリを実行しようとします。
害はありませんが、エラーが出て煩わしいです。行を消すか、再インストールする予定なら残して構いません。
より小さな操作で足りないか考えてみる
Homebrew を消したくなる理由の多くは、もっと狭い操作で済みます。brew cleanup は古いバージョンとキャッシュ済みダウンロードを回収します。brew uninstall <formula> は 1 つだけ消します。brew autoremove はもう誰も使わない依存を落とします。どれを走らせても、Mole はプレフィックスの使用量を実行前後で表示します。その数字を見れば、そもそもフル削除が必要だったかが分かります。
書き出した一覧からの再構築
新しいマシンに Homebrew を入れたら、次の 2 つのコマンドで以前の環境を復元できます。
xargs brew install < brew-formulae.txt
xargs brew install --cask < brew-casks.txt
cask には --cask が必要なため、一覧は分けておきます。混ぜてしまうと、半分の項目で失敗します。
うまくいくのは brew list ではなく brew leaves を使うからです。brew list には依存パッケージも含まれるため、そのまま再実行すると本来は自動で入るはずのパッケージまで数百個も明示的にインストールしてしまいます。その結果、明示インストール扱いとなり、あとから brew autoremove しても削除されなくなります。一方、brew leaves は実際に自分で入れたものだけを返すので、依存関係の解決は Homebrew に任せられます。