おはようございます。エンジニアの三上(@mkmn252)です。 この記事は福岡で開催中のRubyKaigi 2019の2日目のkeynote/セッションのレポートになります。2日目の発表資料も別記事にてまとめておりますので、合わせてご覧ください。

All bugfixes are incompatibilities

2日目のkeynoteは、@nagachika氏による安定版メンテナに関するお話でした。安定版メンテナがどのような作業をしているのかや、安定版メンテナに求められる素質などについて語られていました。

安定版メンテナの役割

Rubyでは、Subversionの名残でtrunkブランチで開発が行われており、このtrunkから安定版ブランチが作成されます。この安定版ブランチをメンテナンスするのが安定版メンテナで、現在は2人体制で安定版ブランチを1つずつメンテナンスしているそうです。メンテナの作業は、trunkに入ったbugfixを安定版ブランチにbackportすることや、脆弱性対応、bugfixなどを取り込んだバージョンをリリースすることとなります。

安定版メンテナに求められる素質とは

人間には1年に1回歳をとるという脆弱性(?)があるため、メンテナもいつかは世代交代が必要になります。nagachika氏は、未来のメンテナに向けて必要な素質をRubyの実装を広く浅く知っていることはもちろんのこと、trunkから何を安定版ブランチにbackportするのかを判断することが非常に重要と語っていました。 安定版はbugfixはbackportし、新機能や非互換となってしまう機能などはbackportしないというメンテナンスポリシーだそうですが、時にはこの判断が非常に難しいこともあるそうです。過去の失敗を例に挙げ、バグの影響を被る多くのユーザーを救うために、時にはbugfixのbackportをしないといった現実的な判断をすることが重要になるそうです。

まとめ

keynoteを聴講し、多くの方々に支えられているからこそ、我々はRubyを使うことができると感謝の気持ちを新たにしました。いつかはRubyに貢献できるよう、精進していきたいと思います。 nagachika氏は、最後のLTでも登壇されておりこちらも楽しませていただきました。ありがとうございました。

How RSpec works

Rubygemsの累計ダウンロード数の上位を占める代表的なテストツールであるRSpecが、どのようにテストを実行しているかを解説するセッションです。 RSpecは、役割によっていくつかのコンポーネントに分割されています。rspec-coreはテストの構造と実行、rspec-expectationsは評価するオブジェクトと期待値のマッチング、rspec-mocksはその名の通りモック機能と責務によって綺麗に分割されいます。 セッションではこれらのコンポーネントに関して、挙動の詳しい解説がありました。よく利用するgemだからこそ、構造や挙動を改めて学ぶことでより理解が深まったように感じます。

State of Sorbet: A Type Checker for Ruby

基調講演などでも取り上げられていた、Ruby 3で導入予定の静的型チェッカーのSorbetに関するセッションです。 Sorbetによる型チェックの性能は、Uninitialized Constant Errorであれば100%、 No Method Errorも80%の精度でコードの実行なしにエラーを検出できる状態だそうです。また、メソッドにsignaturesをつければ型チェックをすることができ、すでに62%のメソッドにはsignaturesが追加済みとのことです。 セッション中に発表されましたが、なんとSorbetのドキュメントが本日公開されました!また、オンラインでのデモも公開されており、SorbetのVSCcode用のエディタ拡張の機能を体験することができます。 現在は、エディター拡張の開発が進められており、またプライベートβテストを徐々に規模を広げながら実施しているそうです。OSSの公開は今年の夏頃を予定とのことで、今から公開が待ち遠しいですね。

Lightning Talks

恒例の5分間のLTセッションです。mrubyが人工衛星に利用される話、Rubyの暗黒面の話、間近に迫った”令和”にまつわる話題など、どのLTも内容が濃く会場も大盛り上がりでした。

最後に

RubyKaigi 2日目も大盛況のうちに終わりました。RubyKaigiも残すところあと1日となり、3日目も魅力的なセッションが目白押しですので、最後まで楽しんで行きたいと思います。