Ruby 安定版の今後の保守の見通し

書いた人: usa (@unak)

はじめに

Ruby 2.0.0 のリリース、おめでとうございます。

長い開発期間を経て、諸方面 (特にリリースマネージャである mame さん) の多大なご尽力のおかげで、久し振りのメジャーバージョンアップとなる 2.0.0 がついに世に出ました。 しかし、いったんリリースが行われてしまうと、Ruby 自体の開発陣の興味の中心は、trunk、即ち開発版に戻ってしまいます。 その一方で、一般の Ruby ユーザーの圧倒的多数は、公式にリリースされた安定版を使用し続けると予想されます。 したがって、今回の 2.0.0 リリースの品質がどうであれ、バグのないソフトウェアというものが存在しない以上、一般の Ruby ユーザーのために、何らかの形で 2.0.0 を保守し続けていく必要があるということになります。 また、2.0.0 がリリースされても、すぐに全ての既存の Ruby アプリケーションが 2.0.0 へと移行できるわけでもないわけで、既存の安定版 (1.9.3) の保守も同様に継続が求められています。

というわけで、本稿では、Ruby 安定版の今後の保守の見通しについて簡単にまとめてみることにします。

Ruby 2.0.0

我々の長年の経験 (なんと 20 年!) から、リリースされた直後の安定版には、その名前に反して、仕様面で不安定な部分がどうしても残ってしまうことが判明しています。 なるべくそういう部分を減らすために、何度も preview や release candidate を公開したり、feature freeze などの期間を設けて仕様の安定化を図ってはいるわけですが、ほとんどのユーザーはリリースが行われて初めてそのバージョンの使用を始めるので、どうしても、予期せざる非互換、新機能の仕様の穴、などが、リリース後に発見されることになります。 単なるバグは直せばいいだけですが、仕様の欠陥は対応が難しく、正しくはどうあるべきなのか、修正は可能なのか、修正した場合に互換性はどうなるか、そもそも直すべきなのか否か、などなど、多くの難しい判断が必要となります。

したがって、新しい安定版の保守を行う際には、Ruby という処理系自体に対する深い理解と、現状をもたらした開発の流れについての知識が必要となります。 もちろん、それに加えて、Ruby 開発陣との緊密な連携や、レポートをくれるユーザーの皆さんとの円滑なコミュニケーション (もちろん英語の場合もある) もできなくてはいけません。

以上のような理由から、Ruby 2.0.0 の保守は、特にその初期段階は、なかなかに困難な作業になると予想されています。 そのため、必要な能力がある担当者を見つけることが最大の課題と考えられていたのですが、ruby-trunk-changes でお馴染みの近永さんが mame さんの推薦受け入れてくださったので、この点については問題はなさそうです。

今後の見通しですが、次のメジャーバージョンアップ (おそらく 2.1.0) が、いつ、どのような内容で行われるか、現時点では何も決まっていないため、それに大きく左右される 2.0.0 の動向もあまり予想はできません。 また、2.0.1 といったバージョンがリリースされるかどうか、も未定ですが、仮に 2.0.1 が近いうち (一年程度のスパン) でリリースされることになれば、その場合はその時点で 2.0.0 の保守は停止し、2.0.1 への移行が促されることになると思われます。 筆者の勝手な予想では、一年程度は 2.0.0 の仕様安定化のための対応と、数ヶ月に一度のペースでのパッチリリースが行われ、その後は、後述の 1.9.3 と似たような形で保守が行われることになる、ということになるのではないかと思います。 その際には 2.0.0 ではなく 2.0.1 という名前になっているかもしれません。

2.0.0 (あるいは 2.0.1) の保守がいつまで続くか、ということもはっきりしたことは言えませんが、短くても 2.1.0 のリリースから一年は続くでしょう。 2.1.0 の状況次第では、2.2.0 のリリースくらいまでは保守されるかもしれません。

Ruby 1.9.3

1.9.3 については、現在、Ruby アソシエーションによる Ruby の開発支援事業の一環として、有償で保守の委託が行われています。 現時点での委託先は株式会社 TOUA であり、具体的には筆者が主たる作業を担当しています。 Ruby アソシエーション様、ならびに協賛会員の皆様にこの場を借りてお礼申し上げます。

1.9.3 の保守は、現状はユーザーからのバグ報告、バックポートリクエストを処理することが中心になっています。 1.9.3 については、最初のリリースからもかなり時間が経っており、2.0.0 の項で述べたような仕様面の不安定さについてはほぼ解決済みです。 そのため、保守作業自体も、割と機械的に対応できる部分が多く、正直なところ格別面白いものでもありません。 言い換えると、Ruby 開発陣の興味を強く引くような作業ではないため、ボランティアベースではなく、委託業務として保守を行うというのは、合理的な判断であると考えられます。

ただし、機械的に対応できる部分が多いと言っても、1.9.3 は「安定版」として多数のユーザーベースを抱えており、特に互換性の維持については最大限の注意が払われる必要があります。 そのため、1.9.3 の更新に当たっては、既存の test suite や RubySpec に影響を及ぼさない、ということを原則として、対応が行われています。 なお、こうした条件を達成するために、RubyCIRubyInstaller CI といったサイトが、変更の影響確認のために活用されています。 2.0.0 (あるいは 2.0.1) についても、同じように、これらが互換性の維持に大きく貢献してくれると思われます。 運営してくれている方々に感謝を捧げましょう。

さて、Ruby 1.9.3 の今後の見通しですが、前述の通り、2.0.0 がリリースされたからといって 1.9.3 が放棄されるわけではなく、まだしばらくの間は保守が維持されることが決まっています。 少なくとも、2.0.0 のリリースから一年後、つまり 2014 年 2 月までは保守が継続される予定です。 その後については、次のメジャーバージョンアップ (2.1.0) のタイミングにも左右されますが、おそらくは 2.1.0 のリリースの前後にセキュリティメンテナンス (よほどのことがない限りバグ修正も行わず、セキュリティ上の問題が判明した場合のみ更新が行われる) というフェーズに移行し、そこから一年程度で最終的に保守が打ち切られる、ということになる見込みです。

Ruby 1.8.7

せっかくなので、Ruby 1.8.7 の現状も述べておくと、現在はセキュリティメンテナンスのフェーズに入っており、2013 年 6 月で保守が打ち切られる予定です。

本当に長い間 1.8.7 の保守を担当してくださっている卜部さん、ありがとうございます。 まだちょっと早いですが、お疲れ様でした。

おわりに

以上のように、Ruby 安定版の今後の保守の見通しについて概観してみました。 今後の情勢の変化、特に 2.1.0 の動向によって変化する部分も多いと思いますが、概ねはここで述べたような形で進むのではないかと思います。

今回の、2.0.0 のリリース、そして Ruby 二十周年、という機会に、Ruby を開発・維持してきた先人の皆さんに敬意と感謝を捧げると共に、今後の Ruby の益々の発展を願いつつ、本稿を終えることにします。

筆者について

なかむら (う)。 Ruby コミッタ (アカウントは usa)。コミッタとしての担当は Windows 版メンテナ、および、1.9.3 ブランチメンテナ。 Ruby が一つ歳を取るたびに、自分の歳を思い出させられて、がっくり来ております。