giftee engineer blog

Ruby Kaigi 2019 Day2 参加レポート!

2019-04-22

Ruby Kaigi 2019 Day2 を振り返ります。

giftee の大谷です。前回に引き続いてRuby Kaigi 2019 の Day2 の様子やセッションの内容を振り返ります!この日も興味深いセッションが沢山ありましたが、個人的に気になった Day2 Opening Keynote から、簡単な内容の紹介と感想を書きたいと思います。(StripeのSorbetはすごくワクワクしました)

All bugfixes are incompatibilities (@nagachika)

セッションの概要

  • CRubyのいわゆるstable versionのメンテナーの方々が、日々何を考えてどのようにメンテナンスされているかというお話でした。

stable branchにおけるbugfixの流れ

ざっくりとは以下のような流れでbugfixがなされ、1つのstable versionにつき1名のメンテナーの方が付くそうです。

  1. trunk(いわゆるdevelop)のブランチに機能追加やbugfixのコミットが積まれていく。
  2. それらのコミットを見て、「bugfixのコミットだけ」stable brunchに取り込んで(backportして)いく。

この「コミットを見てstable brunchに取り込んでいく」作業ですが、ここの判断がメンテナーに任されているため難しいようです。

苦労すること

それ以外にも以下のようなことで苦労されているようでした。

  • コミットが常にキレイに分かれているとは限らない
  • bugfixが別のバグを生むこともよくある

    • 場合によってはパーサーの修正を迫られることもある(魔境)

bugfixによって意図しない挙動を他の部分で引き起こすようなケースの場合は、既存のアプリケーションへのインパクトの大きさによってbugfixするか考えているので、実際はほとんど使ってない機能のバグは(修正による副作用が大きければ)あえて直さないという判断をすることもあるそうです。

感想

普段あまり意識せずに使っているRubyのバージョンを日々守ってくれているメンテナーの方々の苦労が実感できました(1時間強のセッションでしたのでメンテナーの方々が日々実践されていることから比べると本当に垣間見えた、というレベルだとは思いますが…)。

また、Keynote Sessionとしてこういった安定版のメンテナンスに関わる話が聞けたのが良かったと思いました。ついつい機能拡張のような華々しい話に興味が向きがちですが、今回のセッションを通して、我々が安心してRubyが使えるのは粛々とメンテナンスをしてくれている方々のお陰だと強く実感しました。

そして、今回のセッションのタイトルにもありますが、Rubykaigi全体を通して「Rubyは後方互換性を非常に重視している」のかなぁと思いました。「新機能の追加によって既存の機能に影響がある場合、後方互換性を切ってまで新機能を追加することは積極的にはしない」といった発言も見受けられました。この方向性に関しては3日目の”Ruby Committers vs the World”でも質問に上がりましたのでここでの言及は避けますが、Rubyという言語の人口と影響力を表しているのかなと思いました。