こんにちは、 サーバサイドエンジニアの伊藤です。
新卒Rubyエンジニアがオススメする実務で役にたった技術書5選 この記事を書いた時から、ちょうど1年が経ちました。 本当に、時が経つのは早いですねー。。。
そんなこんなで、今年もこの季節がやって来ました。12月と言えば、そうAdvent Calendar の時期ですね!!!
ということで、Enigmo Advent Calendar 2019 を公開します!!!
Enigmo Advent Calendar 2019 記念すべき1日目は、
私、伊藤が 「OSS 初心者が初めてのコントリビューションを通して学んだ3つのこと」 をお届けします。
そもそものきっかけ
弊社では、EC サイトのBUYMA だけではなくSTYLE HAUS というファッションメディアの開発も行なっています。
STYLE HAUS の開発時、記事パーツのアイコン画像をYaml で管理するため、zilkey/active_hash というgem を導入しました。
基本的には ActiveHash
*1 を用いることで、スムーズに開発を行うことができました。
ただ、ActiveHash
で生成したデータを、sort しようとした時ActiveHash::Base.order
が存在しないことに気がついてしまいました。
確かに、ActiveHash
を利用して生成したデータは Array
なので、Enumerable#sort_by
を用いることで、sort は可能です。
↓こんな感じ。
w/ Enumerable#sort_by Image.all.sort_by(&:title)
ただ、Rails のActiveRecord
にどっぷりハマった身としては、どうしてもActiveHash::Base.order
を使いたい。。。
↓こんな感じ。
w/ ActiveHash::Base.order Image.order(:title)
そこで、隣の席の先輩エンジニアに相談してみました。
伊藤:
なんで、ActiveHash::Base.order
ってないんですかねー?
ActiveHash
のREADME にもActiveRecord-like model って書いてあるのに。。。
隣の席の先輩エンジニア:
そんなの知らん。無ければ自分でメソッド生やしたらいいやん。
伊藤:
ヒィィィィィ(゚ロ゚;ノ)ノ
当時の私にはメソッドが無ければ自分で実装するとう言う発想はなく、 まさに青天の霹靂でした。
と言うわけで、
やったこと
- 本家
ActiveRecord
のorder
メソッドの実装を読み込む。 - TDD を意識して、RSpec を実装する。
- (2) で実装したテストをパスさせるように、
ActiveHash::Base.order
を実装する。 - PR を作成する。
- 祈る。そして、待つ。
何だかんだ最初は OSS と聞いてビビっていましたが、 基本的にやった事はこれだけです。
パッチを投げてからActiveHash
の戻り値を chainable にするため ActiveHash::Relation
が導入されたので、
実際は(4)と(5) の間でレビューを受けてorder
をcahinable に対応する処理を追加実装しました。
今回実装の内容は割愛しますが、ご興味のある方はこちらをご覧下さい。
学んだこと
ソースコードへの抵抗がなくなった。
恥ずかしながらこれが私にとって初めての OSS コントリビューションでした。*2
こちらで ActiveRecord
のソースコードをがっつり読み込むまでは、どちらかと言うとネットに落ちているブログ記事や公式ドキュメントを読むだけで終わっていました。
それで理解できなければ、先輩エンジニアのところに泣き込んでいました。。。*3
しかし、今回ソースコードを読み込んだ事で、ソースコードに対しての畏怖の念は無くなりました。 現在では公式ドキュメントはもちろん、それでも分からなければソースコードを読み本当の仕様を確認できるようになりました。
OSS への PR の出し方、所作を学ぶことができた。
PR のコメントの文面は OSS ごとに特有のものがあると思います。
すでに、当該の OSS でマージ・クローズされている PR のフォーマットを参考にしました。
内容に関しては、MECE
を意識しました。*4
MECE とは、
- Mutually(お互いに)
- Exclusive(排他的に)
- Collectively(集合的に)
- Exhaustive(余すところのない)
要は、「内容に漏れがなく、重複がないように。」と言うことです。 レビューしてくれる方が実装内容および、 PR コメントを見ただけで全てが理解できるように意識しました。
OSS を身近に感じることができた。
以前は OSS コントリビューターさんやメンテナーさんは、雲の上の存在。 いや、むしろその存在すら意識していなかったかも知れません。。。
今まではどこかで OSS はあって当然のように思っていましたが、微力ながらのコントリビューションを通してその考えを新たにすることができました。
私たちが OSS の恩恵を受けられるのは、多くのコントリビューターさん、メンテナーさんのお陰なんだなぁと。
本当に感謝です。
今後も機会があれば微力ながら OSS に貢献していきたいと思います。
本日はこの辺で、 最後まで読んでいただきありがとうございます!
株式会社エニグモ 正社員の求人一覧