Homebrewにはhomebrew-cask 等の外部コマンドを導入することが出来ますが、 Rubyを使ったものだけだと思ってたら シェルスクリプトでもなんでも入れられるようだったので試してみました。
Homebrewの外部コマンド
Homebrewには内部のコマンドと共に、 後からインストールしてコマンドとして使えるものがあります。
brew commands
とすると一覧が出てきます。
コマンド化するには結構面倒なのかな、というかRubyで書くのかな、と思ってたのですが、
どうやらPATHが通ってるところのコマンドを探して、
brew-command
というものがあるとbrew command
として使える様になる模様。
.rb
の拡張子がついてるものについては.rb
拡張子を除いた状態でRubyの実行コマンド
ファイルとして認識されます。
homebrew/brew.rb at master · Homebrew/homebre: https://github.com/Homebrew/homebrew/blob/master/Library/brew.rb#L130
.rb
がついてるものはrequire
メソッドで実行され、
それ以外はexec
。
.sh
等の拡張子を付けておいても使える事は使えますが(brew command.sh
などとして)、
brew commands
では表示されないし避けたほうが無難な様子。
Brewallをコマンド化
brewallはBrewfileを用いてパッケージを管理するシェルスクリプトで、
brew bundle
の代わりになるようなものです
1。
BrewfileをGitHubで管理できる様に出来る事が便利。
以前はインストール
するとbrewall
というコマンドが使える様になったわけですが、
レポジトリにbrew-all
というbrewall
へのシンボリックリンクを追加しました。
これで、今まで通り
$ brew tap rcmdnk/brewall
$ brew install brewall
とインストールすると
$ brew all ...
というコマンドが使える様になります。
$ brew commands
Built-in commands
--cache cat doctor irb options search unlinkapps
--cellar cleanup edit leaves outdated sh unpack
--env commands fetch link pin tap unpin
--prefix config help linkapps postinstall test untap
--repository create home list prune tests update
audit deps info log readall uninstall upgrade
bottle diy install missing reinstall unlink uses
External commands
all beer gist-logs pull tap-readme
cask bundle-dir graph server test-bot
gem bundle man services versions
aspell-dictionaries cleanup-installed profile switch which
$
と、ちゃんとall
が認識されてます。
シェルスクリプトの場合なんかはそのままbrew-all
とするのと全く一緒なわけで、
だから何だという感じもありますが、
新しくコマンド作らいたい場合は
単にbrew-*
という実行ファイルを作ってPATHが通った所に入れれば
Homebrewにコマンドが追加できる、ということです。
追記: 2015/07/21
上の方法は今はobosleteになっていて、 cmdというディレクトリを作ってTapするだけの方法が主流になっているようです。
追記ここまで
-
現在
brew bundle
すると、$ brew bundle Warning: brew bundle is unsupported and will be replaced with another, incompatible version at some point. Please feel free volunteer to support it in a tap. ...
こんな感じのメッセージが出ます。
Deprecate some contributions. by mikemcquaid · Pull Request #30749 · Homebrew/homebrew
この辺で色々と外部コマンドについてどうしようかということが話し合われて bundleについてはUnsupportedということになったみたいです。