2018は自分に熱を吹き込んでいったが、その熱の一部はOSSへのコミットに向かった。色々なOSSをWatchしたりissueを読んだりしたが、手頃なタスクが見つからなかったり、メンテナンスがほとんど行われていないためプルリクを出しても無駄になるといった理由で中々実行まで行かなかった。Challengeに参加してRubyへのプルリクを出した。今回はそのパッチが嬉しい事に無事マージされたのでこのイベントをレポートしていく。ChallengeRubyHackChallengeは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を覗いてみると単純なユニットテストで書けるコードがまだ未検証のまま残っていた。これを見つけるまでで既にイベントの時間をほとんど費やしていたが、大急ぎでテストケースを追加しプルリクを出すことに成功したというワケ。イシューでは盛大に間違った英文を書いたためプロジェクターに映されたときは恥ずかしい気持ちになった。今までやったことがないことをやる。これは確かに大きな壁ではある。大きなもう1つの壁がある。個人的な課題は2つめ、3つめのプルリクをイベントの外で出して行く事が出来るかどうかだ。そのために参加したんだから。Challenge最大の敵はやはり...?何をすればいいかやったこともう1つの。