自動化厨の自分がhomebrew-caskを使わなくなった理由

2018/10/6 追記

現在homebrew-caskには自動アップデート機能のあるアプリをうまいことhandleする機能が備わっていて、 問題がなくなったので完全にhomebrew-caskを使い倒す方向にシフトしました。

=> dotfiles類をbrew bundleを使って整えるためにやったこと


面倒くさいことをしたくなく、Macを常に綺麗で最新の状態に保っておきたいという欲望があったので、 プロビジョニング手順を作っておくことにしています。 新しい物をインストールして日常的に使い始めるときは、必ずこのプロビジョニング手順でやる。

homebrew-caskはhomebrewのコンポーネントの1つで、 GUIアプリケーションをbrew cask install evernoteのように叩くだけで実行してくれるもの。 MacVimやGoogle日本語入力、Google Chrome、Flashplayerなど主要なものはこれで入れられるようになっている。

Homebrew Cask http://caskroom.io

これにハマって長い間GUIアプリケーションをhomebrew-caskにまかせていたが、 この前以下の理由で特にGUIアプリケーションはスクリプト管理せず手動でインストールすることにしたので、雑多に書いてみる。

  • アップデートでの不具合が非常に大きい
  • なかなか最新バージョンが降ってこない

今までの経歴

大まかな変遷は以下の様な感じ。

Brewfile => Ansible => Caskfile => 手動

はじめはBrewfileに手書きですべてのインストールするパッケージを書いていた。

次にAnsibleという軽量な構成管理ツールがあることを知り、すべてをAnsibleで書き直す。 余談だがMacのDockの自動非表示など細かい設定もやり始めたら沼にハマって楽しかった。

その後Ansibleのhomebrew-caskではされないアップデートがあることを知る。 flashplayerなどは上書きインストールを前提としているから、brew caskコマンドを 改めて打たなければいけなかった。 Ansibleに書いていたプロビジョニング手順のうちhomebrew caskをCaskfileという名前のシェルスクリプトに変更。

そして結局homebrew-caskは不便だと実感して、アドホックに手動で管理することになった。

不便だったこと

インストールしていく時は待っているだけで希望の状態が完成するので快感だったが、 日々使っていて個々のアプリケーションをアップデートす売る際に不具合が出るようになった。

なかなか最新バージョンが降ってこない

Homebrew caskにアップデートが反映されるためには、 homebrew caskリポジトリ内のCaskに最新のバージョン番号が書かれている必要がある。 公式でバージョンが上がっていても、Cask側が更新されていないと更新ができない。

Evernoteで以前、ノートのタイトルがUntitledに変わってしまうという不具合があった。 Evernoteは思ったことをすべて書く程度にめちゃんこ使っていたので一刻も早く直したかったが、 なかなかCaskのプルリクエストが通らなかった。

App Storeのアップデートが審査の関係で遅いからと別にインストールするようにしていたが、 これだと手動管理にした意味がない。

アップデートで不具合が起きる

Caskを使っているときはアップデートをする際にすごく気を使っていた。

アプリ内にある自動アップデート機能を使うと、 homebrew-cask管理じゃない状態でアップデートがインストールされる。 同じアプリケーションの違うバージョンがインストールされている、という状態になってしまう。

そうするとSpotlightのランチャーに複数出てきてしまって、Launchpadから開く場合とSpotlightから開く場合と、はたまたDockアイコンから開く場合と別の実体が起動されてしまうという始末。つらい。

Spotlightに複数のバージョンが!

これを避けるためには「Auto updateしますか?」というアラートが出てくるたびに、 「Install Update」を押したい誘惑をぐっとこらえて「Remind me later」を押し、後でhomebrew-caskでアップデートする。

自動アップデートのアラート

このアラートがFlash playerやEvernoteだとすごく頻繁に出てくるのが鬱陶しい。 出てきてアップデートがリリースされてから最速で入れられるならよいのだが、 実際にはインストールしないからただ鬱陶しいだけになる。

Caskでのアップデートは、brew cask updateというコマンドがあるとおもいきや実際は意味をなしておらず、 ヘルプを見るとbrew updateと同じ動作をしているもよう。

実際にアップデートするにはbrew cask installを改めて打って上書きインストールをする必要がある。 上で言うCaskfile運用の場合は、Caskfileをもう1回実行する。

どうやらちゃんとすべてをCask経由でアップデートした時も複数のバージョンが同時に存在してしまうようだ。

こうなるとSpotlight検索時にCaskで入れているアプリは最新バージョンが選択されているかを毎回目視で確認して、最新のものを選択してSpotlightのサジェストを矯正する。 Dockアイコンを削除して、起動した最新バージョンのDockを固定する。

もうやってられない。

iTermのアップデートも厄介。基本的にiTermはつけっぱなしにしているので、 iTerm内でCaskfile実行しちゃったりするとアップデートしたつもりがアップデートされていなかったりする。 Caskfileは必ずTerminalで実行する。

結局使わないでどうしたか

GIUアプリケーションのうちインストールすべきもののメモだけはするようにして、手動でやることにしました。 メモし忘れるリスクはあるけれど、 基本的に新Macのプロビジョニングは早々おこらないし、そのときそのときで必要になったものや 入っていなくて違和感を感じたものを都度都度入れていけばいい。

Evernoteもきちんとアプリ内の自動アップデート機能を使うようになったので、同じアプリが2つ以上導入されるなんていうことはなくなりました。

Homebrew Caskを使い始めたのは単に一元管理したいという欲望からで、特に大きく効率が改善するわけでないから、ちゃんとアプリごとに自動アップデートしたいタイミングでさせてあげるということで落ち着きました。