0022 号 巻頭言
初稿:2007-12-17
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 年表」がある。
少し抜粋してみよう。
これを読むと、97 年の 8 月に、そこそこ安定した Ruby 1.1 がリリースされたように思える。しかし、それは事実だろうか。
実際の Ruby はどのようにリリースされたか、ML の記事をベースに検証してみよう。
Ruby にとってのはじめての正式リリースと呼ぶべきバージョンは、
上記年表にもある 96 年 12 月にリリースされた 1.0 だろう。
正確には 1996 年 12 月 25 日にリリースされている。
(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 年後である。
(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5761)
一方、新しい開発版は 1.1 というバージョンとなる。
1.1 系のリリースの予告が流れたのは、1997 年 8 月 12 日の ruby-list ML である。
(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/3672)
そして予定通り、8/13 に 1.1 alpha 0 こと 1.1a0 がリリースされる。
(http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/123)
さらに一週間後の 8/20 には、1.1 alpha1 がリリースされる。
(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 のリリースが始まる。
(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 月の時点では下記のようなメールも流れていた。
(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 日後である。
リリースのアナウンスを全文引用する。
(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 ほど心強いものはない。
このようなサービスを長く続けていくことは、見た目以上の苦労があったと推測される。長らく運用維持に尽力されている原さんには、この機会に心よりの感謝を述べたい。ほんとうにどうもありがとうございます。
(るびま編集長 高橋征義)