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 upgrade
outline · Issue #29301 · caskroom/homebrew-cask
Implement
brew cask upgrade
by 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
は今回追加しました。