rcmdnk's blog
Last update

CASKダーツ LOVERS

先日書いたとおり1 ちょっと前に新しいMacに移行したのですが、 その際にアプリをHomebrew Caskで出来るだけ管理できるように移行しました。 その際、ちょこちょこ前と変わってる部分もあったのでその辺のまとめ。

Sponsored Links

Homebrew Cask

前に書いたHomebrewの拡張:brewdler, tap, cask にあるように、 Homebrewでは Cask という拡張を使って通常のアプリも管理できるようになります。

これが結構簡単にできるので、去年ちょっと流行りかけた BOXEN を追い越して現在流行りかけてる感じです。

ということで、BOXENは以前まだLionだった時に対応してなくて諦めて放置したまま 試してませんでしたが、 Caskの方も結構便利になってきたみたいなのでCaskを使ってアプリを管理していこうと。

ところで、色々いじっていたらちょうどつい最近、レポジトリが

から

に移った所でした。

一昨日くらいまではphinzeのレポジトリもまだあったんですが、 今はcaskroomの方へリダイレクトされるようになっています。

すでに古いCaskを入れてる人は下に書くように、 Tap Migration にしたがってアップデートする必要があります。

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のものがリストされますが(!)が付いた状態になり、 情報が無いのでuninstallinstallもできなくなります。

この状態で、もう一度同じ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
class Simplefloatingclock < Cask
  url ''
  homepage ''
  version ''
  sha256 ''
  link ''
end

各項目は:

  • 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を調べて見るとこんな感じ:

/usr/local/Library/Taps/phinze/homebrew-cask/Casks/simplefloatingclock.rb
1
2
3
4
5
6
7
class Simplefloatingclock < Cask
  url 'http://www.splook.com/Software/distrib/sfc.zip'
  homepage 'http://www.splook.com/Software/Simple_Floating_Clock.html'
  version '1.8'
  sha256 'dbfe0b92aaf57b63962f1ded518fac01916a3f11d871d1cfed9c59ffb627bf2d'
  link 'Simple Floating Clock/SimpleFloatingClock.app'
end

これをそのまま保存すればbrew cask install simplefloatingclockで インストール出来る様になりますが、 上に書いたとおり、homebrew-caskのローカルレポジトリ内に入れておくのは あまり良くないので自分のレポジトリを作ります。

brew cask createコマンドは単に上のようなテンプレートを出してくれるだけなので、 上のテンプレートをメモしておけば特に必要ありません。

追記: 2014/05/21

上のテンプレートは圧縮ファイルが配布されててその中に*.appという形で アプリがそのまま入っているものですが、 他にも*.pkgというインストーラーが入っていることも多いかと思います。 その場合は

voipconnect.rb
1
2
3
4
5
6
7
8
9
10
class Voipconnect < Cask
  url 'http://www.voipconnect.com/public/download/VoipConnect_1.00.pkg'
  homepage 'http://www.voipconnect.com/'
  version '1.0.0'
  sha256 '05f80c472e012dce9efeadbfc213e91e63db967972f5757b2ca61faf4564c9ec'
  install 'VoipConnect_1.00.pkg'
  uninstall :files => [
    '/Applications/VoipConnect.app'
  ]
end

こんな感じで、install*pkgファイルを指定します。

上の場合は直接*pkgが配布されてる場合ですが、*dmg*zipファイルなどで配布されてて 中に*pkgファイルが入ってるような場合は、 url*dmgなどの圧縮ファイルのURL、install*.appの時と同じように圧縮ファイルを解答した時にあるフォルダを含めた*pkgファイルへのパスを書きます。

また、linkで指定した場合はbrew cask uninstall時にlinkが消されますが、 パッケージでインストールしたものはされないので、 アンインストールをすべきものを明示して上げる必要があります。

アンインストーラー等がないものに関しては、 アプリをインストールするだけなら、実際インストールされるアプリのパスを書けば良いだけ。 (ただ、これも設定ファイルなどが残ってしまうので、 Caskではなく、一旦App Cleanerとかで一連のものを削除してから Caskでも消す、といった作業をした方が良いと思います。 すべて把握してるならアプリと同様filesに記述して、 Caskで直接アンインストール、でも良いかもしれませんが 2。)

さらに、アンインストーラーなどがあるものに関しては、

xqartz.rb
1
2
3
4
5
6
7
8
9
class Xquartz < Cask
  url 'http://xquartz.macosforge.org/downloads/SL/XQuartz-2.7.6.dmg'
  homepage 'http://xquartz.macosforge.org/'
  version '2.7.6'
  sha256 '02aa3268af0bd7dcd5dfbc10d673f5c6834bba6371a928d2a3fc44a8039b194e'
  install 'XQuartz.pkg'
  uninstall :quit => 'org.macosforge.xquartz.X11',
            :pkgutil => 'org.macosforge.xquartz.pkg'
end

みたいに中に組み込まれてるユーティリティを呼んだり、

xqartz.rb
1
2
3
4
5
6
7
8
9
10
11
class Totalfinder < Cask
  url 'http://downloads.binaryage.com/TotalFinder-1.5.22.dmg'
  homepage 'http://totalfinder.binaryage.com'
  version '1.5.22'
  sha256 'f071e2675e4f523d4c95ab5dbf3b7374d6aa1d1efec9a0e149ae01dcf41e55e5'
  install 'TotalFinder.pkg'
  uninstall :script => {
    :executable => 'TotalFinder Uninstaller.app/Contents/MacOS/TotalFinder Uninstaller',
    :args => %w[--headless]
  }
end

みたいにスクリプトを呼んだりします。 調べるのは結構面倒。。。

追記ここまで

Caskファイルをレポジトリを作成/タップしてCaskを追加

GitHubに適当な名前のレポジトリを作ります。 Homebrewのレポジトリなのでhomebrew-で始まるレポジトリ名にしなくてはいけません。 (後、homebrew-以降には-は入れてはいけない)

上のレポジトリみたいに、レポジトリ内にCasksというディレクトリを作って その中にCaskファイルを入れて行くだけでOK。

上のレポジトリには

と言ったアプリが入っています。

このレポジトリを、単に

$ 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 KaoriYamacvim-kaoriya という名前で入っています。 4

fontsの方はその名の通り色々なフォントがインストールできる様になります。

すでにインストールされてるアプリの対応を調べる

基本的にCask管理できるのはウェブサイトから直接ダウンロードしてインストールするようなアプリです。

App Storeからインストールされるものは管理できません。 (そちらはApp Storeで管理できてるのでよしとして)

以前はちゃかちゃか手動でインストールしていたわけですが、 どれがApp Storeにあるかもぱっと見分からないし、 どれがCaskに存在してるのかも調べるのは結構面倒ですので 何かツールでやってしまいたいところです。

以前homebrew-dotfile-generator というものを見つけたのですが 5、 結構な量のアプリが捉えきれずに終わることと、 上の新しいレポジトリに対応してないこと、 ~/Applications(Caskで入れた物は大概デフォルトでここに入る)のチェックが無いこと、 等、色々不便だったので自分で作りました。

以前作ったbrewallというコマンドに機能を追加してます。

Brewall: brewパッケージを管理する

インストールは上にあるように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を使ってインストールされたかどうか、を調べてリストアップします。

Caskfile.txt
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 applications
### Please copy these lines to your Brewfile and use with `brew bundle`.

### tap and install Cask (remove comment if necessary).
#tap caskroom/cask
install brew-cask

### Apps installed by Cask in /Applications
cask install adobe-reader # /Applications/Adobe Reader.app
cask install xtrafinder # /Applications/XtraFinder.app

### Apps installed by Cask in /Applications/Utilities:
cask install xquartz # /Applications/Utilities/XQuartz.app

### Apps installed by Cask in ~/Applications.
cask install bettertouchtool.rb # ~/Applications/BetterTouchTool.app

#############################

### Apps not installed by Cask, but installed in /Applications.
### If you want to install them with Cask, remove comments.
#cask install keyremap4macbook # /Applications/KeyRemap4MacBook.app

### Apps not installed by Cask, but installed in /Applications/Utilities:
### If you want to install them with Cask, remove comments.

### Apps not installed by Cask, but installed in ~/Applications.
### If you want to install them with Cask, remove comments.
#cask install copy.rb # ~/Applications/Copy.app


#############################

### Apps not registered in Cask, but installed in /Applications.
# /Applications/App Store.app
# /Applications/Calendar.app
...

### Apps not registered in Cask, but installed in /Applications/Utilities:
...

### Apps not registered in Cask, but installed in ~/Applications.

すでに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もありますが、是非試してみてもらえれば、と。

Sponsored Links
  1. Macで最初に行う設定備忘録

  2. もしくはApp CleanerがやってることをCask内で出来る様にしてしまう。。。?

  3. これを入れるときには先に

    $ brew cask uninstall firefox
    

    をしておくのが吉。

    $ brew cask install firefox-ja
    

    をするとjaバージョンもCellerに入れられてリンクがそちらに変わりますが、 この後brew cask uninstall firefoxをすると、このリンクもろとも消えます。 firefox-ja本体は残ってるので

    $ cask install firefox --force
    

    などとして(forceを付けないとすでに実体はCellerいあるのでもうあるよ、と言われる)もう一度リンク作成し直す必要があります。

  4. ただ、現時点で古いバージョンが指定されてます。

    現在、MacVimはCaskではなくinstall macvim --with-lua で入れていますが(なので/Applicationsに入っている)、 上のページによれば5月にアップデートされてるので、

    Release MacVim-KaoriYa 20140501

    それが入ったらそちらにしてみようかな、とも(Kaoriya版はデフォルトLua対応)。 (Caskで入れると~/Applicationsに入る、ので かち合わずに両方入れることも可能。でもSpotlight検索とかで わけわからなくなるのでどちらか入れたらもう片方はアンインストールしたい所)。

  5. このツールは最近本体に組み込まれたBrewfile(brew bundle用)を 自動で作成してくれるツールですが、 Caskに含まれるものも別途ファイルを作成してくれます。

  6. brewallでもBrewfileを使って管理できる様にしてるのですが、 最近BrewdlerがHomebrewのデフォルト(brew bundle)になったので、 それに互換性を持たすべく、アップデートしてあります。

    brew bundleで使うBrewfileはbrewallでも使える様になっています。

Sponsored Links

« Macで最初に行う設定備忘録 Macで最初に行うアプリ等のインストール »