先日書いたとおり1 ちょっと前に新しいMacに移行したのですが、 その際にアプリをHomebrew Caskで出来るだけ管理できるように移行しました。 その際、ちょこちょこ前と変わってる部分もあったのでその辺のまとめ。
Homebrew Cask
前に書いたHomebrewの拡張:brewdler, tap, cask にあるように、 Homebrewでは Cask という拡張を使って通常のアプリも管理できるようになります。
これが結構簡単にできるので、去年ちょっと流行りかけた BOXEN を追い越して現在流行りかけてる感じです。
ということで、BOXENは以前まだLionだった時に対応してなくて諦めて放置したまま 試してませんでしたが、 Caskの方も結構便利になってきたみたいなのでCaskを使ってアプリを管理していこうと。
ところで、色々いじっていたらちょうどつい最近、レポジトリが
から
に移った所でした。
一昨日くらいまではphinzeのレポジトリもまだあったんですが、 今はcaskroomの方へリダイレクトされるようになっています。
すでに古いCaskを入れてる人は下に書くように、
Tap Migration: https://github.com/caskroom/homebrew-cask/blob/master/doc/TAP_MIGRATION.md
にしたがってアップデートする必要があります。
Homebrew Caskの更新
Tap Migration に従って移行します。
ここで、移行コマンドを打つ前に、一つ注意として、
もし、brew cask create
などを使ってCaskファイルを自家製している場合、
これらのファイルはhomebrew-caskのディレクトリにあるので、
古いものが消されるときに一緒に消されてしまいます。
なので、もし、自分でCaskファイルを作って入れてる場合には注意して、 どこかにバックアップをとっておくかなんなりしてください。 ($(brew –repository)”/Library/Taps/phinze-cask/Casksとかにあります。)
Caskファイルの退避が終わったら
$ brew update && brew upgrade brew-cask
とすればOK。
$ brew tap
と打っみて、phinze/cask
の代わりにcaskroom/cask
が入ってればOK。
普段から
$ brew update && brew upgrade
してればすでに更新されてるはずです。
もし、自分で作ったファイルを退避しないままupgradeしてしまうと、
Caskファイルがなくなりますが、/opt/homebrew-cask/Caskroom
にある
各アプリのインストールファイル用ディレクトリは消えないので、
Caskとしては認識してるけど対応ファイルがない、という状態になり、
brew cask list
してみると
$ brew cask list
alfread bettertouchtool ... simplefloatingclock (!) ...
みたいに、自分で作ったCaskのものがリストされますが(!)
が付いた状態になり、
情報が無いのでuninstall
もinstall
もできなくなります。
この状態で、もう一度同じCaskファイルをbrew cask create simplefloatingclock
みたいにして作っても良いのですが、
これもローカルレポジトリを汚すことになるので、
今は次で書くように自分のCaskレポジトリを作ってそこに入れることにしています。
また、この移行の際に、いくつかのアプリのバージョンがアップデートされてて、 これらが上手くリストから消えなくなりました。
brew cask list
でリストしてるのは/opt/homebrew-cask/Caskroom/
にあるディレクトリをls
しただけ?みたいで、
例えばAlfred
等は、.../Caskroom/alfred/2.2_243
というディレクトリに
古いのがあるのですが、
新しいバージョンが2.3_264
なため、
brew cask list
すると表示されますが、
$ brew cask uninstall alfred
Error: alfred is not installed
等となりアンインストールできません。
アプリのリンクも~/Applications
に残ったままです。
これを削除するには、手動でアプリのリンクを削除して
/opt/homebrew-cask/Caskroom/alfred
ディレクトリも手動で削除するか、
$ brew cask install alfread
$ brew cask uninstall alfread
と、インストール、アンインストールを行ってリンクごと削除するか、ですが、
この場合でも/opt/homebrew-cask/Caskroom/alfred/2.2_243
の古いディレクトリは
残ってしまうので手動で削除する必要があります。
また、Caskでインストールしたアプリのアンインストールですが、
安易にbrew cask uninstall
してしまうと、色々ゴミファイルを残していく可能性もあるので、
App Cleanerなんかを使って
アプリを手動で消してからCaskでアンインストール作業を行った方が良いことが多いと思います。
(アンインストーラーが付属していて、Caskでもアンインストール時にそれを使う場合もあるので、
その場合はそちらに任せれば良いですが、
直接Caskファイルを見る以外、brew cask info
ではアンインストーラーに対応してるかどうかが見れない。。。)
Caskファイルを追加
まず、 Simple Floating Clock を例にCaskファイルの作り方から。
Caskの名前の付け方ですが、 How To Contribute にあるNaming the Caskに従い、
$ "$(brew --repository)/Library/Taps/caskroom/homebrew-cask/developer/bin/cask_namer" 'SimpleFloatingClock.app'
Proposed Cask name: simplefloatingclock
Proposed file name: simplefloatingclock.rb
First Line of Cask: class Simplefloatingclock < Cask
と、cask_namer
コマンドを使って名前を決めてもらいます。
(大概は大文字を小文字に、空白、拡張子削除、というだけ)
名前が決まったら上に書いた様に
$ brew cask create simplefloatingclock
などとすると、
/usr/local/Library/Taps/phinze/homebrew-cask/Casks/simplefloatingclock.rb
というファイルが指定され、
これがエディタ($EDITOR)で開かれます。
最初のテンプレートはこんな感じ。
1 2 3 4 5 6 7 |
|
各項目は:
- url: ダウンロードするファイルのURL(.dmg/.zip/.tgz)
- homepage: ホームページ(brew cask homeとかで使う情報)
- version: 現バージョン(これが間違っててもアプリへのパスとかが間違ってなければ問題ないが、インストールしておく場所に一応バージョン名が入ってアップデートしたときに別途入れられる様になってる。
- sha256: 上の
sfc.zip
を実際にとってきて$ shasum -a 256 sfc.zip
したときにでる値。 - link:
$ unzip sfc.zip
で(なくてもいいけど)解凍して、実際にアプリがある所へのパス。フォルダ階層をトップから含む。
つまり、一回はアプリをダウンロードしてきて調べる必要があります。
Simple Flaoting Clockを調べて見るとこんな感じ:
1 2 3 4 5 6 7 |
|
これをそのまま保存すればbrew cask install simplefloatingclock
で
インストール出来る様になりますが、
上に書いたとおり、homebrew-cask
のローカルレポジトリ内に入れておくのは
あまり良くないので自分のレポジトリを作ります。
brew cask create
コマンドは単に上のようなテンプレートを出してくれるだけなので、
上のテンプレートをメモしておけば特に必要ありません。
追記: 2014/05/21
上のテンプレートは圧縮ファイルが配布されててその中に*.app
という形で
アプリがそのまま入っているものですが、
他にも*.pkg
というインストーラーが入っていることも多いかと思います。
その場合は
1 2 3 4 5 6 7 8 9 10 |
|
こんな感じで、install
に*pkg
ファイルを指定します。
上の場合は直接*pkg
が配布されてる場合ですが、*dmg
や*zip
ファイルなどで配布されてて
中に*pkg
ファイルが入ってるような場合は、
url
に*dmg
などの圧縮ファイルのURL、install
に
*.app
の時と同じように圧縮ファイルを解答した時にあるフォルダを含めた*pkg
ファイルへのパスを書きます。
また、link
で指定した場合はbrew cask uninstall
時にlinkが消されますが、
パッケージでインストールしたものはされないので、
アンインストールをすべきものを明示して上げる必要があります。
アンインストーラー等がないものに関しては、
アプリをインストールするだけなら、実際インストールされるアプリのパスを書けば良いだけ。
(ただ、これも設定ファイルなどが残ってしまうので、
Caskではなく、一旦App Cleanerとかで一連のものを削除してから
Caskでも消す、といった作業をした方が良いと思います。
すべて把握してるならアプリと同様files
に記述して、
Caskで直接アンインストール、でも良いかもしれませんが
2。)
さらに、アンインストーラーなどがあるものに関しては、
1 2 3 4 5 6 7 8 9 |
|
みたいに中に組み込まれてるユーティリティを呼んだり、
1 2 3 4 5 6 7 8 9 10 11 |
|
みたいにスクリプトを呼んだりします。 調べるのは結構面倒。。。
追記ここまで
Caskファイルをレポジトリを作成/タップしてCaskを追加
GitHubに適当な名前のレポジトリを作ります。
Homebrewのレポジトリなのでhomebrew-
で始まるレポジトリ名にしなくてはいけません。
(後、homebrew-
以降には-
は入れてはいけない)
上のレポジトリみたいに、レポジトリ内にCasks
というディレクトリを作って
その中にCaskファイルを入れて行くだけでOK。
上のレポジトリには
Cathode: http://www.secretgeometry.com/apps/cathode/- MadRuby
- Simple Floating Clock
と言ったアプリが入っています。
このレポジトリを、単に
$ brew tap rcmdnk/rcmdnkcask
としてタップするだけ。これで、rcmdnkcaskに入ったCaskを使えるようになります。
ついでに、本家caskroom
の方に
というCaskファイルのレポジトリがあります。
versionsの方は、アプリの通常版以外の物をインストールできるようになっていて、
例えば、通常firefox
は英語版のFirefoxをインストールしますが、
versionsの中にfirefox-ja
というCaskがあって、
こっちを使えば日本語版が入ります3。
追記: 2016/10/31
Caskの仕様がアップデートされて、現在は
$ brew cask install firefox
とfirefoxのCaskでシステムで使ってる言語と同じ言語のFirefoxをインストール出来るようになっています。
追記ここまで
また、MacVim KaoriYaも
macvim-kaoriya
という名前で入っています。
4
fontsの方はその名の通り色々なフォントがインストールできる様になります。
すでにインストールされてるアプリの対応を調べる
基本的にCask管理できるのはウェブサイトから直接ダウンロードしてインストールするようなアプリです。
App Storeからインストールされるものは管理できません。 (そちらはApp Storeで管理できてるのでよしとして)
以前はちゃかちゃか手動でインストールしていたわけですが、 どれがApp Storeにあるかもぱっと見分からないし、 どれがCaskに存在してるのかも調べるのは結構面倒ですので 何かツールでやってしまいたいところです。
以前homebrew-dotfile-generator というものを見つけたのですが 5、 結構な量のアプリが捉えきれずに終わることと、 上の新しいレポジトリに対応してないこと、 ~/Applications(Caskで入れた物は大概デフォルトでここに入る)のチェックが無いこと、 等、色々不便だったので自分で作りました。
以前作ったbrewallというコマンドに機能を追加してます。
インストールは上にあるようにHomebrewで
$ brew tap rcmdnk/brewall
$ brew install brewall
もしすでにインストールしてる人がいたらCask同様brew update && brew upgrade brewall
してください。
Caskリストに関する使い方は
$ brewall casklist
とするだけ。
これで、/Applications, /Applications/Utilities, ~/Applications
にあるアプリを調べ、結果を./Caskfile.txt
というファイルに書き出します。
各アプリに対して、まず、Caskで管理できるものかどうか、 さらにCaskを使ってインストールされたかどうか、を調べてリストアップします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
すでにCaskを使ってインストールしたものは
cask install adobe-reader
の様にBrewfileに書ける形に 6。
Caskでインストールできる用意はあるけど直接、もしくはApp Storeで インストールしたアプリに関しては
#cask install keyremap4macbook # /Applications/KeyRemap4MacBook.app
の様にコメントアウトした形で載せているので、 もし必要ならすでにインストールしたものをアンインストールして Caskでインストールする時の指標に。
また、Caskを調べるときに$(brew --repository)/Library/Taps/*
にあるタップされた全てのレポジトリに対して、
Casks
というディレクトリがあるかどうかチェックし、
あったらその中にあるRubyファイルをCaskファイルとみなして
チェックの対象にしています。
上に書いた様に、レポジトリにCasks
というディレクトリを入れておいて
そのレポジトリをタップするとCaskを追加できるので、
それに対する処置です。
brewallに関しては、
BrewfileをGitHubで管理する機能を付けたり結構便利に出来上がってると思うので、
デフォルトでbrew bundel
もありますが、是非試してみてもらえれば、と。
もしくはApp CleanerがやってることをCask内で出来る様にしてしまう。。。? ↩
-
これを入れるときには先に
$ brew cask uninstall firefox
をしておくのが吉。
$ brew cask install firefox-ja
をすると
ja
バージョンもCellerに入れられてリンクがそちらに変わりますが、 この後brew cask uninstall firefox
をすると、このリンクもろとも消えます。firefox-ja
本体は残ってるので$ cask install firefox --force
などとして(forceを付けないとすでに実体はCellerいあるのでもうあるよ、と言われる)もう一度リンク作成し直す必要があります。 ↩
-
ただ、現時点で古いバージョンが指定されてます。
現在、MacVimはCaskではなく
install macvim --with-lua
で入れていますが(なので/Applications
に入っている)、 上のページによれば5月にアップデートされてるので、それが入ったらそちらにしてみようかな、とも(Kaoriya版はデフォルトLua対応)。 (Caskで入れると
~/Applications
に入る、ので かち合わずに両方入れることも可能。でもSpotlight検索とかで わけわからなくなるのでどちらか入れたらもう片方はアンインストールしたい所)。 ↩ このツールは最近本体に組み込まれたBrewfile(
brew bundle
用)を 自動で作成してくれるツールですが、 Caskに含まれるものも別途ファイルを作成してくれます。 ↩-
brewallでもBrewfileを使って管理できる様にしてるのですが、 最近BrewdlerがHomebrewのデフォルト(
brew bundle
)になったので、 それに互換性を持たすべく、アップデートしてあります。brew bundle
で使うBrewfileはbrewall
でも使える様になっています。 ↩