DDD ディストーション駆動開発

ギターと音楽とRubyを愛するエンジニアのblog

OSS Gate東京ミートアップ for Red Data Toolsでapache-arrow-glibのformulaのPRを出した

OSS Gate東京ミートアップ for Red Data Tools

先月に続いて参加。この日もSpeeeさん。

speee.connpass.com

Speeeさんは色んなイベントを開催してくださるので、仕事上の関わりは全くないのに週一ペースで出入りしていて、私完全に頻度がおかしい。

homebrew-coreにPRを出したのだけど。。。

先月からhomebrewにapache-arrow-glibのformulaを追加する、ということに取り組ませて頂いています。

www.hizumizm.com

homebrewはRuby製で、formulaもRubyで書けるのですが、DSL的というか、ある種のフレームワーク開発的なところがあります。

formula作成用ジェネレータコマンドを叩くと、テンプレートが吐かれて、そこにインストールしたいライブラリのインストール方法をHomebrewのライブラリが提供しているメソッドを使って表現していく、というような感じです。

formulaファイルちょっと面白くて、installメソッドの真下にそのformulaのtestを書かせるんです。プロダクションコードとテストコードが同一ファイルに同居してるもの、って他にもあるのでしょうか?

Homebrewのformula開発はこんな雰囲気

Homebrewにformula関連PRを送る手順はここに記載されています

How To Open a Homebrew Pull Request (and get it merged) — Homebrew Documentation

上記の手順に沿って進めて、ここに書いてある手順で brew create すると、

Formula Cookbook — Homebrew Documentation

cloneしてきたリポジトリではなくTapsというディレクトリにファイルが吐かれます。

吐かれたファイルに、他のformulaや下のドキュメントを参考にしながら、ライブラリのインストール方法を依存ライブラリの定義やinstallメソッドを使って書いていきます。

Class: Formula — Documentation for Homebrew/brew (master)

最初見た時、formluaの中身、何が書いてあるのかさっぱりわかりませんでしたが

  • 依存ライブラリがあればhomebrewでインストールする
  • インストールしたいライブラリのインストール(configure->make->make install)

ということをHomebrewの提供してるメソッドで書いてるだけなのですね。

Tapsでいい感じに作れたら、ドキュメントに書いてあるテストを通るようにして、cloneしてきたリポジトリのFormulaの下に持ってきて、pushしてPR出す、という感じです。

PR出してみたものの

この日は、「PR出したぞー、次のことやろう!」という意気込みで参加したのですが、PR出したところで、古いOSではテストがコケてしまうとCIに怒られてしまいました。

(しかもこの時に、インデントの崩れを直す前の状態でPR出したことに気づく)

PRのレビュアーの方がテストの修正方針を教えてくれたので、それを見つつ修正しております。

「brew install hoge、って叩けばhoge入れてくれるんだフーン」くらいに思ってましたが、これ、善意の誰かがformula作ったりメンテしたり、チェックしてマージしてくれないとできないことだったんですよね。とても感慨深いです。

さて、がんばろ。