Homebrewの拡張で brew-gem というRubyGemsをHomebrewで取り扱う物がありますが、 Issue が建てられたのでこれを Brew-file でもきちんと取り扱える様にしました。
Homebrewで
$ brew install brew-gem
としてインストールしてあげると、gem
というサブコマンドがbrew
で使えるようになります。
これを使って
$ brew gem install heroku
とかすると、Herokuがインストールできます。
この際、実態は/usr/local/Cellar/以下に置かれて、 実行ファイルなどは/usr/local/bin/herokuへシンボリックリンクが置かれていたりします。
普通にMacでgem install heroku
とすると、 /usr/local/gems/bin/herokuにコマンドがインストールされるので ちょっと使い勝手は変わります。
また、brew gem
でインストールしたものは、通常の gem list
のリストには入りません。 なので全く別管理になります。
このbrew-gemですが、元々、heroku
とかをインストールすると、 パッケージ名としてheroku
という物がbrew list
に表示される様になっていました。
ですが、gemの中にはgit
等、Homebrewで既に使われているパッケージ名を持つものが あるので、これらをインストールしようとすると問題が起きます。
また、名前を見ただけではbrew gem
でインストールされたのか普通の パッケージなのか分からず、 さらに上の様に名前が衝突するような場合はbrew list
からは判断のしようがありません。
そこで、ちょっとPull requestを送って、 brew gem
でインストールしたものに関してはgem-
という文字を付けて貰うようにしました。 なので今行うとgem-heroku
というパッケージがbrew list
に表示されるはずです。
これで衝突も無くなるし一目でbrew gem
で管理してるものだと分かるので 管理もしやすくなりました。
これらのgemパッケージをインストールしてある場合、 brew file init
してあげると、Brewfileの中に
gem heroku
といった行が出る様になります。
自分でBrewfileを直接書く場合でもgem
+ gemの名前
を Brewfileに書いておくと、 brew file install
時に、 brew gem install
を使ってインストールします。 この際、brew-gemがインストールされて無ければ自動でインストールする様にも しました。
ついでに、Homebrewにはこれ以外にも brew-pip というpipのパッケージ管理をHomebrewで行う拡張もあり、 こちらの管理も上のgem
と同じような感じで Brew-file内で出来る様になっています。
また、Brew-fileにはbrew
コマンドをラップして 通常のbrew install
等を行った時に 自動でBrewfileをアップデートできる様にするbrew-wrap
という 機能を入れてありますが、 これらのbrew gem install
などした場合にも Brewfileが自動でアップデートされうようにしました。
最近brew-pipを余り使ってなくて、実はpipの方がこれまでちゃんと 自動更新されてない状況になってましたが、 今回それも直したのでちゃんとbrew-pipのものも直しました。