0022 号 巻頭言

10 年前のリリースマネジメント

Rubyist Magazine 第22号をお届けする。

今回は、 RubyKaigi2007 でも発表いただいた eRuby の高速化について、詳細なデータと解説をまとめた 「RubyKaigi2007: C より速い Ruby プログラム」、 先日行われた RubyConf2007 の模様を詳しくお伝えする 「Ruby Conference 2007 レポート」、 印刷媒体ではどうにも紹介しづらいネタ言語 Whitespace について紹介するど 「Rubyist のための他言語探訪 【第 14 回】 Whitespace」、 ゴルフ場経営を営む浜地さんからのお題と前回の回答となる 「るびまゴルフ 【第 2 回】」、 さながらオーム社の回し者企画となった(オーム社様いつもどうもありがとうございます) 「0022 号 読者プレゼント」、 そしていつもの通りの「0022-RubyNews」、「0022-RubyEventCheck」と、 若干少なめの構成となっている。


今回は書くネタがないので、埋め草的な原稿でお茶を濁すことにする。

Ruby 1.9.1 のリリースを控えている今日このごろだが、 大方の予想通り、順調とは言えない。 現時点ではどのような形でのリリースになるのか不明なため、 ここでは 1.9.1 そのもののには触れない。 その代わり、過去のリリースマネジメントについて確認してみたい。 すなわち、以前の Ruby はいったいどのようにリリースされていたか、である。

Ruby のリリースについてまとめられた資料は多くはないが、なくはない。 例えば、『Ruby アプリケーションプログラミング』では、まつもとさんが書いた第 1 章の 7 ページに「Ruby 年表」がある。 少し抜粋してみよう。

 1996/12 バージョン 1.0
 1997/08 バージョン 1.1
 1998/12 バージョン 1.2(安定版)

これを読むと、97 年の 8 月に、そこそこ安定した Ruby 1.1 がリリースされたように思える。しかし、それは事実だろうか。 実際の Ruby はどのようにリリースされたか、ML の記事をベースに検証してみよう。

Ruby にとってのはじめての正式リリースと呼ぶべきバージョンは、 上記年表にもある 96 年 12 月にリリースされた 1.0 だろう。 正確には 1996 年 12 月 25 日にリリースされている。

Subject: [ruby-list:1488] ruby 1.0 released finally!!
Date: Wed, 25 Dec 96 12:57:19 JST

まつもと ゆきひろです.

ついさきほどruby 1.0を置きました.
これもみなさんのおかげです.

# さあ,fjへの紹介記事も書かないとな…

(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/1488)

この後、1.0 系については、ruby 1.0-YYMMDDという形式のバージョンがリリースされていく。「YYMMDD」はリリースした年月日である。 1.0 系の最終版はおそらく 1.0-971225 であった。1.0 の最初のリリースのちょうど 1 年後である。

Subject: [ruby-list:5761] ruby 1.0-971225 released
Date: Thu, 25 Dec 97 17:03:22 +0900

ruby 1.0最終リリース予定である1.0-971225を先程putしました.
それと1.1b3に対応したリファレンスマニュアルも用意しました.

(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5761)

一方、新しい開発版は 1.1 というバージョンとなる。 1.1 系のリリースの予告が流れたのは、1997 年 8 月 12 日の ruby-list ML である。

Subject: [ruby-list:3672] about ruby 1.1 alpha release
Date: Tue, 12 Aug 97 14:51:04 +0900

まつもと ゆきひろです

#リリースしたというわけではありません.^^;;;

明日予定している ruby 1.1 alpha リリースですが,以下の点に気
を付けて下さい.

  * このリリースはalphaですから,1.1の最終仕様とは異なるかも
    知れません.

  * アナウンスは ruby-dev で行います.
(略)

(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/3672)

そして予定通り、8/13 に 1.1 alpha 0 こと 1.1a0 がリリースされる。

Subject: [ruby-dev:123] ruby 1.1 alpha0 released
Date: Wed, 13 Aug 97 18:57:18 +0900

まつもと ゆきひろです

というわけで私のお休み前にruby 1.1 alphaをリリースします.
以下のことに気をつけて下さい.

  * 私は明日(14日)から月曜まで休みです.問題があっても対応で
    きません.

  * Object#evalを始めとして結論の出ていない部分もありますし,
    仕様(特にメタプログラミング系の)は予告無く変更になる場合
    があります.

(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/123)

さらに一週間後の 8/20 には、1.1 alpha1 がリリースされる。

Subject: [ruby-dev:178] ruby 1.1 alpha1 released
Date: Wed, 20 Aug 97 12:27:30 +0900

まつもと ゆきひろです

ruby 1.1 alpha1をリリースします.なんかいろいろいじっていま
すが,本質的な違いは無いように思います.詳細はChangeLogを見
て下さい.

今後の変更の予定

  * インスタンスのスコープでのeval
  * break/nextを再度予約語化(未定)
  * どのクラスで定義されてたメソッドかの情報を得られる

など.なお,1.1 alphaは予告通り仕様がころころ変わるので,自
分の使っている機能の仕様が変わってしまった時にはどんどん文句
をつけましょう.

(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/178)

メールの文面を見ていただきたい。前述の年表の年月日からいくと、 このバージョンが 1.1 のリリース版のはずである。 しかしながら、実際にはこのときリリースされたのは「1.1 alpha」であり、 しかも「予告通り仕様がころころ変わる」としている。 つまり、一般的なユーザが期待する「安定版」としてのリリースではなかったのである。

では、1.1 系はどのようにリリースされていったか。時系列に並べてみる。

  • 97/08/13 1.1a0リリース [ruby-dev:123]
  • 97/08/20 1.1a1リリース [ruby-dev:178]
  • 97/08/25 1.1a2リリース [ruby-dev:254]
  • 97/08/27 1.1a3リリース [ruby-dev:288]
  • 97/08/28 1.1a4リリース [ruby-dev:313]
  • 97/09/01 1.1a5リリース [ruby-dev:325]
  • 97/09/03 1.1a6リリース [ruby-dev:389]
  • 97/10/02 1.1a8リリース [ruby-dev:636]
  • 97/10/07 1.1a9リリース [ruby-dev:699]

約 2 ヶ月間の間、多少の緩急はありつつも、10 回のリリースが行われている。

そして 2 ヶ月ほどの空白のあとの 1997 年 12 月 5 日、1.1b のリリースが始まる。

Subject: [ruby-dev:950] ruby 1.1b0 released
Date: Fri, 5 Dec 97 18:10:26 +0900

まつもと ゆきひろです

昨日すでにftpに置いてあったruby-1.1b0.tar.gzですが,こいつは
インストーラにバグがあってインストールしたrubyの実行ビットが
立ってません.

既に修正したものを置いてありますが,ミラーを参照される方は注
意して下さい.

これから1.0->1.1の変更点をまとめたものを用意します.

(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/950)

1.1a と 1.1b の違いはよく分からなかった。1.1a については 「1.1 alphaの略」、という雰囲気があったが、1.1b については 「1.1 betaの略」、という印象は薄い。この後リリースされる 1.1c は、 もちろん何かの略ではない。

1.1b の時代でのリリース回数は、1.1a の比ではない。長くなるが一通り書き出してみる。

  • 97/12/05 1.1b0 [ruby-dev:950]
  • 97/12/09 1.1b1 [ruby-dev:998]
  • 97/12/19 1.1b2 [ruby-list:5732]
  • 97/12/24 1.1b3 [ruby-list:5751]
  • 98/01/09 1.1b4 [ruby-list:5846]
  • 98/01/19 1.1b5 [ruby-list:5882]
  • 98/01/23 1.1b6 [ruby-list:5991]
  • 98/02/10 1.1b7 [ruby-list:6372]
  • 98/02/20 1.1b8 [ruby-list:6591]
  • 98/02/27 1.1b9 [ruby-list:6891]
  • 98/03/12 1.1b9_01 [ruby-dev:1735]
  • 98/03/13 1.1b9_02 [ruby-dev:1773]
  • 98/03/17 1.1b9_03 [ruby-dev:1826]
  • 98/03/19 1.1b9_04 [ruby-dev:1859]
  • 98/03/27 1.1b9_05 [ruby-dev:1959]
  • 98/03/28 1.1b9_06 [ruby-dev:1975]
  • 98/04/07 1.1b9_07 [ruby-dev:2152]
  • 98/04/07 1.1b9_08 [ruby-dev:2159]
  • 98/04/09 1.1b9_09 [ruby-dev:2211]
  • 98/04/14 1.1b9_10 [ruby-dev:2313]
  • 98/04/16 1.1b9_11 [ruby-dev:2378]
  • 98/04/20 1.1b9_12 [ruby-dev:2443]
  • 98/04/21 1.1b9_13 [ruby-dev:2463]
  • 98/04/22 1.1b9_14 [ruby-dev:2471]
  • 98/04/28 1.1b9_16 [ruby-dev:2539]
  • 98/05/06 1.1b9_17 [ruby-dev:2568]
  • 98/05/12 1.1b9_18 [ruby-dev:2602]
  • 98/05/13 1.1b9_19 [ruby-dev:2608]
  • 98/05/15 1.1b9_20 [ruby-dev:2648]
  • 98/05/18 1.1b9_21 [ruby-dev:2673]
  • 98/05/19 1.1b9_22 [ruby-dev:2698]
  • 98/05/26 1.1b9_23 [ruby-dev:2760]
  • 98/06/09 1.1b9_24 [ruby-dev:2820]
  • 98/06/11 1.1b9_25 [ruby-dev:2854]
  • 98/06/18 1.1b9_26 [ruby-dev:2911]
  • 98/06/19 1.1b9_27 [ruby-dev:2940]
  • 98/06/26 1.1b9_28 [ruby-dev:3056]
  • 98/07/03 1.1b9_29 [ruby-dev:3210]
  • 98/07/09 1.1b9_30 [ruby-dev:3249]
  • 98/07/15 1.1b9_31 [ruby-dev:3292]

1.1b9 までいったあと、1.1b9_01 になるところのいきあたりばったりさ加減が 面白いというか、おかしい。いずれにしても、半年以上の間、1.1b 系のリリースが続いているのがわかる。

しかし、全体としては 1.1c への移行に向けて動いてはいる。6 月の時点では下記のようなメールも流れていた。

Subject: [ruby-dev:2965] feature freeze for 1.1c
Date: Mon, 22 Jun 1998 18:41:33 +0900

まつもと ゆきひろです

そろそろ1.1cを出そうと思います.で,その前に1.1b9_30辺りで
feature freezeしようと思うのですが,駆け込み需要はありますか?

coerceおよびfinitは時間切れの印象を持ってます.

# って書くとがががっとリクエストが来るんだよな(笑)

(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/2965)

これを見て分かることは、1.1b は最初から feature freeze をしていた わけではない、ということである。では、いつ freeze したのか。 ML のログをざっとながめた分には分からなかった。

1.1c の最初のバージョン、1.1c0 がリリースされたのは 7 月 17 日になる。 最後の 1.1b 系、1.1b9_31 リリースの 2 日後である。 リリースのアナウンスを全文引用する。

Subject: [ruby-list:8770] ruby 1.1c0 released
Date: Fri, 17 Jul 1998 14:46:23 +0900

まつもと ゆきひろです

実験リリースとしてruby-devでいろいろやってた結果を反映した新
バージョンである 1.1c0 がようやっとリリースになりました.最
近ここでも 1.1b9_XX がどーのこーのという話題ばかりで不満に思っ
ていた方ももう安心(?)です.ながらく済みませんでした.

これをもってrubyのバージョンは正式に 1.1 に移行します.半年
以上かかりましたが,1.0には引退していただくことになります.

  ftp://ftp.netlab.co.jp/pub/lang/ruby/ruby-1.1c.tar.gz

今後ともrubyをよろしく.なお,ドキュメント類も更新しておきま
した.新しいリファレンスマニュアルもftpに置いてあります.

(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/8770)

これを見て分かることがある。 1.1 系というのは 1.1c 系が安定版であり(今回は書かないが 1.1c 系は今後も 1.1c9 までリリースが続く。さらに 1.1d という シリーズが始まるが、これは 1.2 系の開発版という位置づけに なる)、それ以外の 1.1a、1.1b、1.1d は安定版ではなかった。 1.9 系でいうところの「リリース」は、 1997 年 8 月ではなく、ほぼその 1 年後の 1998 年の 7 月である。 つまり、「リリース」という同じ言葉を使いながら、その意味するところが 異なっているのである。

さらに、十分な安定性を狙うというよりも、 仕様と実装の双方について、それなりに安定した段階で安定版としている。 仕様を十分詰め、いったんfixさせた後で実装の安定を目指す、という手順を踏んでいない。

以上、1.0 から 1.1c0 までの Ruby のリリースを見てきた。 ここから得られる知見は多々ありそうだが、特にここでまとめることはしない。 また、1.1d 系から 1.2 系について、さらにそれ以降についても 気になるところではあるが、こちらも他の機会に譲りたい。 1.9.1の無事のリリースを祈りたい。

最後に。今回の記事をまとめるにあたっては、blade サーバこと ruby-list ML、ruby-dev ML のアーカイブサービスを行っている blade.nagaokaut.ac.jp を最大限利用させていただいた。Ruby の歴史を繙く際には blade ほど心強いものはない。 このようなサービスを長く続けていくことは、見た目以上の苦労があったと推測される。長らく運用維持に尽力されている原さんには、この機会に心よりの感謝を述べたい。ほんとうにどうもありがとうございます。

(るびま編集長 高橋征義)