現在開発が進められているRuby1.
Rubyの『現在』
- Q: 2009年初めにRuby 1.
9.1がリリースされましたが、 1. 8系統から1. 9系統での重要な変更点はどこでしょうか? A: 最も重要なのは、
多言語化対応です(注1)。1. 9系統では、 同時に複数の言語を扱えるよう、 他言語化の手法としてCSI (Code Set Independent) 方式を採用しました。システムの内部コードを1つの文字集合で統一する方法ではなく、 すべてのエンコーディングを対等に扱っています。この方式では、 外部で用いられるコードと内部で用いられるコードが一致するため、 不必要なエンコーディングの変換によるオーバーヘッドを減らすことが可能になります。 それと、
言うまでもなく、 評価器にYARVを採用したことも重要な変更です(注2)。これにより、 高速化とネイティブスレッドを実現しました。1. 9系統では、 1. 8系統と比べて体感できるほどにirbの立ち上がりが早いです。この早さと便利な新機能に慣れてしまうと、 もう1. 8系統には戻れませんね。 - Q: 次期最新バージョンである1.
9.2で新たに追加される機能を教えてください。 A:1つ目は、
Socket APIをよりオブジェクト指向らしく変更しました。これまではC言語ライブラリの単純なラッパで、 Perl風のAPIでした。変更後も以前のものとある程度互換性はあり、 移植で困ることはあまりないと思います。 次に、
Timeクラスが再実装されました。以前はこちらもCライブラリのラッパで、 環境によっては協定世界時 (UTC) で1970年から2038年までしか表現できませんでした。これを独自に実装し、 太陽系誕生以前の日時も表現できるようになり、 2038年問題も解決されました。内部実装は大きく変わっていますがパフォーマンスの劣化はありません(注3)。 また、
乱数を扱うためのRandomクラスができました(注4)。マルチスレッドで乱数を扱う際、 各スレッドで乱数の正しさを保証できます。 現在、
少ないオーバーヘッドでプログラムを動的にトレースすることのできるDTraceをRuby 1. 9.2に入れようと作業しています。DTraceはMac OS X標準のRubyやMacRubyには入っているのですが、 バグが多くこのまま広まるのが悔しいので開発しています (笑)。
Ruby開発の『最前線』から
- Q: Ruby 1.
9系統を開発するうえで、 1. 9.2はどのような位置づけなのでしょうか? A:結局のところ、
1. 9.2はワクワクするような新機能には欠けています。1. 9.2の新機能は特定領域で実際に困っている人以外には割とどうでもよいものだというのが私の見解です。これは1. 9.1でグランドデザインを決定することに成功したからです。細かな設計ミスの修正や利便性向上のためのリリースが1. 9.2で、 これによってRuby 1. 9は1つの完成型に到達します。その後は再びMVM(注5)のような大きな新機能追加を含むリリースがやってくるでしょう。 1.
9.2の開発は、 Ruby on Rails 3のチームと協調しながら作業しています。Rails 3はリリース時から1. 9.2で動作するでしょう。 また、
1. 9.2はRubySpec をパスした最初のバージョンとしてリリースする予定です。 - Q: RubySpecとはなんでしょう?
A:まつもとさんのRuby
(MRI:Matz' Ruby Implementation) 以外にも、 JRubyなど多くのRubyの実装が存在しています。RubySpecは、 これらが共通的に使えるテストケースを開発するプロジェクトです。Rubiniusの開発チームが発祥で、 現在ではJRubyも参加しています。現在は1. 8系統がメインですが、 1. 9.2も対応を進めています。 問題の見つかる個所が、
テストケースの問題、 テストプログラムの問題、 1. 9.2の問題、 仕様自体の問題と多く、 1. 9.2をリリースするための最大の課題となっています。しかし、 1. 9.2にとってRubySpecをパスしたRubyであることはとても大きく、 1. 8.6と同じくらい安定して動くだろうと考えています。 - Q: 1.
9.2以降のRubyはどうなるのでしょうか? A:1.
9.2がリリースされていない段階では、 見通しはまだありません。1. 9.3にとっておいた新機能が1. 9.2で提供できそうです。その先については、 YARVの開発者の笹田さんは、 1. 9.5くらいでMVMを入れたいとおっしゃっていました。Ruby2. 0については、 全体としての方向性はありますが、 何から手をつけていつできるかはまだまだ未定です。 - Q: 1.
9.2の開発に携わりたいという人に求めていることはありますか? A:なんと言ってもバグを修正してくださるとありがたいです。公式のバグトラッキングシステム(注6)にバグ報告が山ほどありますので、
メーリングリストに修正パッチを送ってください。 そこまでできないという方でも、
お願いできると助かることは沢山あります。様々な環境で動作することを確認したいので、 開発メンバーが持っていない環境、 例えばPowerPC上のMac OS Xなどでビルドし、 テスト結果を報告していただきたいです。環境ごとに動作報告をまとめられる場所を作ることも考えています。また、 るりま(注7)に、 1. 9系統のドキュメント作成をしてくれる方がいると嬉しいです。RubySpecについても、 Asakusa. rbというコミュニティで修正のための勉強会などを開いていますので、 そちらを参照し、 参加してほしいです(注8)。
『プロジェクト』としてのRuby
- Q: 不具合やバグの報告はどのようにチェックしているのですか?
A:メーリングリストとバグトラッキングシステムが公式の窓口です。また個人的に、
はてなダイアリーなどのブログや、 OKWaveでの質問もときどきチェックするので、 気づいたときにはバグトラッキングシステムに登録します。以前はよく2ちゃんねるのスレッドにバグ報告が挙がりました。最近はスレッドからバグトラッキングシステムに誘導してくれる流れができているので助かっています。そう言えば、 「アンチRubyスレッド」 というところで良い提案がされたこともありました (笑) しかし、
見過ごすともったいないので良い提案やバグ報告は是非バグトラッキングシステムにも投稿をお願いします。 - Q: Rubyの産みの親であるまつもとさんの提案に対して、
異論が挙がることもあるのでしょうか? A:まつもとさんの仕事の大きな部分は文法のデザインで、
個々のライブラリについてはあまり口を出しません。 文法やコアライブラリに対する修正において、
まつもとさんと他の人の意見が異なることはあります。そのときも、 合理的な説明でまつもとさんを説得することは可能です。 たとえば、
以前まつもとさんがnil. to_ sを修正して空文字列ではなく"nil"を返すようにしたことがありました。しかし、 Rubyで簡単なテキスト整形をする際にはこの修正は嬉しくありません。何人かが事例を挙げて反対したところ、 この修正は撤回されました。 ただ、 やはり言語デザインに関してまつもとさんの提案は優れていて、 最終的には納得できるものであることが多いように思います。例えば1. 9系統では、 無名関数(lambda)を"->"という文法でも利用できます。この変更について私は消極的に反対していましたが、 慣れてしまえば使いやすく、 良い変更だったと感じています。 - Q: リリースマネージャの立場から、
Rubyの開発プロジェクトから学ぶこと、 気づきはありますか? A:
「動かないものを紙の上でやってもムダ」 で、 常に動くものを対象とすることです。また、 開発メンバー個々の作業を把握せず、 リリースマネージメントを行えるわけがありません。話を聞けば、 誰が何をやっているのかがわかるだけの技術的知識が必要になります。これを行えているので、 Rubyというプロジェクトはうまく回っていると思います。 マネージャがエースでなくても良いという点もあります。私がリリースマネージャをしているのも、
誰もやりたがらなかったからです。 「好きなものが良くなっていくことを望む」 想いから、 Rubyの開発に参加しています。だからといって 「intって何?」 というのでは困りますが(笑)。 - Q: なぜうまく回っているのでしょうか?
他のプロジェクトにも応用できることはありますか? A:たまたま集まったメンバーで、
気がついたら今の形になっていた、 というのが正直な感想です。テストのメンテナンスや継続的ビルドに興味を持った人が偶然参加してくれたからではないでしょうか。ただ、 仕事などでは 「偶然」 で済まされないでしょうから、 動くコードを保つことを徹底するため、 バージョン管理をし、 テストを書くことを意識して行うのが大事でしょう。
Ruby 1.9による『新たな革命』
- Q: テストの重要性など、
Rubyのまわりではアジャイル/ XPの動きが広がりました。どうしてRubyだったのでしょうか? A:Dave ThomasやMartin Fowlerなどアジャイル/
XPのリーダーたちがRubyを好んだこと、 Railsがその考え方を支持していたことが挙げられるでしょう。 Merbの作者Matt Aimonettiが
「The Ruby Revolution is Over」 というエントリ(注9)で、 RubyやRailsによってコーディングの楽しさやテストの重要性が多くの開発者に広まり、 今では普通のことになった、 と書いています。私も同じく、 Rubyは1. 8系統とRailsの存在によって、 メジャーな言語の末席に入ることができたと思います。 1.
9系統ではCSI という方法で多言語化を行いましたが、 この方法も次の 「普通」 なことになるかもしれません。今後も、 MVM、 Classbox(注10)などの新しいアーキテクチャを取り入れようとしています。Rubyはこれからも少しずつ良くなります。Rubyの柔軟性を活かしきったライブラリが現れれば、 新たな革命を起きるかもしれません。 Ruby 1.
9は、 1. 8系統の不自然さがなくなった良いバージョンです。Ruby 2. 0まで仕様が大きく揺れることはなく、 1. 9から2. 0への移行は1. 8から1. 9よりもずっと容易なものになるでしょう。ですのでライブラリの作者は移植を始めましょう。Rubyをスクリプト言語として使っている人は、 すぐにでも1. 9系統に移行できます。新たな革命が起きるとしたら、 それはRuby 1. 8ではなくRuby 1. 9の上で起きるでしょう。
- プロフィール
Yugui
(園田裕貴) Ruby 1.
9系統リリースマネージャ。MtF-TS。より多くの価値を基底現実から他の現実に持ち出すことを望んで活動中。株式会社スケールアウトにて広告配信エンジンの開発に従事。
12月23日発売