MacのHomebrewで扱うパッケージを管理するためのhomebrew-file
ですが、Caskでインストールしたアプリをチェックして新しいバージョンがあれば
インストールするcask_upgrade
というサブコマンドがあります。
これがちょっと前からきちんと働いてなかった様なので治しました。
brew file cask_upgrade
cask_upgrade
はHomebrew Caskでインストールしたアプリをチェックして
現在入ってるバージョンが最新のCaskで定義されているものより古ければ
新しい物を再インストールするサブコマンドです。
$ brew file cask_upgrade
bettertouchtool was installed by cask, but it may have newer version, might be removed or overwritten by direct installation.
Install it by cask.
Remove older version: /usr/local/Caskroom/bettertouchtool/1.69
Remove older version: /usr/local/Caskroom/bettertouchtool/1.75
...
This is dryrun.
Please use -C to execute commands.
こんな感じで新しい物があるアプリや、古いバージョンのディレクトリが残ってたりすると 探してくれます。 このままだとdry runで最後に上の様なメッセージが出るので、実際に 再インストールや古いディレクトリの削除を行うには、
$ brew file cask_upgrade -C
としてください。
で、このコマンドがちょっと前からちゃんと働いてなかったみたいなんですが、 おそらくこの前あったCaskの仕様変更に関連するところだと思います。
以前はCaskがアップデートされてバージョンが新しくなると、 古いバージョンが入っていても
$ brew cask info bettertouchtool
とかするとNot installedという行が出ていました。
これが、今は古いバージョンだけしかなくてもそのディレクトリとかが表示されたりして Not installedとは出ません。
この辺の変更に合わせ、
cask_upgrade
では現在のバージョンが入ってるかどうかきちんと確認するようにしました。
具体的には$(brew –prefix)/Caskroom/<app name>/ のディレクトリ下にバージョン名のディレクトリがあるので、 現在のバージョンのディレクトリがあるかどうか確認しています。
また、インストールはされた状態になっているので、
brew cask install --force <app name>
で強制的に再インストールしています。
一つ注意として、この中でチェックしてるバージョンは Caskでインストールしたバージョンなので、 例えばFirefoxなど、自分でアップデートする機能が付いているアプリに関しては アプリ側でアップデートしていても再インストールされます。
場合によってはCaskの定義が古いと古いバージョンで上書きしてしまう可能性もあるので 注意してください。 インストール後、さらにアプリ側でアップデートをすれば最新になりますが、 ちょっと面倒があるかもしれません。