Rubyへのコミット: RubyHackChallenge

2018-06-25



「コミットしてみたい」…そんな言葉は使う必要がねーんだ
なぜならオレやオレたちの仲間はその言葉を頭の中に思い浮かべた時には!
実際にOSSへプルリクを出しちまってもうすでに終わってるからだッ!
だから使った事がねぇーッ 「コミットした」なら使ってもいいッ

RubyKaigi 2018は自分に熱を吹き込んでいったが、その熱の一部はOSSへのコミットに向かった。色々なOSSをWatchしたりissueを読んだりしたが、手頃なタスクが見つからなかったり、メンテナンスがほとんど行われていないためプルリクを出しても無駄になるといった理由で中々実行まで行かなかった。

結局のところ、最初に自分のプルリクが取り込まれたOSSは何か? 正解はRuby本体。 先日Cookpadで開催されたRubyをHackするイベント、Ruby Hack Challengeに参加してRubyへのプルリクを出した。そして今回はそのパッチが嬉しい事に無事マージされたのでこのイベントをレポートしていく。
https://cookpad.connpass.com/event/88471/

Ruby Hack Challenge

RubyHackChallengeはCookpadが定期的に開催しているRuby本体、つまりインタプリタに手を加えることをテーマにした数少ないイベントだ。毎回、細かいテーマは入れ替わる。例えば「メソッドの追加」だったり「パフォーマンス向上」だったりだ。

そして今回のテーマは「テストカバレッジの向上」だ。RubyKaigi2018でも@malafortuneがテストカバレッジについて話してたのを思い出したよ。RubyはテストカバレッジがLine/Function/Branchのレベルで計測され可視化されている。(https://rubyci.s3.amazonaws.com/debian8-coverage/ruby-trunk/lcov/index.html)

この可視化されたカバレッジを元にテストが薄いところへテストコードを追加していこう、というのが今回のテーマというワケ。
なお教えてくれるのは@mameさんやSasadaさん。Rubykaigi(trickとか)で見た事がある人だ!

最大の敵はやはり…?

このイベント、多くの人が地味に手こずったのはハマりポイントは二つだ。一つ目は「環境構築」だ。実際のところ、環境構築は例え熟練したエンジニアになっても変わらずハマりポイントである。可能な限り事前に上手く動くことを確かめておかないと不幸にも環境を構築するだけでイベントの半分が終わってしまう。

一つ注意すべきポイントとして、リモートのマイクロインスタンスを開発環境としている人がいてもRubyに使うのは考え直すべきかもしれない。コンパイルやテストは意外なほどメモリを必要とする。1GB程度しか無い場合はメモリー不足によってコケる。自分がコケてMacbookローカルで組み直す羽目になった。Dockerなり仮想環境なりをdebianか何かで組もう。

何をすればいいか

もう1つのハマりポイントは「何を追加すべきか」だ。具体的な問題としてさらに「どこに手をつけるか」と「自分が出来るかどうか」という課題に分解出来るだろう。

これは難問であり、適切な着手点、つまりやる価値が高くて自分が出来るものを見つけられた時点で問題は半分以上片付いている。研究活動で適切なテーマ設定が最も難しく重要なのと同じだ。研究をしたことはないが。

説明によれば、まず着手点は「自分が普段使っている/興味があるライブラリ」がお勧めだそうだ。次点でカバレッジが低いもの。

自分が出来るかどうか……これはちょっと難しい話題だ。イベント中にruby/primeへのコミットで活躍したshio-physさんは「prime(素数)は定義が明らかだし状態への依存もないからテストも簡単なはず」という考えでprimeに着手したそうだ。鋭い。

実際、テストを書く難しさを考える際にはそこが重要な視点だ。例えばshellやirbといった対話的だったり他のシステムへの依存があったりするライブラリはどうしてもやりにくい。

やったこと

で、肝心の自分が何をしていたかというと、まず興味があるライブラリのテストケースと内部コードを一通り読み進めた。

まずirb、shellとカバレッジが低く自分が興味のあるものを読んでいたが……その……ちょっと難しかった。そこで次点としてnet/httpを覗いてみると単純なユニットテストで書けるコードがまだ未検証のまま残っていた。

これを見つけるまでで既にイベントの時間をほとんど費やしていたが、大急ぎでテストケースを追加しプルリクを出すことに成功したというワケ。なお、イシューでは盛大に間違った英文を書いたためプロジェクターに映されたときは恥ずかしい気持ちになった。

https://github.com/ruby/ruby/commit/be850d7b11017ba921f3f284dc9863c818e9ff86

もう1つの壁

今までやったことがないことをやる。これは確かに大きな壁ではある。しかし、より大きなもう1つの壁がある。やり続けることだ。個人的な課題は2つめ、3つめのプルリクをイベントの外で出して行く事が出来るかどうかだ。やっていきたい。そのために参加したんだから。


 このエントリーをはてなブックマークに追加


<< 講演ピックアップ: RubyKaigi 2018  

[24]