Brew-file
にupdateというBrewfileのアップデートと
それに伴うHomebrewパッケージのアップデートを行うコマンドがありますが、
この中でBrewfileに無いパッケージを削除するcleanというコマンドも
実行するようになっていました。
これが気づかないうちに色々パッケージを消してしまうことがあるので デフォルトでは実行しないようにしました。
Brew-fileのupdateコマンド
brew file updateを実行すると、これまでは
brew file pull: RepositoryにあるBrewfileをpullbrew file install: pullしてきたBrewfileに従いパッケージをインストールbrew file clean: pullしてきたBrewfileにないパッケージを削除brew update: Homebrewのアップデートbrew upgrade: Homebrewのパッケージアップグレードbrew file init: 現在のパッケージリストからBrewfileを作成brew file push: 作成したBrewfileをpush
を実行していました。
複数の環境でBrewfileをGitHubなんかで管理している時、 一方の環境でパッケージを足したらもう一方にも自動的に加えられる様にしてあります。
加えて、一方の環境で削除したパッケージももう一方の環境で
自動で削除して状況を同期してしまおう、というのがcleanも入れている動機です。
ですが、これにはちょっと問題があって、複数で管理していなくても、 きちんとBrewfileがアップデートされていないとインストールした パッケージが削除されてしまうことがあります。
brew-wrap
を導入していればbrew installでパッケージをインストールした場合
Brewfileは自動的にアップデートされパッケージが追加される様にはなっています。
また、この辺以前ちょっと改良して、
brew install時にインストールするパッケージに依存するパッケージがあり
それらも同時にインストールする場合、
それら依存パッケージもきちんとBrewfileに書き込む様にしています。
なのでbrew-wrapを利用している場合、
通常インストールするパッケージや、またcaskを利用して
アプリをインストールする場合は問題になりません。
ただ、この前からApp Storeでインストールしたアプリも管理できる 様にしましたが、 GUIなApp Storeアプリからアプリをインストールした場合 当然Brewfileはアップデートされません。
なのでインストール後、brew file initを実行するなど
手動で更新する必要があります。
これをしないまま、レポジトリのBrewfileをアップデートしようと
brew file updateを実行してしまうと
上の実行順序で分かるようにBrewfileを自前環境で更新する前にcleanを実行するため
新しくApp Storeからインストールしたアプリが削除されてしまいます。
削除されたものをきちんと同期するよりも
予期せず削除されることを避けた方が良いと思うので
このcleanに関してはデフォルトで実行しない事にしました。
cleanも実行したい場合は
$ brew file update -C
と-Cオプションを付けるとcleanも含めて実行できる様になっています。
後、上の実行順を改めて見てみて、
brew update/upgradeを中途半端なところで行ってるので
これらは一番最初に実行するようにも変更してあります。
(installした後にアップデートがあると二度手間になるので。)

