rcmdnk's blog

セクシーコマンド外伝 すごいよ!!マサルさん(1) [DVD]

前回書いた HomebrewにFormulaを公式に入れてもらうためにチェックする事 で出したPull Requestで Homebrewのコマンドの使い方についてもコメントを貰ったのでそれについて。

Sponsored Links

Homebrewコマンドの作り方その1

Homebrewのコマンド、とここで言ってるのは、 Homebrew Cask の様に、

$ brew cask ...

brewコマンドに対してサブコマンドとして使える物を指しています。

以前、 Homebrewのコマンドを作る方法 というところでちょっと書きましたが、 ここで書いた方法は brew-XXXと、brew-の付いた実行ファイルを作って これをPATHが通った場所に置いて実行出来るようにしておくと、

$ brew XXX

という形でbrew-XXXが実行できる様になる、というもの。

Rubyの実行ファイルに関してはbrew-XXX.rbというファイルがbrew XXXで 実行できる様になります。

他の拡張子については付けるとbrew commandsで表示されないので 付けない様に。

Homebrewコマンドの作り方その2

最初に見た頃は Caskを始め上の様な方法だけがありましたが、 今は新しい別の方法があって、そちらがrecommendationだとのこと。

やりかたはcmdというディレクトリを持つレポジトリを作って、 このcmdの中にbrew-XXXの様な実行ファイルを入れる、というもの。

この方法だと、インストールがTapだけで済みます。

brew commandsとかで探したり、サブコマンドを実行する際、 上の方法の様なPATHの中にあるbrew-XXXに加え、 Tapしたレポジトリの中でcmdというディレクトリがあるものを探して、 その中のbrew-XXXもサブコマンドとして採用する様になっています。

また、この場合、brew-XXXというファイル自体はPATHの通った場所に入らないので brew-XXXというコマンドは直接使えなくなります。

Tapしたディレクトリはbrew updateでアップデートされるので、 このcmdディレクトリを使った方法だと brew updateでコマンドをアップデートすることが出来ます。

代わりにFormulaを使ったインストールではないので、 バージョン違いのものとかを同じレポジトリで作る事はできなくなります。

こちらの方法が薦められてるのは、 サブコマンドはHomebrew自身のアップデートと常に連動するべきだ、 という所もあるんだと思います。

Formulaを使わないと homebrew-file で使っていたようなセットアップファイルのインストールができなくなりますが、

これについては、 別のセットアップコマンドファイル(e.g. brew-setup-file)を作って、それを

1
2
3
if brew command setup-file >&/dev/null;then
  eval "$(brew setup-file)"
fi

の様にして.bashrc.zshrcから呼んで上げれば良い、とのこと。

見て分かる通りevalで出力を実行してるので、 既に設定ファイルがある場合は、

brew-setup-file
1
2
3
#!/usr/bin/env bash
brew_file_dir="$(dirname "$(brew command setup-file)")/.."
cat "${brew_file_dir}/etc/brew-wrap"

みたいな感じで設定ファイルをcatしてあげればOK。

brew command XXXbrew-XXXのパスを返してくれます。

設定ファイルはコマンドの入ったレポジトリにあるので、 上のようにすると同じレポジトリにあるファイルを読むことが出来ます。

一応、今のbrew-fileでこのcmdを使った方法を使って作って見ました。

rcmdnk/homebrew-file at cmd

とりあえずこれに置き換えて試してみましたが、 今のものと同じ様に動くことが確認出来ました。

なので置き換えは可能なのですが、 置き換えると一度brew-fileをアンインストールしてから Tapしてもらわないとインストールしたもの自体がアンインストール出来なくなって しまう(Formulaを消してしまったとすると)し、 コマンド補完等の設定方法も変わるのでどうしようかな、と。

この変更する位なら 前回 も書いたようにRubyで書きかえて Homebrew/homebrew-bundle に入れる事を考えた方が良いかな、とか思ってます。

Sponsored Links
Sponsored Links

« HomebrewにFormulaを公式に入れてもらうためにチェックする事 シェルコマンドの意味を説明してくれるコマンド »