[2007 年 8 月号]

［ＯＯエンジニアの輪！］

ＯＯエンジニアの輪！

〜 第 38 回 笹田 耕一さんの巻 〜

今回のゲストは、東京大学大学院の笹田 耕一さんです。 笹田さんは今最も注目されているプログラミング言語 Ruby の処理系 YARV の開発をされています。 今回のインタビューでは、笹田さんと Ruby の出会いから YARV を開発するまでの道のり、さらに YARV のコアな部分に関するお話まで頂きました。 Ruby 1.9 のリリース、楽しみですね！



尊敬する人 植松伸夫

好きな言葉 「人生思うがまま」（植松伸夫）

愛用のツール xyzzy、IRC



現在のお仕事について

---最初に、今どういうお仕事をやっておられるか、お話していただけますか？

東京大学大学院の情報理工学系研究科創造情報学専攻で特任助教をしています。ここ、情報理工学系研究科秋葉原拠点は、創造情報学という最近できた専攻のラボになっているんですが、主にここに常駐しています。

そこで具体的に何をしているかといいますと、文科省の「先導的 IT スペシャリスト育成推進プログラム」というプロジェクトに従事しています。産業界から「きちんとわかる IT 技術者が少ないので大学もなんとかしてくれ」という要請があったらしく、文科省の公募により、数拠点が選ばれました。

で、東大と東工大と NII（国立情報学研究所）の 3 つの研究機関が協力してそのうちのひとつ「情報理工実践プログラム」を行っているんですが、私はそこに雇われている、というわけです。

この拠点では、実際にソフトウェアを作ることができる人材の育成を目的としています。例えば、東大ではソフトウェア開発案件を学生さんや教員によって提案してもらい、実際にチームを組んで開発してもらいます。このプロジェクトを通じて、ソフトウェア開発のプロセスを経て、スキルを身につけてもらおうというものです。その他、企業の方にエンジニアリングパートナー（EP）として適宜プロジェクトに助言を頂きご協力を頂いています。

---ソフトウェアはどういうものを作られてるんですか？

いくつかプロジェクトがあるんですが、例えば、Ruby に関連するプロジェクトですと「Ruby の文法チェッカー」を作ってもらっています。Ruby は動的なプログラミング言語なので、コンパイル時にわかるエラーがとても少ないんですよね。ただ、「こういう時にはこういう警告出せるよね」など、人間が見たら明らかに間違いだと分かるけれど、処理系には分からないような間違いというのがあります。そういうのをがんばってチェックするツールです。Java では FindBugs なんかが有名だと思いますが、その Ruby 版を目指しています。

で、そういうプロジェクトの傍ら、自分の研究として、Ruby 処理系の開発、そしてこれを使った研究を行っています。

Ruby との出会い

---Ruby との出会いは何だったんですか？

大学 4 年生の研究室配属のとき、何か新しいプログラミング言語をやってみようと思ったんです。そこで、評判が良さそうだということで Ruby をやってみたら、なんとなく手に合ったんです。でも、最初は全然分かんなかったんですよ。 例えば繰り返し文、3 回の繰り返しなんかは Ruby では 3.times {...} って書きますけど、当時そういう感覚がわからなくて。times メソッドに辿りつくまでに 1 ヶ月くらいかかったんですよ。 リファレンスマニュアルやまつもとさんの「オブジェクト指向プログラミング言語Ruby」を読んで、だいぶ理解が進みました。

で、そんな中で Rava*1 を作ってみて、「あぁなるほどこういうふうにやってくんだ」と、Ruby が使えるようになりました。

*1JavaVM on Ruby - ジョークソフト

---Rava を作るきっかけというのは？

日本ソフトウェア科学会っていう学会のイベントで、「ガーベジコレクション」を解説するチュートリアル、というのがあったんですよ。

そのゲストがすごい豪華で、湯淺太一先生と、まつもとさんと、前田敦司先生だったんですね。 このお三方がそれぞれ GC の偉い人な訳ですよ。これは行かねば、と思い行ったわけです。その時、前田さんが仰ってたのが、「ガーベジコレクションのある言語でガーベジコレクションのある言語を作るのはすごい簡単だ」と。まぁ、当然なんですけど。で、それを聞いてその気になった昔の自分が、「じゃあ、Java VM 作ってみると簡単かな」と思い、冗談で作りました。

大学の 3 年生のとき、「半年かけてなんでもいいから何か作れ」という課題があったんですが、そのとき C++ で JavaVM を作りました。なので、JavaVM がどういうものか、という知識があったので、Ruby で楽に書けました。ガーベジコレクションは勝手にやってくれるし、スレッドも勝手にやってくれるし。Rava を作ってみて、プログラミングのしやすさを実際に経験して「Ruby はなんて便利なんだ」と思った次第です。

---チュートリアルではまつもとさんに声をかけました？

まつもとさん、きっと覚えてないんでしょうけど。 私、その講演で一番前の席に座っていたんですよ。で、隣が空いてたんですが、まつもとさんの講演が終わったら、そのまま私の隣に座ったんですね。「うぁ〜まつもとさんだぁ！」と思って、ドキドキしながら何もしゃべれないでいました。

---あはは(笑)

最後の最後に勇気を振り絞って、「Ruby はネイティブスレッド対応しないんですか？」って聞いたんですよ。 そしたら「そんな事はとりあえず考えてない」と言われまして。 なんの因果なのか、自分が今ネイティブスレッドに対応させる仕事をしてるんですね。なんか面白いですね。

YARV*2 〜もはや Yet とは言えない次期 RubyVM〜

*2Yet Another Ruby VM

2003 年ごろ、「Ruby ソースコード完全解説」っていう書籍の読書会に参加しました。「Ruby の処理系がこんなにダメなんだ」という事が、よく分かる本なわけです。「こう直したら速くなるんじゃない」ってのは、 誰が見てもそう思うんですけども、まあ誰もやってなかったんでやってみた、という経緯で開発を始めました。博士後期課程の 1 年生のときから趣味でそれをやっていたら、それにかかりきりになってしまって、そんな時、運良く IPA の未踏ユースに通ったんですよ。

---それが今の YARV のベースですか？

そのものですね。

---なるほど。今、処理系の開発をされていて、苦労されているところはありますか？

Ruby っていろいろ知らない機能がたくさんあって難しいんですよね。今でもいろいろ知らない機能があったりして。

例えば、いろんな場所にいろんなものが書けちゃうとか。例えば、こういう式が書けるんですね、オプショナル引数に指定する式に何でも書けるんですよ。メソッドの再定義を書いてみるとか。

---はい(笑)

他にも、クラスの継承するときには、こんな風に書くんですけど、実は継承元クラス指定の部分には、任意の expression が書けるので、例えば、ここでクラス定義を書くとか。

あと、if 文でメソッド定義を囲めるので、コンパイル時にはそのメソッドが追加されるかわからない、とかがありますね。

こんな感じでいろんなところに書けちゃうんで、全部動的に処理しなければなりません。というわけで、コンパイル時に自動的に決まらないんです。そういう意味で最適化はすごくやり辛いんですよ。ただ、すごくやり辛いからやりがいがあるというか。私自身最適化が好きなので、凄く楽しんでます。

---Ruby の VM って良く分かってないんですが、例えば、Java のバイトコードにあるようなクラスの定義がそもそもないんでしょうか？

クラス定義をどういう意味でとらえるかってこともあるんですが、Java の感覚でいうと「ない」といったほうが正しいと思います。先ほど、メソッド定義式を if 文で囲むことができる、って話をしたんですが、そういうことをサポートするためには、クラス定義はクラス初期化プログラムとして提供しなくてはいけないんですね。

つまり、クラスを定義するっていう命令があるんですよ。 で、クラス定義時にはそれを実行します。具体的には、defineclass っていう VM 命令があって、それを実行すると、クラス定義プログラムを実行する、っていう、そんな実装になってます。

あと、嫌らしい点としては、よく evil eval って言われてるんですけど、 eval でどんな式でも書けちゃうんです。どんな式でも書けるって事は、現在のコンテキストに対していろんな破壊的な操作ができる、つまり、例えば、ここでクラス C の定義をしている時に、クラス C のメソッド追加する事もできるんです。逆にメソッド取り除く事もできる。

そんなことを考え出すと、eval が出現した時点で、もう解析が不可能なんですよ。 Ruby の厳密な文法を守ろうとすると。「じゃあこの eval をちゃんと監視すればいいじゃない？」って 思うんですけれども、「じゃあこの eval がエイリアスで他の名前になってたらどうする？」とか。eval で eval の alias を定義されたりしたら、もう解析不能なんですよね。

---ん〜面白いですね。C とか Java とかの最適化と、たぶん全然違うんですね？

そうですね。「なんでこんな事ができないんだ」ということがよくありますね。例えば、ループ不変式の除去とか、そういうのがなかなか出来ない。

---ん〜なるほど。すごいですね…

とかなんとか、そういうのがあって、最適化とか「そんなのすぐやればできるじゃん」っていうのがなかなかできない言語ですね。 コンパイラの知識って、1950 年代から脈々と続いてきて、いろんな研究があるんですけど、 そういう研究の成果がなかなか活かせない言語になってると思います。

---それはやっぱり、なんでもかんでもダイナミックだからですか？

そうですね。表現力の高さを求めるか、性能を求めるかって事だと思うんですよね。もちろん、今までもそういう動的な言語はあって、研究もたくさん行われているので、そういう技術はいろいろ導入できると思います。というか、YARV はそういう技術を出来る範囲で取り込んでいます。

ネイティブスレッド対応

---今されているネイティブスレッド対応の話を聞かせて頂けますか？

YARV は、今リリースされている 1.8 の処理系の構造をガラッと変えちゃったので、 スレッド周りも大分変っちゃったんです。で、その際にネイティブスレッド対応させました。今年の 12 月に実際それが入ったものをリリースする予定です。多分。リリースするためのバグ出しを、今まさにやってるところですね。

---じゃあ 1.9 へのインテグレーションみたいなのが今回の未踏のテーマですか？

そうですね。

あと、それにプラスして、まだやり残している最適化やドキュメンテーションをやっています。

---スレッド周りってなんでそのネイティブスレッドに変えられたんですか？

性能的な側面ですね。

ちょっと、表を作りましょうか。 1.8 がユーザレベルスレッドで、 1.9 はネイティブスレッドです。 スレッドの切り替え時にスタックのコピーが発生するんですよ。

---はい

ここの性能に注目していて。

現行の Ruby 1.8 では、移植性を高めるためにマシンのスタックポインタを触らないようにしています。単に、マシンのスタックをコピーして入れ替えるという方式でユーザレベルスレッドを実装してる。で、ちょっとスタックが深くなるとコピーのオーバーヘッドが大きくなるんですね。 例えば、 1.8 でスレッドの切り替えをガンガン発生させるとすごく遅いんですよ。 で、1.9 のネイティブスレッドだと、スレッドの切り替えってのは、おそらくネイティブスレッドによるマシンレジスタ（スタックポインタ）を切り替えるだけで済むのですごく速い。ネイティブスレッドの実装によりますけど。

--- 1.8 のスタックを全部コピーするような実装がちょっとイマイチって事ですか？

ええ。

---なるほど

で、それをやらないためにはいくつか手段があるんですよ。 ただ、ポータビリティを取るとやっぱりネイティブスレッドしかないということですね。

---ふんふん、なるほど

ほんとはユーザーレベルでいろいろやればいいんですけど、 環境が限定されているのであれば。

スレッドの生成などの操作はユーザレベルなので速いんですよね。ネイティブスレッドだと遅いんですよ、たいていはシステムコールが走るから。 Java なんかだと「スレッド生成なんて最初にまとめてやるだけでしょ」って言ってもらえると思うんですが、これまで Ruby スレッドの生成って軽かったので、 Ruby ユーザはみんなどんどん作ってるんですよね。今後は、そういうスタイルを避けないと性能が上がらないと思います。

---並列性っていう話だと？

並列性についてはどっちもダメですね。 デュアルコアでも速くならないです。

「ネイティブスレッドにしたら勝手に並列化してくれるじゃん」って思うかもしれませんが、 勝手に並列に実行されると、世の中に大量にある拡張ライブラリが全然動かなくなっちゃうんですよ。 全然スレッドセーフに作られてないから。

---それは C のライブラリですか？

はい。

---もしかして、それを解決しているのが Giant Interpreter Lock？

そうです。 拡張ライブラリを保護するためにやっぱりスレッドを一つしか走らせないようにするために、ロックを使っています。Python とかだと Giant Interpreter Lock って言っていて、私は Giant VM Lock って呼んでいます。

論文で「それをなんとか並列化させましょう」という話は書いたんですけど、 完成度を上げるにはもっと時間が必要だと思います。

他の方法としては、例えば Ruby レベルで排他制御をかけてもらうようにする、という方針があります。つまり、排他制御の責任を Ruby プログラマに任せてしまう、ということですね。処理系レベルでは、何もフォローしないという方針です。ただ、この方法では、Ruby プログラマが排他制御を怠るとセグメンテーションフォールトみたいな事が起こってしまうことになります。この方法の実現は楽、というか、実際は何もしないので、すぐにでも実現できますが、Ruby 処理系としては、出来る限りセグメンテーションフォールトが起こらないようにしないといけない、っていう方針があるので、簡単にこっちの方針を選ぶべきではないと思っています。もしかしたら、起動時のオプションなんかで選べるようになると嬉しいかもしれませんね。自分で全部責任をとれます、って人のために。

セグメンテーションフォールトのような、致命的なエラーを避けるためには、すべての拡張ライブラリなどに適切な排他制御をかけなければならないんですよね。で、組み込みクラス、たとえば String や Array のコードを見てみると、それぞれ 5000 行とか、それくらいの C 言語のソースコードで構成されてます。これらのコードを全部、1 行 1 行見て、スレッドセーフにするっていうのは、ちょっとマンパワーがないと厳しいですよね。逆にマンパワーがあれば、なんとかなる話だとは思います。結局ボトルネックになるのって、文字列処理とか Regexp の処理とかになっちゃうので、そこがうまく並列化されないと結局速くならないんですよ。

---将来的にはどうなんですか？

そうですね、なので、マンパワーがあれば明るい未来があるのかもしれません。たとえば、こういう並列化対応作業に、人をつけてくれるような企業なんかがあれば、実はすぐに並列化が実現するかもしれません。でも、ちょっと望み薄ですかねぇ。

もっと将来的な話をすると、本当にスレッドが並列に動いて嬉しいのかっていうのがあります。例えば今 Erlang がすごい流行ってるじゃないですか。あれって、軽量スレッドとか言ってるけど、副作用がないからできる話で。そんな感じで、今考えているのは Ruby の VM を複数立ち上げるようにして、その VM 間でアイソレーションさせて、 そいつらが並列に走らせるような構成です。

--- MVM *3 でしたっけ？

*3Multitasking Virtual Machine

はい。実は今それを真面目にやろうとしています。

--- Erlang のような言語が注目されてるのは、結局、今のスレッドプログラミングモデルには、もうみんな耐え切れないということだと思っているのですが、笹田さんは、どう思われていますか?

実際、私もそれは使う側から見ても実装する側から見ても「共有スペースって嫌だよね」という気持ちはわかります。しかし、「じゃあ Erlang でやりたいですか？」聞かれたら、Erlang でプログラミングはあまりしたくないですね。あまり知らないので食わず嫌いですけど。やっぱり人間の頭ん中って副作用で考えるのは自然な処理っていうのはあると思うので、ではそこをどう折り合いを付けるのかなって事が重要な話なんだと思います。すごいありきたりな話で申し訳ないんですけど、副作用を認める部分とそうじゃない部分とで分けて、両者が自然と連携する形にするしかないのではないかと。Erlang みたいなところまでやっちゃうと、逆にやり辛いので、そこのバランスですよね。

Ruby って、領域は違いますけど、 例えば Lisp のいいところとか Smalltalk のいいところとか、いいとこどりしていて、なんとなくバランスよくまとめたっていうのがあるので、じゃあ並列に関してもそういうバランスがきっとあるので、そのうまいバランスを探っていければなぁとは思ってます。

---その辺はなにか考えられてるということですか？これから具体的にこういうふうにしたいとか？

とりあえず MVM 化すると、どんなふうにプログラムができるのか、どれくらい幸せになれるのか調べていきたいなと思っています。

プログラミング言語は自分に合ったものを

---Ruby 以外の言語って、どんなものを使われますか？

C を高校の頃からやってて、 大学で C++ を真面目にやり出して、 その頃は C++ で「STL すごい！」とか、「テンプレート万歳」とか思ってたんですけど…今は C++ 全然使えないですね。難しくて。

---すごい事になってますからね。

C++ をやるんだったら「もう Ruby でいいじゃん」みたいな。

テンプレートの細かいところとか、デストラクタの細かいところとかは、もう覚えてないですね。 Java はなんだかんだで、使う機会というか読む機会はあるので、使うこともあるんですが。Windows 用 GUI アプリケーションだったら C# を使います。スクリプト言語は、Ruby 以外は Perl や Python、PHP みたいなものは良く知らないので使えません。Haskell とか ML とかも、入門書を読むレベルなので使いこなせていません。

---言語自体にそんなにこだわりはないんですか？

そうですね。Ruby はいろんな意味で好きな言語なんですけど、人に言うときは「絶対、 Ruby がいいですよ！」とは勧めないようにはしています。やっぱ自分に合ったものって違うじゃないですか。人や状況によって適してる言語って違うと思うので、「絶対 Ruby いいよ！」 とは言えないです。

---そうですね。人だったり、状況だったり、いろいろありますからね。

ただ、学生や後輩などには、「かならず 1 個スクリプト言語を覚えて」という風には言うようにしています。なんでもいいからひとつ。やっぱり、何か簡単な作業をするために自分が使いこなせる言語があると便利ですから。ちょっとした集計プログラムを C で組み始める人がときどき居たんですが、「ほら、Perl だとこんだけで出来るよ」みたいに教えてあげたりします。

---なぜこんなこと聞いたかっていうと、まつもとさんは Ruby は好きなんだけど、すごく言語オタクというか、すごいいろんな言語が好きって感じじゃないですか。

あぁ、なるほど。私は他の言語は全然知らないです。まつもとさんほど。

Rubyist Magazine の「他言語探訪」っていう連載をまつもとさんに書いてもらってるんですけど、よくあんなに知ってるなぁとか思いながら、「なるほどこんなふうな、こんな言語があるんだ」と、私も楽しく読ませてもらってます。

---1996 年くらいですかね。たぶん Ruby がまだ全然メジャーじゃない頃、私、 fj *4 とかでまつもとさんや高木さんや久野さんがたくさんいろんな事を書いていて、「あぁ〜世の中にはすごい言語好きな人たちがたくさんいるんだなぁ」とずっと思ってたんですよ。

*4ネットニュースの１つ。様々なカテゴリで、議論が交わされている。

今、そういう場ってないですよね。この前 nifty の tty もクローズされちゃったって話あるし、fj も、もう。

---たぶんもうダメですね fj も。

じゃあ今ほんとにそういう議論したい人がどこでやってるかっていうと、今ないですよね、たぶん。そういう濃い話ができる所がだんだんなくなってますよね。いや、私が知らないだけかもしれないんですけど。

環境的にはすごい豊かにはなっていて、手を伸ばせばいろんなものがあるようになっていると思います。だけど、ほんとにコアなものに、なかなか出合えないっていう状況な気がします。そういう意味で Ruby の処理系開発させてもらってるってのは、すごく恵まれた環境にいると思っています。

オブジェクト指向へのこだわり

---オブジェクト指向ということにこだわりはあるんですか？お話を聞いていて、最初はそうだったのかもしれないですけど、今はそれほどこだわりないのかなぁと。

そうなんですよ。(苦笑) 最初、オブジェクトの広場とか読んで勉強してたんですけど、さっぱりわかんなくて…。(苦笑)

だけど、Ruby の処理系って C で書かれているけど、すごくオブジェクト指向を意識した形になってる…らしいです。 らしいですというのは、私は「そうだ」と断言できないんですけど。そういうコードを読んでいくと、「オブジェクト指向とはこんな風に作っていくのかな」というのはなんとなく分かってきたんだと思います。ただ、「これがオブジェクト指向だ！」と言えるぐらいには全然なってなくて「じゃ、これ設計して」って言われたら「えっ？」っていう風になっちゃう感じですね。 例えば、最初から UML 書いて設計したりってのは、私全然できなくて、とりあえずコード書いてみて、それからクラスにまとめていって全体像とそれぞれの関連を考える感じで…。こんなこと、ここで言ってもいいんだろうか。

Rubyist Magazine - るびま 〜RubyistのRubyist による、Rubyistとそうでない人のためのウェブ雑誌〜

---Rubyist Magazine はなぜ始められたんですか？

日本 Ruby の会というのが数年前に出来まして、そこでなんか活動したいってことで、有志が集まって作り始めました。当時は、Rails ブームの前だったこともあってか、あまりまとまった情報がなかったので、そういう場を作ろうって。Ruby の言語それ自体よりは、たとえばライブラリの使い方とか、Ruby 関連アプリケーションの使い方とか、そういう補助的な情報を集めることに重きをおいています。

そういえば、Rubyist Magazine でインタビューしてるのは、全くオージスさんの真似なんですよ。大学入った頃、一時期メーリングリスト等で情報を集めてる時があって、 その時オブジェクトの広場に興味を持って、メーリングリストを見て、「こんな人たち、あーこんな話があるんだ」って思ったんですね。で、Rubyist Magazine を始めるにあたって、「まぁとりあえずインタビューしときゃ見栄えがするだろ」と思っていました。

---はい

みんなも読みたいだろうし。 で、やってみたらやっぱりあんな風に綺麗に編集するのはエライ大変だという事を知りましたね。

---めちゃめちゃ大変ですよあれは。(笑)

我々の方はもうだらだらと普段通りの会話を続けているというのが売り、なんですけど。

---多分、スタイルの違いだと思うんですよ。るびまのインタビューの方は、その人の雰囲気とかを割と残したまま、続いていくっていう印象がありますよね。

そういって頂ければ。

しかし、不思議な話ですよね。まさかここで、そんなふうに参考にさせて頂いた者がインタビューして頂けるなんて。

プライベート

---好きな本、音楽、映画ってどんなものがありますか？

映画は、話題作とかテレビでやってたら観る程度ですね。

マンガや小説も、読みます。特に好きな何かってわけじゃないんですけど、あれば読みますね。 最近読んだ本だと、西尾維新さんとかグインサーガとか。あと、ブログは定期的に読みます。 Ruby Hotlinks っていう Ruby 関係者のアンテナサイトがあって、その人たちのブログとか。

あとは、SF ですかね。そういえば、るびまのインタビューとかしてると、みんな SF 好きなんですよね。

---濃い人多いですよね。 SF 好きっていうと。

ええ、私全然ついていけないんですよ。「あれば読む」程度だったので。で、ある時そういう話を日本 Ruby の会の会長の高橋さんにしたら、あの人はもうむちゃくちゃ SF の人で、「じゃ、これ読め！」ってガンって本をたくさん渡されて。お借りして、まだ読み切れてないんですけど。(笑)

音楽だと、たとえばゲーム音楽のようなのが好きです。一番好きなのはファイナルファンタジーの曲なんですが。作曲者の植松伸夫さんの音楽が好きなのと、とかそういうのを知る、聞くのが好きですね。

尊敬する人は、そのファイナルファンタジーの曲の作曲者の植松伸夫さんで…いい年してファンクラブとか入ってるんですけど。 私が中学校の頃に、「人生思うがまま」というエッセイを氏が出したことがあって。そのタイトルが私の座右の銘ですね。人生は思ったとおりのものになる、という。思いどおりになるって意味ではなくて、思ったもの勝ちというか、そんな意味です。

---休日はどういうふうに過ごされてますか？

寝てます。

---寝てます？(笑)

空いてれば寝てます。(笑) 「土日というリソースはすごい有限である」ってのをよく聞くんですけど、土日って勉強会が多いじゃないですか。

---多いですね。

勉強会、イベントがいっぱいあって、月 4 回それに出ると、もう半分つぶれるんですよね。

---はい。

じゃ残りはどうするかっていうと、寝たりとか、プログラミングしたり、やりたいゲームがあったら、ゲームやったり。

---趣味が Ruby 関係で、それで休日も消費されている感じなんですかね？ 勉強会に出られたり、プログラミングされてたり。

そうですね。例えば、一日まるまる空いてたら、そこでなんかプログラミングして、ノッてるといつの間にか次の日になってるという感じですか。

愛用のツール 〜 Emacs よりも xyzzy 〜

---愛用のツールってありますか？

xyzzy ですかね。

---おぉ〜。

Emacs は使えないんで私…。なんか細かいことやろうとすると、 Emacs って使い勝手がよくわからなくて。

あと IRC はたくさん使います。今 twitter *5 とか流行ってて。

*5米国の Obvious 社が提供しているオンラインサービスの一種

なんで流行ってるんだろうって不思議だったんですよ。 みなさん IRC を知らないからかなぁとか思ってるんですが。まぁ、インターフェースや根本的な思想とかが違うとは思うんですが。

そういえば、Ruby の開発って IRC で行われることがけっこうあるんですよ。

---そうなんですか？

バグレポートが来ると、まず IRC で議論が起こって、どう直すか話しますね。 「こんなパッチでどうですかね」っていう人がいたり、「どういう風に解決しようか」とか、 そんな話を IRC でしてたりとかするので。そういう意味で、私にとって IRC はすごく重要なツールですね。

---やっぱり、リアルタイムに話せて、記録も残るからですかね？

そうですね。

Ruby で nadoka っていうツールを作ったんですよ。 madoka という perl で書かれたソフトウェアが元々あったんですが、その Ruby clone です。IRC サーバがいて、プロキシ（nadoka）がいて、クライアントがいて、という構成。それを Ruby で作って、 いろんな機能が追加できるようにしました。例えば、グーグルの検索が IRC の画面でできるとか。

若手エンジニアへのアドバイス

---最後に、若手のエンジニアに対して何かアドバイスを頂けますか？

今、私も若手だというつもりなんですが…。(苦笑)

---いやいや、もっと若手に。(笑)

勉強会とか積極的に出るのがきっといいですよね。 例えば、学生で大学の中だけで閉じこもっちゃうと、そこに良いコミュニティがある場合はいいんですけど、 なかなかそういう機会ってないので、外に出ていろんな物を見るのが、いいんじゃないですかね。 すごくありきたりな話ですけど。

---重要だと思いますよ。企業にいてもやっぱり同じで。外に出ると、とてつもなくすごい人とかに出会って、自分の位置を感じたりできるのって、すごく大きいと思いますよ。

そうなんですよね。 今、なんだかんだいって Ruby でだいぶいろんな方と知り合いになれて大変よかったと思います。

ただ、逆にいうと、今ちょっと Ruby の中で閉じこもっちゃってる感じで「じゃそろそろ他のことでもやるか」というか、やらないといけないかなぁと思っています。いつまでも Ruby だけじゃだめだよね、と。

---なるほど。

何の因果か研究者をやっているので、職業柄、Ruby 以外のことも世界を広げていかないとまずいんですよね。今、模索中です。 同じ VM つながりで、最近バーチャルマシンモニタの Xen とかを調べています。低レベルな話には興味がもともとあったので、今そういうのを勉強していて、なんか面白いこと出来ないかなと思ってます。

---本日はありがとうございました。

こちらこそありがとうございました。