oinume journal

Scratchpad of what I learned

brew install nodebrewできるようになった

ついカッとなってnodebrewのFormulaを週末に作ってしまった。後悔はしていない。勢いで作ったので2回ほどプルリクのレビューにひっかかってしまった。ドキュメント嫁的な指摘もあったりしてションボリしつつ、でもこれで nvm 使わなくなれるのでちょっと嬉しい。

Formula作る人向けのドキュメント

公式ドキュメントが充実しているので、下記の3ページを読んでからプルリク送ると良さげ。

nodebrewのFormulaを作るまでの過程

/usr/local/Library/Formula/nodebrew.rb を作る

他のを適当にコピーしても良いけど、たぶん

brew create <name>

のように作るのが正しい。

他のFormulaを参考にhomepage, url, sha1を設定する

sha1は適当でいい。そしておもむろにbrew install nodebrewしてみる。 そうすると、sha1の値が違うよと怒られるのでそこで表示されてるsha1をFormulaに書く。(ダウンロードurlが正しいことはちゃんと確認しましょうね。間違って変なアーカイブをだうんろーどしないように)

install メソッドを実装する

今回はbashzsh向けのcompletionファイルがあったのでそれもインストールするようにした。やり方はpyenvとかその辺のFormulaを参考にした。

caveats

インストールした後に表示される警告みたいなメッセージ。これもpyenvのを参考にした。

テスト

ちゃんとインストールされたかどうか簡単なテストを書く。

forkしてブランチ作ってプルリクを送る

git clone <forkしたhomebrewリポジトリ>
git checkout -b nodebrew
cd Library/Formula/
git add nodebrew.rb
git commit nodebrew.rb && git push

あとはプルリクエストを送る

プルリクで指摘されたこと

  • Homebrewが$HOMEにディレクトリ作っちゃダメだよ
    • nodebrewはインストール時に $HOME/.nodebrew/{default,node,src} ディレクトリを作る
    • ってかそのディレクトリ作る処理ってupstream(nodebrew)側でできないのかな?(Homebrewメンテナ)
    • nodebrew setup すれば作られるんだけど、この処理ではスクリプトをダウンロードする処理も込みで、ファイルをダウンロードするのはHomebrew的にNGそうだったので今回はnodebrew側でディレクトリ作る処理を外出しするようにした
  • brew audit nodebrewするとエラーになるよ(Jenkinsさんがプルリクを自動でテストしてた)
    • サーセン、これは事前にやれとドキュメントにも書いてありましたね。
  • /usr/local っていうパスを直接使っちゃダメだよ
    • varやHOMEBREW_PERFIXなどHomebrewが定義しているものを使いましょう。どういうものが定義されているかはここに書いてある。
  • testはもう少しちゃんと書こう
    • 最初は nodebrew help を実行してexit statusが正常かチェックするだけだったのだが案の定怒られたw
    • ので、nodebrew ls-remote して v0.10.0 が出力されていることをチェックするようにした。まぁやり過ぎるとキリがないのでこのぐらいでいいかなと思ったらレビューは通った

最後に

これでnvmがいらない子になりました。とにかく普段よく使っているソフトウェアに貢献できるとモチベーションが上がりますね。

サーバサイドJavaScript Node.js入門 (アスキー書籍)

サーバサイドJavaScript Node.js入門 (アスキー書籍)