Homebrew Cask でインストールしたアプリについて、 アプリ自体のアップデートはほとんどのアプリで自分で行われていますが、 brew-file を使ってインストールされてるアプリを調べたら Caskでインストールされたはずの物も多くがCaskの管理外、と出てしまいました。
これはCaskファイル自体のバージョンが上がっていても、 Caskコマンドにはアップグレードコマンドが無いため、 古いディレクトリにそのまま新しい物がアプリ自身によってインストールされてるためです。
それ程困る話でもないのですが、アップグレード出来るようにしてみました。
brew cask upgrade
upgrade
コマンドについては本家の方でも議論されています。
Draft Roadmap:
brew cask upgrade
· Issue #4678 · caskroom/homebrew-cask
Todoリストの中でもハイプライオリティで進めていきたいとされてますが、 一筋縄で行くものでもないようです。
upgradeスクリプト
こんな感じのスクリプトで 全てのCaskによってインストールされたアプリが 最新のCaskファイルと対応してるかチェックして インストールし直すことが出来ます。
1 2 3 4 5 6 |
|
brew cask list
ではCaskによってインストールされた全アプリがリストされますが、
brew cask info
では、インストールされているかどうかはバージョン単位で
調べるため、
Cask内でのバージョンが上がっているとNot installedと表記されます。
これを使って古いバージョンのものがあれば新しいバージョンをインストールして リンクが新しい方へ向く様に変更が行われます。
ただし、古いといっても、Caskのディレクトリ的に古いだけで、 実際にはアプリ自身でアップデートしていて最新になっている場合もあります。 (むしろCaskのほうが古いバージョンを指定している場合も。)
そのようなときに微妙ですが、管理する上ではアップグレード しておいたほうがやりやすいといえばやりやすいかと。
また、これを行うと端からアプリをチェックして再インストールしたりするので、 使っているアプリがあるとおかしな動作をする可能性があります。
ですので、もし、アップグレードをしたい場合は、バックアップを取った状態で 消えたら困るような物を開いてない状態で行ってください。
これを実行した結果、一度途中でMacが落ちてしまいました。 (どのアプリのところかはイマイチ確認できず。。。 ただ、再起動後にもう一度行ったら何も問題なく動いています。)
ちなみに古いバージョンの消去ですが、
brew cleanup --force
してもbrew cask clenup
しても消せません。
upgrade
を考慮に入れてないのでcask cleanup
でも古いバージョンを消す
操作が入ってません。
古いバージョンを消すには上のを
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
みたいに変えてあげれば一応消せます。
brew-fileのコマンド: cask_upgrade
この前アップデートした brew-file の中にもコマンドを入れてみました。
$ brew file cask_upgrade
とすると上のアップグレードコマンドが実行される様になっています。
$ brew file cask_upgrade -C
とするとCleanupコマンドも同時に行います。
また、これとは別に
$ brew file casklist
というコマンドがあります。 このコマンドは、/Applications等にあるアプリを片っ端から調べて、 Caskが用意されているかどうか、さらにCaskによってインストールされているかどうか、 の結果を出してくれます。
これを使うと自分が使ってるアプリの中で、Caskが用意されてる物を簡単に見つけられるので、 必要ならCaskでインストールし直すことが簡単に出来るようになります。
これを試している時に、やたらと多くのアプリがCaskはあるけど Caskによってインストールされてない、と出て調べてみてみたわけです。
brew-fileのpythonバージョン
今回の話に直接関係ないですが、 スクリプトが大きくなってきて実行時間も少し気になってくるようになったので、 シェルスクリプト以外で実装してみよう、ということでPythonで書きなおしてみました。
Homebrewからでも
$ brew install rcmdnk/file/brew-file --devel
または、すでにrcmdnk/homebrew-file をtapしてあれば、
$ brew install brew-file --devel
とするとpythonバージョンがインストールされます。
追記: 2022/09/03
現在は普通にbrew install rcmdnk/file/brew-file
でpythonバージョンが入ります。
追記ここまで
結局特に時間がかかるのがbrew update
コマンドだったりするので劇的に
速くなったわけでは無いですが、
沢山インストールしている状態だとinit
コマンド等で結構処理が速くなりました。
良さそうならこちらを主戦に置き換えたいと思います。
Rubyで書こうかとも思ったのですが、Rubyはまだ良くわからないので 取り敢えずPythonで。
RubyだとHomebrewの中でRubyだけで閉じて行えるのでもっと速くできるかもしれません。