Rebuild A Podcast by Tatsuhiko Miyagawa. Talking about Tech, Software Development and Gadgets.

Mar 13
2013

5: Ruby 2.0 (まつもとゆきひろ)

収録時間: 35:12 | Download MP3 (22.0MB)

まつもとゆきひろさんをゲストに迎えて、Ruby 2.0 などについて話しました。

00:00

miyagawa: Ruby20周年おめでとうございます。

matz: ありがとうございます。もう20年も経っちゃいました(笑)。すごい、自分が年寄りになったような気分になるんですけど。20周年おめでとうと言われるたびに。

miyagawa: ああ、そうですね(笑)。この20年というのは、普通プログラミング言語の20周年とかいうと1.0のリリースとか、最初のリリースがベースになると思うんですけど、まつもとさんの場合は開発を始めた日とかなんですかね。

matz: 開発というか、名前を決めた日が1993年の2月24日で、それから数えて20年。言語の誕生日っていう話をすると、ソフトとか言語とかって形がないので、概念が生まれた日かなあ、と思って名前を決めた日にしているんですけど。

miyagawa: 名前を決めた日はまだコードは書き始めていなかったんですか。

matz: たぶんプロトタイプはあったんですけど、そのときには違う名前がついていたので(笑)。名前がついた日にRubyっていうイメージが生まれたんじゃないかなと。

miyagawa: これは何度も聞かれていると思うんですけど、Rubyっていうのは宝石の名前で、Perlとかそういうものからの連想みたいな感じですか。

matz: はい、まあ当時もPerlは当然あって、この業界ではすごい主流な言語だったので、その真似をして宝石の名前をつけようとしたんですけど、なかなかいい名前がなくてですね。ダイヤモンドとかサファイアとかみんな長いんですよ、コマンド名として使うには。それで、いろいろ石塚さんと話をしていたら、Rubyって短いしいいよね、みたいな話になったんですね。

あともう一つ、Coral(珊瑚)っていうのも候補にあったんですけど、結局Rubyのほうが綺麗な名前だっていうことでRubyにしたのが2月24日っていうことなんですけど。そうしたらですね、この間やったパーティのときに石塚さんが過去のログをひっくり返してくれてですね、Rubyって名前がCoralと一緒に出たのは23日じゃないかって。

miyagawa: (笑)

matz: もう20年経って明らかになったっていう、誕生日がずれてるという恐ろしい事実が。

miyagawa: ちょっとずれてた、みたいな。

matz: でも、「Rubyにしました」というメールは25日に来てるんですって。なので、23日以降〜25日以前に決まってると。

miyagawa: (笑)

matz: まあ、間をとって24日でいいかなって、今までどおり。

miyagawa: それは日本時間ですか。

matz: でしょうね。二人とも日本にいましたから。

miyagawa: Rubyっていう名前はコマンド名としても4文字でいいですし、よかったですよね。

matz: そうなんですよ。ただ、当時はあんまりGoogleとかなかったので、グーグラビリティが低いっていうことに気付かなかったんですけど。

miyagawa: じゃあ検索は"programming"とか、"Ruby-lang"とか付けないと。

matz: 付けないと、Rubyを見つけられなかった。とくに初期の頃はなかなか検索できなかったんですけど。最近は宝石よりも言語の方が先に出るようになりましたけど。

miyagawa: でもRubyって、一般的な名前だからかどうかわからないですけど、PerlとかPythonとか最近、商標でなんかトロールに引っかかったりしてるんですけど、Rubyはその辺、大丈夫な感じですかね。

matz: いちおう何年前だったか、ずいぶん前に、アメリカの弁護士さんとかでオープンソースに関心がある人がいて、ちょっと話す機会があったんですけど、商標を取って取れないことはないけど、とくにアメリカの商標や国際商標って維持するつもりがないと「お前キープするつもりがないだろ」って判断されてキャンセルになることがあるんですって。

何年か前にオーストラリアの人がLinuxっていう名前を使って商売するのをリーナスが訴えたという話がありましたよね。あれもリーナスがLinuxという商標を持っていて、勝手にやってる人を黙認しちゃうとリーナスはLinuxという商標を維持するつもりがないと判断されて取り上げられちゃう、キャンセルになっちゃうっていうことがあるので、まあオープンソースと商標について訴えることって馴染まない気もするんだけど、商標を維持しようとするとそうせざるを得ないところもあるんですって。

miyagawa: なるほど。

matz: で、Rubyっていうのは一般名詞といえば一般名詞だし、維持する努力をするのも無駄……無駄っていうか(笑)、あんまり嬉しくないし。それならまあ、いいかなみたいなことでRubyは放置ですね。Ruby on RailsはDHHが保持しているっていう話ですけど。

04:47

miyagawa: Rubyが20年っていうことで、Perlのことを調べたらPerl自体は25才で、Perl5が出たのは18年前みたいですね。だから多分まつもとさんがRubyっていう名前を付けたときは、まだPerl5は出てなかった。

matz: そうそう。噂だけは聞いてて、今度はオブジェクト指向機能が付くんだよ、みたいな話だったりとか、あとデータじゃないけど、どういう形だったかソースは提供されていたので、それを読んだ人がドキュメント書いてくれたりとかして見てましたけどね。で、ブレスとか言われて、これちょっとしんどいよなあとかって思った覚えはありますけど(笑)。

miyagawa: ちょっと後付け的なね、オブジェクト指向の。

matz: まあ、しょうがないっちゃしょうがないんですけどね。

miyagawa: ただぼくなんかはPerl5を何年もやってからPythonとかに行くと、若干馴染みが、blessとかはないですけど、考え方的にPythonとすごい似てるなっていうのがあって。馴染みやすかったんですけどね。

matz: Pythonのオブジェクト指向は...言われてみればPerl5に似ているかもしれないですね。

miyagawa: キーワードにselfを取るところとか。そこがすごく面白かったんですけど。

06:03

miyagawa: 先週もHerokuのWazaのカンファレンスに来られていましたけど、年間どれぐらい海外のカンファレンスとかに行ったりするんですか。

matz: 去年はちょっと多くて、海外に行ったのが9回? そのうちカンファレンスは……5回ぐらいカンファレンスだったんじゃないかな。

miyagawa: それ以外にも日本でもだいぶいろいろやられたりするんですよね。

matz: 講演は多いですね。本当にいろんなところで。去年のやつはまだ数えていないんですけど、一昨年は37回講演したんだったかな。

miyagawa: じゃあもう、ほぼ毎週って感じですね。

matz: ほぼ毎週。海外とかも入れると。

miyagawa: でも全部が全部開発者向けっていうわけでもない感じですよね。

matz: どっちかというと、あんまりテクニカルにレベルの高い話はしない・できないことが多いですね。わりとスーツを着た人の前で話すことも多いので。

miyagawa: 開発者に向けて話すほうが楽しいですか?

matz: 楽しいのは楽しいですけど、どのレベルにしたらいいのか悩ましいところで。せっかく聞きにきてくださったのに置いてけぼりなのもいけないかな、とか思ったりして。若干セーブしたりするときもあるんですけどね。

07:20

miyagawa: 20周年の当日に2.0を出したんですよね。

matz: はい、出していただきました。もうぼくはリリースマネージャーを他の人にお願いしちゃって、遠藤さんという方にお願いして。一番大変なところはみんなお願いしちゃったので。

miyagawa: でもなんか、こういう記念日とかに、これは狙って出しているわけですよね、当然。

matz: はいはい。

miyagawa: ちょうどその狙ったときに出せるっていうのはすごいなと思うんですけど。

matz: まあ1年……1年半以上前から仕込んでましたからね。

miyagawa: ああ、この日に2.0を出すって。

matz: この日に出すって言って。それでもですね、直前まで使ってくれない人がいてですねえ、直前にバグを見つけてくれたりすると泣きそうになるんですけど。ちゃんと言ってたじゃん! って。

miyagawa: でも2.0は、1.9とかと比べるとだいぶスムーズだった印象があるんですけど。

matz: まあ、変更はおとなしかったので。1.8と1.9の間があまりにも凶悪で、エンコーディングは入れるはヴァーチャルマシンは置き換えるはですね、すごい凶悪な変更をしたんですけど。まあ本来ならあれが2.0と呼ばれるべきだった……ということはみんなが思っているんですけど。

miyagawa: (笑)

matz: それに比べるとまあ、おとなしい。変更も互換性があるものがほとんどですし。機能追加もいくつかはあるんですけど、それも使わなければ関係ないみたいな部分なので。わりと内容的にはおとなしいヴァージョンでしたね。

miyagawa: それはやっぱり、1.9のときにちょっと懲りたというか。

matz: そうなんですよ。まあ、もうあと5年ぐらいはあんなでかいのはやりたくないよねっていう。

miyagawa: でも1.9が出たのは5年前ですよね。

matz: そう、だから1.9が出てから10年は同じレベルを維持したいなと。

miyagawa: なるほど。

09:08

miyagawa: やっぱり1.8から1.9……ぼくが今働いている会社はCOOKPADなんですけど、先週1.9に置き換わったんですよ。

matz: ああ、なんかGithubの人たちも最近変わったとか言ってましたね。

miyagawa: 1.8.7のRuby Enterprise Editionをずっと使っていて、やっぱりコードベースがものすごい大きいので、エンコーディング周りとかいろいろ。時間かかったみたいですね。

matz: そうですね。ご迷惑をかけます。

miyagawa: でも1.9で相当速くなって、パフォーマンス的に。

matz: ええもう、ささださんのおかげで。

miyagawa: で、2.0はさらに速いわけですよね。

matz: そうですね、はい。まあ、さらに速いって言っても、1.8と1.9の間に比べればVirtual Machineを置き換えたわけではないので劇的ではないんですけど、変更したところで一番効果が大きかったのは、Gemをたくさんロードしていくことが多いですよね、Railsのアプリケーションで。で、Gemが多くなると、requireするときにパスを検索しに行って、そのGem一個ごとにロードパスのエントリが増えるわけですよ。それを全回グルグル回していくので、ロードのためのパスの検索がすごく遅くなっていたんですよ。で、そこをだいぶ高速化したのが、じつはRailsアプリケーションの起動にすごい効いてきてたらしくて。なんか多くの人たちがですね、おお2.0速い! っておっしゃるところの原因のほぼ全部がそこなんじゃないかなっていう。

miyagawa: じゃあランタイムが速くなったのも多少はあるけど、起動時が一番あると。

matz: そうですね、たとえば、メソッド呼び出しのためのスタックの情報を減らして、メモリを削減したとか、それにともなってスピードも上がったみたいなことも当然いくつもあるんですけど、実際に効いているのはそういう案外つまらないところで(笑)。

miyagawa: (笑)。でも起動が速くなるのはすごく嬉しいですよね。

matz: そうですね、デベロップメント・モードだと上げたり下げたりすることも多いので。

miyagawa: Rails使ってるとテストの起動がものすごい遅いので、永続化するようなモードとかで立ち上げると今度は逆にコードがちゃんとリロードされなかったりとか、どうでもいいことに時間を使ってしまいがちなので、起動が速くなるのはすごい嬉しいですよね。

matz: そういうこともあるのかな、過去のリリースだとすごいみんなから叩かれてですね、新しいバージョンは使えねえ、みたいなことを言われてて不幸だったんですけど、2.0はどちらかと言うと「おめでとう!」と言われることが多くてですね。おめでとう・ありがとう・良くなったよ、みたいなことを言われてですね。

miyagawa: みんな幸せな感じで。

matz: 今までリリース作業ってみんな気が重かったんですけど。出すとまたみんなに文句を言われて……って。今回も、たとえば1.9で我々がバグとみなした挙動に依存してた方とかいらっしゃるので、ここが動かないんだけど、みたいなことも若干ありますけど、全体的には、「2.0使ったよ」って。なんか気分がいいし速いし、ちょっと速くなった気はするし、とか。すごくポジティブに受け取ってもらえるヴァージョンで。だからWAZAのプレゼンテーションでも "The happiest release ever" とか言って。

miyagawa: 言ってましたね。

matz: だってもう、リリース直後にどこかのカンファレンスに行って、「よかったよ!」って言われるなんて本当に経験がなくてですね。我々どんだけ不幸なんだっていう(笑)。

miyagawa: おめでとう、だけど……みたいな。

matz: おめでとうだけど、あれは駄目だよね! みたいな(笑)、そんなことばっかりで。過去だと1.8.7になってRailsが動かねえ、とか言ってすごい大騒ぎになったりですね、みんなで1.8.6にとどまろう、みたいな運動を始める人がいたりですね。あとは1.9出たけど移行がめんどくさくて何年も放置っていうのとか。まあ、しょうがないなとは思うんですけど。

miyagawa: やっぱり開発のときでも、Railsとか、そういうメジャーのアプリが動くかどうかは、CIみたいのを走らせたりとかやっている感じなんですかね。

matz: 最近はそうですね。その1.8.7で大トラブルがあったとき以降は。元々はコア開発者の中にWebアプリケーションのデベロッパーがいなくてですね。Webに関心がない人の集まりなので。

miyagawa: (笑)

matz: で、その1.8系のときなんかだと、Railsが合わせろよぐらいの態度だったんですけど。

miyagawa: (笑)

matz: さすがに、Railsの重要性があまりにも高まってきたので、両方のコミッタの人たちも増えましたし、Railsがもうこれじゃいけないと思って、新しいヴァージョンでCI回してくれたりとかしていますし、昔に比べたらずいぶん改善されましたね。まあ、我々の前がダメすぎたんですけど。

14:08

miyagawa: やっぱりRubyのコアのコミュニティの開発者の方はほとんど、日本人の方が多くて、Rails側は、まあ、そうじゃない方が昔は多かったと思うんですけど、最近はその辺の、垣根というのもおかしいんですけど、だいぶ両方のコミッタの方も増えたりして。

matz: そうですね……まあただ、Rubyのコアの部分というか、言語を決めるところに関わっている人っていうのは、言語を決める部分の実装に関わった人はほとんど日本人っていうのは変わらないですね。だから密室みたいなことを時々言われるんですけど。

miyagawa: (笑)

matz: それでも、たとえばJRubyの人たちとか、Rubiniusの人たちから、あいつら勝手に、と言われることのないように、月に一回ぐらいのペースでインプリメンターズ・ミーティングみたいなことをIRCでやったりしているんですけど。アジェンダ決めて、あの機能はウチでは実装できないんでやめてほしいんだけど、みたいなことをですね、月に一回ぐらいやっていますね。

miyagawa: 2.0でエクスペリメンタルになっているRefinementsっていうのも、そういうものの一つなんですかね。

matz: そうですね、そういう流れですね。Refinementsの場合は、去年のRubyカンファレンスで直接会う機会があって、そこでface to faceで議論しましたけど、まあその後も全然まとまらなくてですね。2月のリリース日はどんどん近づくし仕様は決まらないしで、すごいジレンマだったんですけど。

miyagawa: あとちょっと思ったのは、この間のWazaのセッションでAaronが話していたのが、Rails4に、Rails Queueとか、いくつか機能が入るはずだったんだけど、Aaronがプレビューで、なんかいろんなカンファレンスとかでプレビューを発表すると、仕様について細かい突っ込みが入って、決まってないからナシにしようって潰れるっていう話があって。

matz: ありましたね(笑)。

miyagawa: Rubyの場合も、Refinementsとかってモンキーパッチをレキシカルにするみたいなちょっとキャッチーな雰囲気があったので、前から話題になってたりとかすると、この仕様はどういうことなんだろうって、突っ込みが入る余地が大きくなったりするのかなとか思ったんですけど。

matz: そうですねえ。Refinementそのものは、パッチというか、ずいぶん前からTracの方には入っていたんですけど、誰も試さないので2.0のかなりギリギリになるまで放置されていて、まあそんなものかなって思っていたんですけど、JRubyの人たちが、2.0が出るならRefinementも入れなきゃって仕様を調べ始めたらこんなケースが出てきたとかですね、これ実装したらすごくパフォーマンスが落ちるんだけど、みたいな感じでけっこう揉めたんですね。

miyagawa: 他に言語的な部分の変更は、キーワード引数っていうのと、Module#prepend?

matz: はいはい、そうですね。コアに関わるのはそんな感じですかね。

miyagawa: キーワード引数は、Pythonを2年ぐらいやっていたのですごく馴染みがある感じなんですけど。大体そんな感じと思っていいんですよね。

matz: Pythonと違うのは、Pythonってオプショナル引数とキーワード引数の区別がないんですよね。だからすべてのオプショナル引数は名前付けても呼べるって感じなんですけど、Rubyの場合は末尾にキーワードのハッシュを渡すと、それを適当に解釈してくれるっていう感じでオプショナル引数とキーワード引数は完璧に分かれています。

miyagawa: なるほど。

matz: だからまあ、その分プリミティブっていうか(笑)、そういう感じですね。良い点って言えば、何を渡せるかはっきりわかるっていうのは良い点ですけど、Pythonほどエレガントではないかもしれないですね。

miyagawa: プリペンドのところかなんかで、LispとかC#と同じようなものがあるけど、理解ができないというか難しいからシンプルにした、みたいな話があったような気がしたんですが、やっぱりそういうシンプルさっていうのが大事ですかね。

matz: 機能の話をするとですね、今回の2.0のスライドを見た人の中でも、Lispならそんなの20年前からできるぞみたいな話があって、まさにそのとおりなんですけど(笑)、Rubyの良さってじつは新しいものを提供するっていうよりも、LispとかSmalltalkとかに20年、30年前からあったものを、普通の人に手が届くようにリパッケージしたっていうことがひとつの売りだと思っているので、そういう点から言うと、Common Lispの人たちが1980年代から持っていたメソッド・コンビネーションっていう形を普通の人にも使える、わかる形でリパッケージしたものがモジュール・プリペンドっていうふうに言ったらいいんじゃないかな、と個人的には思っているんですけど。

18:50

miyagawa: なんか2.0の話を聞いていると、さっきも1.9が2.0であるべきだったという話をされていましたけど、1.10的な雰囲気なのかなっていうのもちょっと思ったんですけど。

matz: まあ、1.9が1.9なら2.0は1.10的なポジションでしょうね、きっとね。

miyagawa: 2ケタ目に2ケタの数字を使わないのはポリシーですか?

matz: はい。オールドタイプなので、lsで見たときにずれるのがすごい嫌なんですよ。1.10.2って並ぶじゃないですか。

miyagawa: なりますね。

matz: あれがけっこう嫌いで。今どきそんなの関係ないよねっていう気もしないではないんですけど。

miyagawa: でもそういう理由で、1.9.2から1.9.3がメジャーリリースみたいな感じですよね。

matz: そうなんですよ。バージョンというリソースをすごいチビチビ使ってきたんですよね。でもちょっと心を入れ替えたので、もうちょっとドラスティックに消費してもいいかなっていう気にはなってきているんですけど。

miyagawa: じゃあもう、2.1もそう遠くない未来には出るって感じなんですか。

matz: そうですねえ、パーティーの直前に開発者会議をしたんですけど、そのときには、もう今年のクリスマスには2.1出しちゃおうぜみたいな話をしていて。それは今までに比べるとずいぶん早いなあっていう。

miyagawa: 今まで5年かかってますもんね。

matz: そうなんですよ。だんだん遅くなっていて、2.0の手前でサチってるんじゃないかっていう。

miyagawa: (笑)

matz: TeXとかのヴァージョンがそうですよね。3.141592..とかってπにだんだん近づいていくっていう(笑)。そういう感じで1.99..とかになっていくんじゃないのみたいにからかわれたんですけど。で、ちょっと20周年記念で心を入れ替えてですね、まあ折々にバージョン上げていこうと今は思ってるんですけど。

miyagawa: 前のポッドキャストのときに、伊藤直也さんと話をしたんですけど、Perlも似たような話があって。Perlは6を越えることはできないので、5の中で上げていくしかなくて。

matz: 5.10の次は5.11になるんですかね。

miyagawa: そうなんですよ。もう5.16なんですよね。今はYearly リリースになっていて、奇数番が開発版で偶数が安定版っていう感じなので、次は5.18なんですよ。だけど、開発コミュニティは6を使えないから、7にしちゃおうみたいな。

matz: (笑)。飛び越しちゃう。

miyagawa: そうそう。そういう話が出たりして、ちょっと荒れてるんですけど。

matz: じゃあ本家Perl的には6は永久欠番っていう感じで。

miyagawa: そうですね。まあ、ラリーのものなので。Perl6は。

matz: ねえ。それは手が出ないよね。Perl6は「Perl6」まででひとつの言語名なんですね。

miyagawa: そういう感じに今はなっています。「Perl5」の「Ver.16」っていう感じで。

matz: 永遠のペイパーウェアがだんだん片付いていくので、Ruby2とかね。Python3000とかだんだん片付いてきたので。次はPerl6だ、とか。

miyagawa: たしかに。順番的にはそうですね。

21:51

miyagawa: この間サンフランシスコに来られていて。この辺のスタートアップはすごくRubyを使っている会社が増えているというか、もうほとんどコモディティになっているような感じなんですけど。

matz: まあ、RubyってRailsだと思うけど、Railsの良さって、生産性とか人材供給能力とか、キャッチーなところがすごく評価されてるっていう点では嬉しいと思うんですけど、誰かが揶揄しているのは、Webの新しいJavaになっているみたいなことを言われて。

miyagawa: (笑)

matz: それはたしかにそう言えないこともないかな、とか。悩ましいところではありますよね。コモディティになるとつまらなくなっちゃうところもあるので、Rubyとしてはコモディティに落ち込んでつまらないところで停滞してしまう、みたいなことは避けたいので、時々燃料を投下していかないといけないんだろうなとは思っているんですけど。

miyagawa: ただRailsコミュニティも、4.0が次に出るみたいな感じで開発は止まっていないですからね。

matz: そうなんですよ。Javaが、ぼくはあまり詳しくないですけど、J2EEが何とかみたいな、変化しないみたいな、だから技術的には停滞して、あるいは安定して、というふうな指向を目指すのとは違う形で寄与していければなとは思っているんですけど。

miyagawa: 本当にぼくの住んでいる近くだけでも、SquareとかAirbnbとかGithubとかTwitterとか、エンジニアが何百人規模の大きな会社でRubyがメインで使われてますもんね。

matz: そうですねえ。

miyagawa: 日本のスタートアップとか大きい会社だと、やっぱりまだPerlとかPHPとかが幅を利かせているような感じなんですかね。

matz: 中がどうなっているかとか、なかなか言わないようなところも多いので、はっきりとはわからないんですけど、でもクックパッドがあれだけ目立っちゃうっていうことは、他はPerlやPHPで頑張ってらっしゃるところもあるっていうことだと思うんですよね。

Ruby技術者の移動とかを見ていると、どうしてもそういう形でCOOKPADに集まっているように見えるっていうのが、逆に言うと、他にRubyのエンジニアをわーっと集める求心力のある、あるいはお金に余裕のある企業が立ち上がっていないっていうことを示してもいると思うんですね。

まあ、今の東京っていうのは、ベンチャーイズムといってもいいぐらいにたくさんスタートアップがあるんですけど、そういう人たちの話を聞くとたいがいRubyを使っているんですよ。だけど、それがサービスとして立ち上がってどうこう、という話にはまだなかなかならないんですね。まあ、アメリカでも事情はたぶん同じだと思うんですけど、やっぱりスタートアップって本当にものすごい数あって、コワーキング・スペースなんていうとものすごい数のスタートアップの人たちがいるんですけど、たとえばSquareとかTwitterとか、そういうクラスになるのはその中の一握りで。というのは、まあ当然といえば当然なんですけど。

miyagawa: まあ、安定を求めるところではないですもんね、使われている場所が。やっぱりそれはRubyという言語の、あるいはRailsとかのコミュニティの方向性と合っているのかもしれないですけどね。

matz: まあね、銀行の勘定系をRubyで、なんて話にはならないですからね。……「ならないですからね」なんて言うとだいたい何年後かになってドキドキするんだけど(笑)。

miyagawa: まあJRubyとかで、Javaとの親和性もあります、みたいな感じで。

matz: 一部そういうところは出るかもしれないですね。ほとんどJavaで作っていて、コントロール・パネルにJRubyなんていうことになるかもしれませんけど。

miyagawa: なんかSquareとかも、基本はJRubyで書かれているみたいですけどね。

matz: らしいですね。ちょっと嬉しいような寂しいような(笑)。

miyagawa: やっぱりMRIを使ってほしいですか。

matz: んーと、まあ両面あって。MRIの、とくにマルチコアに対する欠点って言ったらいいのかな、充分にマルチコアは活用していないので、たとえばプロジェクトでマルチコアを使わなきゃいけないっていうときに、そういう弱点? 欠点? が言語そのものの発展を疎外するのは嫌なので、そういう意味ではJRubyがあってくれることは嬉しいんですけど、逆に言うと、我々MRI/CRubyのインプリメンター側からすると、我々のテクノロジーが劣っていることを意味しているので、それはちょっと寂しいということですね。

miyagawa: それはまつもとさんの、Rubyという言語の仕様策定者という面と、CRubyの開発者という面がコンフリクトしているという。

matz: そうそう。昔は区別はなかったんだけど、最近はそうでもないので、言語デザイナーとしては、Rubyという言語がどんな処理系であれいろんなところに取り込まれていって、いろんなエンジニアをハッピーにするのに役立っているって聞くのはものすごく嬉しいんだけど、CRubyのインプリメーテーションに関わっているコアチームの一員としては、まあ最近はあんまり自分で開発することは減っているんだけど(笑)、コアチームの一員としては、技術的に劣っているという事実を突きつけられてですね、内心鬱々としたものが……。

miyagawa: (笑)

matz: で、またJRubyのチームがですね、JVMの出来がいいので、「JVMを使うとこんなにいい!」みたいなことを言うわけですね。自分がやってるわけじゃないじゃん! みたいなことを思ったりもするんですけど。

miyagawa: (笑)。Rubyの言語とJVMのいいとこどりみたいな。

matz: そうそう。だから彼らはわりとハッピーな立場にあるというか……まあ、ハッピーじゃないところもたくさんあるんですけど。JRubyのチームってスピード狂なので、ものすごいRubyを速くしたいんですけど、Rubyってそういう最適化するのには向かない言語なので。

miyagawa: (笑)

matz: お前なんでこんなことしてるんだよ〜みたいなことを時々愚痴られたりするんですけど。

27:40

miyagawa: この間出ていたTopazっていうのは、RPythonを使った実装ですけど、あれはどう思いますか?

matz: まだ出たばかりなので、過去にもたとえば、Parrotで動くRubyの処理系を作ってみました、とかそういうことをしてくださった方はたくさんいらっしゃるんですけど、何年かすると消えてなくなってしまうっていうことも多いんですね。過去に。だからそういうことを考えると、安定的にそういうものが存在し続ける、Topazが今後も存在し続けるか、たとえばJRubyのような主要な別実装のひとつになるかはまだぜんぜん未知数ですけども、ただ、新しいテクノロジーが出てきて、ああこういうこともできるんだって示すっていうことがすごく大事なことだと思うので、そういう意味では、Topazも含めて応援したいですね。

miyagawa: 20年間Rubyの開発を、まあRubyにかぎらずですけど、ひとつのソフトウェアを開発し続けるってすごいことだなって思うんですけど。その秘訣はどういうことなんですかね。

matz: 何なんでしょうね。ただ、私の一番興味のあるプログラミング言語っていうジャンルが、そういう息の長いジャンルだった、ということが一番大きいんじゃないかなと思うんですよ。言語の世界だと、10年や20年はまだまだ鼻たれ小僧みたいなもので(笑)。

miyagawa: (笑)

matz: なんか「俺たち20年も頑張ってきたぜ」とか言ってると、Lispおじさんがですね、「お前らまだまだ全然できてねえ」みたいなことを言ってきそうな感じなので。そうしてみるとこのジャンルはそういう、息が長いものだったっていうのがすごくあったと思うんですよ。

幸いRubyっていうのは、いろんな面で求心力を発揮できたということが大きくて、オープンソースって結局、コミュニティっていうか人間関係……? っていうのかな、まあとにかく求心力っていうのが大きなキーワードになると思うんですよ。誰かが関心をもって関わっててくれるからこそ、進歩・成長・発展するみたいなところがあると思うので。

Rubyっていうのは最初にネットニューズに公開した1995年から今まで、いろんな方に注目してもらえて、いろんな人が関わってきてくれた、関わり続けてきてくれたっていうことが続けられてきた理由なんじゃないかなと思うんですよ。一人でコツコツやっていたら全然できないと思うので(笑)。

miyagawa: 難しいですよね。

matz: それは、Rubyという言語を作りました、公開しましたって言ったらメールくれた人がいて、メーリングリストができました、そこで議論したら言語が良くなりました、別実装作ってくれる人がいました、カンファレンスしました、本を書きました、とかそういういろんなアクティビティがRubyを中心に起きていて、それに啓発されてやる気が出たりとか、それに啓発されて新しいアイディアが出たりとか、改善されてきたりとか、あとはRailsみたいな、Rubyそのものを食っちゃうような規模の大きなアクティビティが出たりですね、そういうことが次々と起きてきたことが20年続いたんじゃないかなって。これで5年ぐらい、いやあ、なんか俺たち新しい人が入らないし、つまらないよねえ、みたいなことが続いたら駄目だったんじゃないかって。

Perl6が始まったときも似たような話があったそうですよね。伝聞ですけど、こんなふうに俺たち停滞していたらダメだ! って言ってマグカップかなんかを投げたとか。

miyagawa: マグカップを壁に投げつけてっていう。

matz: で、割れたっていう有名な話がありましたよね。あれってたぶん似たようなことなんじゃないかなって。まあ、その後Perl6はまだ出てこないんですけど(笑)。

miyagawa: そうですね(笑)。また去年それで、マグカップを投げるっていうイベントをやったらしいですよ。

matz: (笑)。今度は意図的に?

miyagawa: そう。Perl5と6の開発者が、どこだったかな……オーストリアかどこかの、パールっていう町に集まって。

matz: そんな町があるの(笑)。

miyagawa: みんなでマグカップを壁に投げるっていうイベントをやったらしいです。

32:00

miyagawa: Ruby2.0は、ある程度完成されたリリースだ、みたいな記事を読んだ記憶があるんですけど。

matz: リリースとして完成したっていうか、プログラミング言語の機能として、今までとの互換性をあまり広く壊さないで追加できるものはかなり追加したかなあ、と。よその言語で取り込みたいなって機能があったとしても、それをRubyに持ってきたって、RubyがRubyじゃなくなっちゃうみたいなものも多くて、Rubyを壊さない範囲で取り込めるものに関しては、思いつくものの内のほとんどは入ったかなっていうニュアンスのことをですね、いつだっけ、先月のデブサミっていうイベントのときに話したんですけど。そうしたら、そのセッションのレポートの見出しに取り上げられちゃって。本人としてはそこまで重要なセリフを言ったつもりじゃなかったんですけど。

miyagawa: それだけ読むと、もう完成したからそれ以上進歩しないっていうイメージがありますよね。

matz: そうそう。そういう捉えられ方をしてですね。ちょっと違うかなあ、みたいな。

miyagawa: まあ、これからも変わっていくというか、進化していくというか。

matz: そうですね。いろいろやりたいこともまだまだありますし、文法レベルとか言語そのもののレベルで変わっていくことはあんまりたくさんはないと思うんですけど、実装をもっと良くするとか、速くする、信頼性を高めるとかではやることはたくさんあると思いますし、もっと使い勝手を良くするためにメソッドをどんどん追加していくとか、そういうことも当然あると思いますね。

miyagawa: ぼくはPerlっていう言語を今までメインで使っていて、今もそうなんですけど、そういうところから見ると、1.9.2とか1.9.3とかいうレベルでガーベッジコレクションの実装をバンと変えるみたいなのが、すごいドラスティックだなと思うんですけど。

matz: まあ、我々は止まると死んでしまうので。

miyagawa: (笑)

matz: Javaとかをやっている人たちは、いや安定こそ、とおっしゃる人もやっぱり多くて、それはたしかに一理あるんですけど、でもその安定性を求めるよりは、死なないことの方が大事だと思うので。

miyagawa: 安定イコール死ですもんね。逆に言うと。

matz: オープンソースにとってはそうですよね。ビジネスにとってはそうじゃないんだけど。ビジネスだと、Java自体は全然大事じゃなくて、それはバリューではなくて、Javaの上に作るビジネス・ロジックだったりアプリケーションがバリューなわけですね。でもRubyコミュニティはRubyしかバリューがないので(笑)、その上で勝手にやってください、と。

miyagawa: でもなんか使っている人がそういう、Rubyを使うことすなわち価値っていうのもあるじゃないですか。

matz: そうなんですよ。もちろん、そこで過去にJavaをやってきた方から、Rubyに変わりました、安定性がないのはどういうことだ、みたいに詰め寄られたりとかっていうことも当然あるんですけど、そこはですね、いや我々はこういうものだから、と突っぱねていかなければいけないなと。大人げないコミュニティであり続けなければいけないなって。

miyagawa: いいですね。

matz: 大人げないことがぼくのテーマのひとつなので。


Transcribed by Hiroaki Kadomatsu http://d.hatena.ne.jp/note103/

Download Transcript