新しいことをやるためにはエネルギーがいる

菅澤英司氏(以下、菅澤):言語開発者のまつもとさんが今もプログラミングをされているということで、どうしているのかがすごく気になっていまして。例えば、設計は頭の中で考えてから作るのか、書きながら進んでいくのかとか。

まつもとゆきひろ氏(以下、まつもと):段階にもよるんですけど、私のふだんのフェーズはどちらかと言うと、バグを直したり、部分的な改善をしたりがほとんどなんですよ。バグを直すためのプログラムが、期待していない動きをするとき、期待する動きに直すにはどうしたらいいだろうかと考えて直すという感じです。

問題を修正するのにかかる時間も短いと5分、長いと1時間ぐらいかかっちゃうので、そういう感じで開発を繰り返すことがほとんどですね。

菅澤:なるほど。

まつもと:例えば新しい機能を作りましょう、という場合、それをどうやって実装するかを考えながらやることが多いんですけど、その時点で文章を書くタイプではなくて、考えをまとめるときに紙に書きたいタイプです。

菅澤:紙のノートに設計的な言語を。

まつもと:考えをまとめるときはそうですね。

菅澤:ゼロから大きなものを作るということはふだんはあまりないんですか?

まつもと:プログラミングとしてはあまりないですね。

菅澤:そのメインのプログラミングは、Rubyのアップデートが一番多いんですか?

まつもと:そうですね。プログラマーとしての活動は、Rubyを修正するということが多いですね。

菅澤:例えば、これからまったく新しいことをやるとしたらどういうことをされたいですか?

まつもと:まったく新しいことだと、何かのかたちのデータベースを作りたいなと思っています。

菅澤:やっぱりRubyのことでけっこう忙しいんですね。

まつもと:結局、そういう(新しいことをやる)活動はお客さんがいるわけでもないじゃないですか。誰からも期待されていないんですよね。そういうのを新しく始めるのは、ものすごいエネルギーがいるんですよ。

池澤あやか氏(以下、池澤):Rubyとは別の新しい言語を作られていましたよね。

まつもと:そうなんです。あれは雑誌の連載のテーマとしてやり始めたもので、『言語のしくみ』というタイトルで本にまとめたんですけど、雑誌の原稿は毎月締め切りがくるので(笑)。連載が終わったら開発が止まってしまってですね。

1年エネルギーを貯めて3週間でメールリーダーを開発

まつもと:あとは自分で作ったものはメールリーダー。メールを読むソフトを作るのが趣味なんですけど、2004年にGmailが出ました。Gmailはすごく画期的で、使いやすそうだったんですけど、当時はどこにでもインターネットがあるという感じではなかったので、例えば出張中にメールが読めないというのは死活問題だったんです。だから、手元にGmailみたいなソフトがあればいいんじゃない? と思って。

菅澤:なるほど。

まつもと:それで、メールリーダーを作ろうと思いました。だけどやっぱり新しいことをするにはエネルギーがいるんですよね。

池澤:そうですよね。

まつもと:1年ぐらいエネルギーを溜めて、「やるか!」と3週間ぐらいでできたんですよね。まだそれを使っているます。

菅澤:すごいですね。

池澤:すごい。

まつもと:みなさんからのメールはそのメールリーダーに全部入っています。

(一同笑)

やることを明確にすること・完成までモチベーションを保つことが重要

菅澤:プログラミングをうまく速く作るためにはどうすればいいと思いますか?。

まつもと:私、プログラマーとして名はあるんですけど、実際はあまり優秀じゃないと思っているんですよ。

池澤:え!? 本当ですか?

菅澤:そうなんですか?

まつもと:例えばRuby1.8と1.9の2つのバージョンはパフォーマンスが何倍も違うというのを聞いたことがありますか? 1.9以降のRubyはめちゃくちゃ速くなったんですよ。1.8までは僕が作っていたんです。つまり他の人に任せたら…

菅澤:一気に速くなった。

(一同笑)

菅澤:すごい奴がいますからね。

まつもと:何もないところから作ったのは良かったんだけど、そこから先、性能を改善するところに至っては、自分は大したことないなと思って。

(一同笑)

菅澤:謙虚ですね。すごいプログラマーというのはどこがすごいのでしょうか?

まつもと:私は、他の人ができないことをする人がすごいんじゃないかなと思っています。例えば、同じような動きをするプログラムでも、その人がやると10倍ぐらい速くなる、ということが実際にあります。そういうことを達成できる人がすごいプログラマーじゃないかなと思っていますね。

菅澤:初心者のエンジニアがこの番組を見ていたり聞いたりしているんですけど、どうしたら上達しますか?

まつもと:プログラミングは難しいといえば難しいんですけど、ほとんどの場合は、人類の能力を超えるほど難しくはないんですよ。やることが明確になっていること、(プログラミングが)動くところまでモチベーションを継続させることの2点が重要じゃないかなと思うんですね。

2020年12月Ruby3.0をリリース予定

池澤:Rubyもどんどんバージョンを重ねていっていて、最近はRuby3.0の話も聞くようになったんですけど。

まつもと:Ruby3.0というのは2020年……。本当はオリンピックイヤーにと言っていたんですけど。

池澤:オリンピックも延期されました。

まつもと:今のところは、Ruby3.0は2020年の12月に出す予定です。最新の正式リリースのバージョンは2.7なんですけど、それをちょっと飛ばして3.0を出そうかなと。

菅澤:25年間ずっとやってきて、3個目は大型のバージョンアップということですよね。

池澤:そうですよね! ドキドキしています!

まつもと:だけど、大型のバージョンアップってけっこう危険なんですよね。他の言語で、大きなバージョンアップをしたときにギャップを作っちゃって大変だったというものがいくつかあるんですよ。例えばPythonはバージョン2とバージョン3でだいぶ挙動が変わったんですね。コミュニティがバージョン2を諦めて、3.0に完全移行するまでに15年かかったんですよ。

菅澤:15年!?

池澤:15年はすごい! Python2系と3系はだいぶ違いますもんね。

まつもと:そうするとコミュニティが分断されちゃうんです。他にもPerlはPerl5のあとにPerl6を出そうという話になったんだけど、(実際は)ぜんぜん違う言語になっちゃって、ほとんどの人がPerl6に移行しなかったんです。なので後にRakuという日本語みたいな名前の独立した言語に分岐しちゃったんですよ。

大きなバージョンアップはけっこう危険だなと思って、Rubyの場合は2.0で大きくするのは止めて、1.8と1.9の間にやったんですよ。するとバージョンが下がったという。

(一同笑)

まつもと:3.0をこういうものをします、と5年ぐらい前から言っていて、その機能を実現するために2.xを間に入れていたんですね。今年出る3.0は節目というか、こういう改善が一段落しましたよという名前だけのイメージでいるんですよ。今までのバージョンを使っている人たちが、そのまま3.0を使えるというのが我々の方針ではありますね。

池澤:じゃあ。

菅澤:それは安心。

まつもと:実際に何があるかよくわからないので、いつまでも2.7を使い続けないといけません、という状態にはならないようにしようと思っています。 菅澤:本当はこれも入れたかった! みたいなものはありますか?

まつもと:3.0でこれをやります、と宣言したものについては曲がりなりにも入れているのでそういうものはないです。3.0のあとに、3.1とか3.2とかにバージョンを進めていく間に改善をしていって、最初は使い物にならないと言われるかもしれないけど、それをどんどん良くしていくという予定です。

先にやることを宣言をして自分を追い込む

菅澤:新しいバージョンをどうしようというのはどう決まっていくんですか?

まつもと:僕のノリですね。

池澤:ノリ!?

(一同笑)

菅澤:そこはノリなんですね。エネルギーが溜まると、そこにいくぞ! みたいな。

まつもと:そうなんですよ。新しいものを作るのは大変なので。コミュニティの中で、違う意味でイベントドリブンプログラミングとよく言われています。イベントやカンファレンスがあるじゃないですか?

菅澤:リアルイベントのやつだ(笑)。

まつもと:そう、カンファレンスで「これやります!」とぶちまけるとやらなくちゃいけなくなるので。自分を追い込むという。

(一同笑)

池澤:Ruby3.0が発表されたときに「けっこう速くなるぞ!」みたいなことを言っていたような気がするんですけど、それもイベントドリブン……。

まつもと:それも自分を追い込むために(笑)。

菅澤:「言っちゃえ! 速くするんだ!」みたいな。

(一同笑)

まつもと:それも自分を追い込むために(笑)。

菅澤:実際どうですか? けっこう速くなるんですか?

まつもと:3倍速くすることが目標だとずっと言ってきていて、Ruby2.7で2.8倍になっているんですよ。

池澤:すごい。

まつもと:3.0はもうちょっと速くなります。プログラムでは3倍になるんだけど、残念なことにRubyが一番よく使われるRailsアプリケーションではあまり効かないので、その辺は今後改善する予定です。

池澤:今後に期待ですね。

菅澤:Railsを開発されている方との連携はけっこうされているんですか?

まつもと:すごく連携をしているという感じではないんですけど、コミッターと我々が呼んでいるコミット権をもつ、Rubyコミュニティのリーダーが100人ぐらいいて。

菅澤:そんなにいるんですね。

まつもと:そのコミッターの中で、Railsのコミッターを兼任している人が2人か3人いるので、そういう人を経由して、Railsの開発状況やRailsの問題に関するやり取りをして、情報交換をしていますね。

菅澤:新機能の要望はけっこう来るんですか?

まつもと:Railsから来ることはそんなにたくさんはないんですけど、バグの報告と一緒にこうしたらRubyはもっと良くなるんじゃない? みたいなバグトラッカーからの提案はたくさんきますね。

菅澤:それを受けて、まつもとさんがノリで「これをやるぞ!」と決められるんですね。

まつもと:そうですね。これを入れたらRubyの新しい世界が開けるかもと思うものも中にはありますし、これは名前だけの問題だよね、これは別に入れなくてもいいよねというものもあるので、それはごめんなさいという感じ。

菅澤:コミュニティはどうやって育てたんですか?

まつもと:僕はあまり育てていなくて、「開発に参加したいんですけど」と言われたら「どうぞ、コミット権あげます」という感じで1人ずつ増えてきました。

菅澤:言語コミュニティとしてはけっこう充実しているほう?

まつもと:Rubyよりも遥かにユーザーが多いJavaやPythonのコミュニティもありますし、それと比べたらまだまだではあると思います。

菅澤:まつもとさんのキャラがけっこう重要な気がしますね。

まつもと:うーん。それは自分ではわからないんですけど。

(一同笑)

開発の方向性はひとりが決定をするべき

池澤:リーダーが多いと言語の思想もブレてくることが多いのかなと思っているので、そういう意味ではRubyは1つの思想の元に作られているから、ユーザーとしては使いやすいと感じることは多いですね。

まつもと:そうですね。

菅澤:プログラムはアート性のような一貫した美しさみたいなものがあるかなと思うんですがどうですか?

まつもと:そうですね。少なくともプログラミングの方向性が明らかになるまで、プロダクトオーナーやプロダクトマネージャーは1人で意思決定をするべきだと思っています。ブレるという言い方が適切だと思うんですけど、そうじゃないと、あるときにはある人がこっちの方向性で判断するんだけど、別のときは別の人がこっちを判断する、という状態になります。それよりは、1人の人が一気に方向性を決めるほうがいいんじゃないかなと思いますね。

池澤:RubyはC言語で開発されているんですよ。

菅澤:そうなんですね!

まつもと:そうですね。RubyはRubyで書いていないんです。

池澤:RubyはRubyで書いていないので、ユーザーとして最近ちょっとCも勉強しているんです。

まつもと:コミッターの段取りが低いのは現状で、本当はもっと多様性があったほうがいいです。

菅澤:確かに。コミッターになりたかったらまつもとさんにTwitterからDMを送るみたいな。

池澤:Twitterで送るんだ(笑)。

まつもと:自分のスキルを証明してもらいたいので、GitHubで何回かプルリクエストを送ってきてもらえるといいですね。3回ぐらいプルリクエストを送ってもらった人の中から1人は声がかかることが多いですね。

池澤:そうなんですね。

菅澤:これはいい情報ですね。

まつもと:Cが書けなくてもコミッターになった人はけっこういますね。Rubyで書いたライブラリを改善するためにコミッターになったという人も何人かいます。

菅澤:なるほど。言語開発はコミュニティを作るのも含んでオープンソースですもんね。時間が来てしまったので、この辺りで終了ということになってしまいますが、ネットではわからない非常に有意義な情報がいろいろ聞けたので、みなさん喜ぶんじゃないかと思います。ありがとうございました。

池澤:ありがとうございました。

まつもと:ありがとうございました。