rcmdnk's blog

樽 (ハヤカワ・ミステリ文庫)

Brew-filecasklistというインストールされてるアプリの caskへの対応等を調べるコマンドの改善について。

casklistの改善

Brew-filecasklistコマンドは/Applications等にインストールされてる アプリを片っ端から調べて、 brew caskでインストールされているか、 そうでない場合、対応するCaskは用意されてるか、等を調べるコマンドです。

Homebrew-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.appwhatapp-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に対応するようにコードを修正。
Sponsored Links
Sponsored Links

« MacのDockからHomeディレクトリを見ると大量に同じディレクトリが発生している問題 Firefox最新版でAutopagerが動かなくなった »

}