Brew-file
のcasklist
というインストールされてるアプリの
cask
への対応等を調べるコマンドの改善について。
casklistの改善
Brew-fileの
casklist
コマンドは/Applications等にインストールされてる
アプリを片っ端から調べて、
brew cask
でインストールされているか、
そうでない場合、対応するCaskは用意されてるか、等を調べるコマンドです。
元々、既にインストールされてるアプリのうちで Caskで入れられる物があるかどうかを調べて、 管理しやすいようにCaskで入れなおす、と言うのが動機のコマンド。
ついでにCaskでインストールされてるアプリのリストも取り敢えず作ったりしていました。
ただ、これまでのものだと
HOMEBREW_CASK_OPTS
で--appdir
を指定していてもこのディレクトリを見に行かない。- 元々Caskでインストールされた物以外をチェックすることが動機なのでこれでも良いのですが、 Caskのリストもコンプリートする様にしたいと思うとこれも見に行った方が良い。
- Mail.app等が
opera-mail
のCaskに対応するようになってたりする。opera-mail
のCaskにはOpera Mail.app
というワードがあるため。
- 複数のアプリがインストールされるCaskが重複する。
- アプリ基準で見ているので同じCaskがあってもそのまま書き出していたため。
- 遅い。
brew cask info
を大量に実行していたため。
と言った問題があったのでそれぞれ改善してみました。
HOMEBREW_CASK_OPTS
で--appdir
を指定していてもこのディレクトリを見に行かない
元々--caskroom
の設定は読み込む様にしていたので、
同じように--appdir
も見るようにして、
/Applications
か$HOME/Applications
以外であれば追加して見に行く様にしました。
Mail.app等がopera-mail
のCaskに対応するようになってたりする
Caskによってはpkg
ファイルだけがCaskファイルの中に書かれていたりして
アプリケーションがみつからなかったりしますが、
name
の所に対応する名前があったり(e.g. adobe-reader)するものもあり、
Caskファイルの中身に対応する名前を探せばなんとかなることがあります。
ただ、これだと短い名前のMailみたいのが余計にマッチしてしまいます。
中々上手く弾く方法が見つからなかったので、 取り敢えずデフォルトで入ってるアプリの中で こうなってしまうものを直接弾くようにしました。
また、Pocket.appがwhatapp-pocket
に間違って対応付けられる様になってましたが、
これは最初にbrew cask list
で得られるCaskに対して
アプリを調べて先に処理するようにしました。
これで取り敢えず手元の環境にあるものは余計な対応等を作らないように出来てますが、 例外はあり得るのでもし上手く行かないものがあれば TwitterなりGitHubのIssueなりで連絡していただければ、と。
複数のアプリがインストールされるCaskが重複する
Caskfileを元にBrewfileを作る時に面倒が起こることがあるな、 ということで、Caskfile内に作るリストは ソートしてさらにCaskが重複するものは2つ目以降をコメントアウトするようにしました。
遅い
brew
コマンドを通すとどうしても遅くなるので、
brew cask info
は外して、Caskファイルを直接読み込んで中身をみてチェックする様にしました。
インストールされているかどうかはbrew cask info
でも
/opt/homebrew-cask/Caskroom/<CASK_NAME>/<VERSION>
のディレクトリがあるか無いか、でチェックしてるだけみたいなので、 それと同じ事をしています。 (主に新しいVersionがあるかないかをチェックする用。)
また、最初に全てのCaskファイルを読み込んでキャッシュしておくように変更。 (以前はもともとCaskファイルの中身をチェックするところでも 1つのアプリケーションをチェックする毎に必要なだけ開いていました。)
これらの結果、 全部で135アプリがインストールされてる状態(うち59がCaskのアプリ)で 1分以上かかっていたものが10秒程で終わるようになりました。
その他の変更
- /Applications等にディレクトリを作ってその下にアプリケーションをインストールする様な物を見つけるため、ディテクトリの名前もCaskの中で検索する様にした。
- e.g. NetBeans, GoogleJapaneseInput.localized
- インストールされているCaskでアプリケーションが見つからないもの(Fontやシステム設定だけするもの、規定の場所以外にアプリをインストールするもの、またアプリの名前がCaskファイルに見つからないもの)についても
cask install
行を書き出すようにした。 - MacVim.app等は
cask install
用のCaskとbrew install
用のFormula両方が用意されている。- MacVim.appに関しては現在両方同じバージョンで同じ様にインストールされる。ただし、実態を置く場所が違う。
- この様なアプリに対して、
cask
の方で検索した後、同じ名前のFormulaがあるかどうかも調べて、そちらでインストールされてる場合はinstall macvim --with-lua
の様に書きだす様な機能を追加。(オプションも書き出される。)
Apps installed but no casks are available
の中でAppStore
からインストールされたものAppStore
からインストールされた物としてリスト。casklist
は関係ないですが、全体的にPEP8に対応するようにコードを修正。