Homebrewを使っていると、時々パッケージが正常にアンインストールできないことがあります。brew uninstallコマンドを実行してもパッケージが削除されず、brew outdatedを実行すると古いバージョンが依然として表示され続ける、という問題に遭遇しました。
この記事では、その原因と解決策について解説します。
問題の状況
onyxというCaskパッケージをアンインストールしようとしたところ、以下のような状況になりました。
> brew uninstall onyx
==> Uninstalling Cask onyx
==> Purging files for version 4.9.2 of Cask onyx 一見アンインストールが成功したように見えますが、brew outdatedを実行すると、古いバージョンが残っていると表示されてしまいます。
> brew outdated
onyx (4.8.5) != 4.9.2 再度brew uninstallを実行しても、同じ結果が繰り返されるだけでした。
原因
この問題は、おそらくパッケージのインストール中に何らかの理由で処理が中断され、Homebrewが管理しているバージョン情報と、実際にインストールされているファイルとの間に不整合が生じたために発生したと考えられます。
解決策
このような場合、Homebrewの管理ディレクトリから手動でファイルを削除することで解決できます。
- まず、問題のパッケージがインストールされているCaskroomディレクトリを確認します。
> ls /opt/homebrew/Caskroom/onyx 4.8.5 4.9.2.upgrading案の定、古いバージョン(
4.8.5)と、アップグレードに失敗したと思われるディレクトリ(4.9.2.upgrading)が存在していました。 - これらのディレクトリを直接削除します。
> rm -fr /opt/homebrew/Caskroom/onyx - 最後に、
brew outdatedを再度実行して、パッケージが表示されなくなったことを確認します。> brew outdated
これで、問題は解決しました。
まとめ
Homebrewでパッケージのアンインストールや更新がうまくいかない場合は、Caskroomディレクトリ(/opt/homebrew/Caskroom/)に古いバージョンのファイルが残っていないか確認してみてください。多くの場合、問題のパッケージのディレクトリを直接削除することで、不整合を解消できます。