ドリコムのサーバーサイドエンジニアの大原です。
9/19に開催されたRubyKaigi2017の2日目を印象に残ったセッションを中心にレポートします。

Keynoteセッション @matz

今回のキーノートセッションでは型、コンカレンシー、パフォーマンスといったトピックではなく、「才能」についてのトークがされました。
Matz氏は「天才プログラマー」と言われる事があるそうですが、彼自身は自分を「才能ある言語デザイナー」だと思っていると語ります。
ここでいう「才能」とは「言語愛」「言語に対する愛情」と説明されます。
プログラミング言語は自分の考えをマシンに伝えたり、自分の考えを表現、思考をまとめる為のツールなので、特に心理的な側面が強いと考えているそうです。

本トークではRubyのモジュールを例に、Rubyの言語機能がどの様に議論され開発・実装されていくのかの紹介がされました。
Rubyのモジュールはもともと
1) Mixinの単位
として採用されましたが、Rubyが成長するにつれて、
2) ネームスペースとして(例えば、Net::HTTPの様に)
3) シングルトンとして
4) メソッド・機能の集まりとして
5) メソッドコンビネーションの単位として
6) リファインメントの単位として
7) (まだ提案の段階ですが)Structual Signatureとして
利用されるようになってきた経緯があります。
これらの機能は他言語のアイデアを、Rubyに合わせて少しづつ組み込んできたと説明が続きます。

Matz自身は現在ではRubyの機能実装をする事はあまりなくなりましたが、
言語のリードデザイナーであることは今も変わらないと語りました。

最後に、Rubyをもっとより良くする事で、世界がより良くなれば良いと語り、キーノートを締めくくりました。

An introduction and future of Ruby coverage library @mametter

クックパッド社のフルタイムRubyコミッターになったとして1日目に紹介された@mametter氏の発表です。

トークのテーマは、Rubyのカバレッジライブラリの紹介とRuby2.5に向けての拡張に関するものでした。
mametter氏は自身の目標としてRubyのロバスト性を向上させる事だと語ります。
その一環として、まずはRubyのカバレッジを改善する仕事に取り組んでいるそうです。

カバレッジとは
1) テストスイートの良さを測る為の指標
2) 未テストのコードを発見する為のツール
3) (異論はあるかもしれないが)テストスイートの良さを判断する為の指標
であると解説し、カバレッジの種類として、
1) コード中の関数の何%がテストされたかを示すFunction Coverage
2) 意味のある行のうち何%がテストされたかを示すLine Coverage
3) 各分岐がTrue/Falseの両方走ったらOKとするBranch Coverage
があり、それぞれの特徴を解説されました。

現在、Rubyの品質を保障するのはテストしかなく、カバレッジはそのテストの良さの指標なので特に重要だと語ります。ただ、mametterは、あまりカバレッジは利用されていない印象をもっているそうです。
その理由として、
1) そもそも知られていない
2) どう使えば良いかわからない
3) Rubyのカバレッジ機能が十分ではない
があるのではないか、そのために今回のトークのテーマにカバレッジを選んだそうです。

さらに、良いカバレッジとはどういうカバレッジか?カバレッジをどう理解するべきか?について解説されました。
良いカバレッジは、
1) コードをカバーしている
2) デザインや設計をカバーしている
点を抑えている事が重要で、カバレッジは、
1) ただの値でしかない
2) カバレッジはゴールではない
という点を忘れてなならないと説明されました。

特に、「カバレッジXX%以上でなければリリースできない」といった使い方は非常に良くなく、エンジニアが良くないテストスイートを書いてしまったり、設計に対する網羅性が無くなってしまう弊害があり、注意が必要だと語られました。
良いカバレッジ(テスト)を書く為のコツとしては、
1) コード全体を見てテストを書く
2) どういう観点のテストが足りないのかを考える
3) 足りない観点のテストを書く
に気をつける事だと解説されました。

次にRubyのカバレッジライブラリの現状の紹介として、
SimpleCovの解説と使い方、内部的に利用されているcoverage.soについて紹介があり、
今後のRubyカバレッジの拡張プランとして、
1) function coverageのサポート
2) branch coverageのサポート
3) coverageライブラリのAPIをより良くする
という方針を紹介してセッションを締めくくりました。

まとめ

2日目は最後のセッションとしてLT大会が実施され、
12人のスピーカーの発表があり、本編のセッショントークに負けず劣らず面白い内容ばかりでした。
セッション終了後も各社スポンサー主催のドリンクアップが多数開催され、
特にRubyistの交流が活発な日だったと思います。

明日の3日目でイベントは終了ですが、引き続きイベントをウォッチしていきたいと思います。