Homebrewで通常のパッケージはbrew upgradeでアップデート出来ていましたが、
Caskでインストールしたアプリに関してアップデートする方法は用意されていませんでした。
結構前から議論はあったのですが色々面倒があってなかなか実装されないままでましたが、
昨年末位にbrew cask upgradeというコマンドが実装されたようです。
brew cask upgrade
コマンドとしては
$ brew cask upgrade
とするとCaskでインストールしたアプリのうち、
auto_updates true
とCaskで定義されている以外のアプリに関して全てのアプリのバージョンアップグレードを行います。
auto_updatesがtrueになっているものは、例えばgoogle-chromeなど
アプリが自分でアップデートする様になっているものです。
バージョンアップグレードは基本的には古いバージョンをアンインストールして新しいバージョンを再インストールする、とうい形です。
なのでgoogle-chromeなどはアプリの中で直接行った方が素直にアップグレードできるので
デフォルトではcask upgradeでアップグレードしないようになっています。
もし、そのようなアプリも含めて全て新しいバージョンにしたい場合は
$ brew cask upgrade --greedy
とします。
この--greedyではバージョンはCaskでインストールした時のものをチェックするだけなので、
アプリ自身で最新にアップグレードしていたとしても再インストールが行われる場合があります。
アップデートが必要なアプリを確認するには
$ brew cask outdated
をすると新しいバージョンのあるアプリが表示されます。
この場合もauto_updatesなものに関しては無視されますが、
それらも見たい場合には
$ brew cask outdated --greedy
とします。
ちなみにcaskコマンドですが、現在は自動でインストールされるので
$ brew tap caskroom/cask
とかしなくても自動でtapされます。
数年前から議論はあった
今回の導入は1年ほど前に固め始めたものが入った感じです。
brew cask upgradeoutline · Issue #29301 · caskroom/homebrew-cask
Implement
brew cask upgradeby amyspark · Pull Request #3396 · Homebrew/brew
古くは
Draft Roadmap:
brew cask upgrade· Issue #4678 · caskroom/homebrew-cask
な感じで数年前から議論としてはあったものですが、
auto_updatesという値を導入することで
余計な再インストールをすること無くupgrade出来る様になったので
ようやく導入された、という感じです。
brew-fileの変更
上にも書いたように数年前から議論はあったものの実現が難しそうだったので、 簡易的なものをbrew-fileに実装していました。
$ brew file cask_upgrade
を行うと、上のbrew cask upgrade --greedyと同じ様に
全てのアプリに対して新しいバージョンがあればuninstall/installを行う、という仕様でした。
今回、cask upgradeが実装された(ことに気づいた)のでこの機能は外しました。
また、brew file casklistというコマンドもあって、
この機能ではMacにインストールされている全てのアプリを検索して、
Caskでインストールされたものか、直接インストールしたけどCaskがあるものか、
AppStoreからインストールしたものか、等をリストしてくれます。
このリストを作る時にバージョンチェックをしてobosleteな項目も作ってましたが、
brew cask outdatedで簡単に取れるしわざわざcasklistでチェックする必要はないかな、
ということでバージョンチェックは外しました。
もう1つ、
$ brew file update
を行うと、
$ brew update
$ brew upgrade --fetch-HEAD
$ brew cask upgrade
$ brew file pull
$ brew file install
$ brew file init
$ brew file push
と同様のことをしてくれますが、このcask upgradeは今回追加しました。


