Findy Engineer Lab

エンジニアの"ちょい先"を考えるメディア

最初の一歩はドキュメントの英語化。Rubyが世界で使われるまでの「運と縁」をRubyのパパまつもとゆきひろ氏が振り返る

グローバルで通用するプロダクトやソフトウェアを作りたい。一度は考えたことのあるエンジニアにとって「Ruby」の生みの親、まつもとゆきひろ氏は偉大かつ心強いパパです。

今回は、まつもと氏をお招きし、Rubyが世界に広がるまでのプロセスや日本から世界的なシステムやソフトウェアが生まれづらい理由、グローバルなOSS活動から得られる機会などを語っていただきました。聞き手はファインディの山田が務めます。

「自分の使うツールを良いものにしたい」が最大のモチベーション

——初めに、Rubyを開発するまでのキャリアを教えてください。

筑波大学でコンピュータサイエンスを学び、新卒で受託開発を行う独立系のソフトウェア企業に就職しました。

当時はバブル末期で、就職活動も売り手市場。プログラミング経験のある人のうち、わざわざ知名度の低いソフトウェア会社を選ぶ人は少なかったんです。2000名の社員に対し、新入社員は200人ほど。そのうちほとんどが文系出身でプログラミング経験はゼロでした。コンピュータサイエンスを大学で専攻し、プログラミング経験のある人は、私も含めて6名しかいませんでした。

そのおかげか6人はとても良い経験を積ませてもらえました。ちょうど会社は、社内ツールを充実させ、差別化しようという戦略を立てていて。プログラミングのできる新人たちは、社会人研修を1ヶ月受けた後、すぐ社内ツールの開発チームに配属されたんです。

このチームの居心地がとにかくよかった。クライアントがいないので、仕様からスケジュールまで自分たちで決められる。そのうえ環境はUNIXで、現代の(サーバーサイド)プログラミングとほぼ同じAPIで開発できました。もちろん性能は今と全然違いますけどね(笑)

——仕様やスケジュールなど自分で決められる範囲が広く、かつ新しい環境で開発できたということですね。

はい、とても恵まれていました。あとは6人くらいの少ない環境だと、大勢いる環境より、新人の意見も聞いてもらいやすい。私がその後も小規模な会社を選びがちなのは、当時の経験が大いに関係していると思います。

——少し話を戻すと、のちにRubyを設計するにあたって、社内ツールの開発に関わり、2000名以上の社員に使ってもらった経験は活きましたか?

社内ツールですし、あまり「大勢に使ってもらった」感覚はなかったかもしれません。あと、私にとって大勢の人に使ってもらうことは重要ではないというか、モチベーションになっていないように思います。

というのも、私自身は基本的に「自分が使うツールを良いものにしたい」というモチベーションで動いている。のちにRubyを作ったのも自分にとって良いものだから。それが結果的に他の人に使われて、感謝されたら嬉しいな、というくらいで。

あと、割と自制心がゆるいタイプと言いますか。面白いものが目の前にあると、ついそっちに集中してしまうんです。Rubyの開発は最初の会社に居た時にスタートし、次の会社でも継続していたのですが。どちらかというと目の前の仕事よりRubyを作ってる方が楽しくって(笑)締め切りが近くなったら急いで会社の仕事を片付けるみたいな感じでした。当時の上司には申し訳ない気持ちですが……。25年も前の話なので許してくださるのではないかと思っています。

ドキュメントの英語化から、二人の海外エンジニアをきっかけに世界に拡大

——自分が使いたいものを楽しみながら作った結果、世界で使われるようになった。今振り返って、なぜそうなったと分析されていますか?

そもそもこんなに使ってもらえるとは夢にも思っていなかった。なので理由はすべて後付けで考えたものになってしまうんですが......。

前提として、1990年代前半はNetNewsという掲示板のような場が賑わっていて、ソースコードを投稿して配布するのは、エンジニアの間では珍しくなかったんです。すでにPerlやPythonも同じように配布されていました。

それで自分もRubyを作って、ソースコードを公開してみた。「興味のある人が何年か使って、いずれ興味を失って廃れていくんだろうな」くらいの軽い気持ちでした。他の言語も大体そんな流れで消えていましたから。

そこから転機が訪れたのは公開してから1年後くらい。ドキュメントやコメント、ログなどを英語で書くようにしたんです。私自身、既存のオープンソフトウェアのソースコードを読むとき、コメントや関数名が英語以外の言語で書かれていると、理解するのが大変で、読むのをやめてしまう経験がありました。海外でRubyのソースコードを読もうとする人がいたとき言語の壁で諦めてしまうのは勿体ない。そう考え、ドキュメントやコミットログは英語で書こうと決めたんです。

今思えばそれがRubyが現在の形になる最初の一歩だったかもしれません。英語化しなければ、Rubyは世界に広がることもなかった。世界に広がらなければ、日本でも人気が出ず、他の数多ある言語のように廃れていたでしょうから。

——ご自身で全部英訳されたんですか?

はい、他の言語のマニュアルを参考にしながら、英語で書きました。海外からもアクセスできるホームページを作って、そこで配布を始めました。

——先ほど英語化が「最初の一歩」と伺いましたが、次のステップがあるとしたら、何になりますか?

ある日『The Pragmatic Programmer(邦題:達人プログラマー)』の著者、Dave ThomasさんとAndrew Huntさんが、たまたまRubyを見つけてくれたんです。彼らは書籍のなかで「1年間に1個新しい言語を覚える」というチャレンジを掲げ、常に新しい言語を探していたそうです。

当時、私はNetNewsでRubyについて書き込み、細々と広報活動をしていました。例えば「Pythonでこの課題をどうやって解きますか」といった質問に対して、回答に合わせて「Rubyだとこういうふうに書けます」と答えるとかですね。

それが功を奏したのか彼らが数あるプログラミング言語の中からRubyを見つけてくれた。さらにDave Thomasさんという方が『だいたいの言語はダウンロードして使って1週間ぐらいで飽きたけど、Rubyを使ってみたら、とても面白かった』と言ってくれたんです。それでAndy Huntさんにも勧め、二人のソフトウェアコンサルティングの仕事でも使ってくれたそうなんです。

この二人がRubyの書籍を書き、人気が出たことで、グッと英語圏に広がりました。書籍を読んだ方から「カンファレンスを開こう」という動きも生まれ、2001年に初めてのRubyカンファレンスが開かれました。出席人数は34名前後。今に比べたら非常に小規模ですが、私も現地に足を運びました。

——ちなみにDave ThomasさんとAndy Huntさんが飽きなかったのは、なぜだったのでしょう?

正直わかんない。彼らの好みにあったとしか言えないですね(笑)

──その2人がグローバルに広める最初のきっかけだった?

二人の影響は大きいですね。あとはNetNewsでRubyを語るニュースグループを作るよう提案してくださった方もいて。グループが盛り上がるにつれ、海外でもRubyコミュニティが広がっていきました。先ほどの英語化までが第1段階だとすると、これが第2段階ですね。

Ruby on Railsのハイプ・サイクルに引っ張られ、さらに世界に広がる

——次の段階ではどのようなことがありましたか?

第3段階は、2004年にRuby on Railsが登場した2005年ぐらいですかね。

2004年時点で、ウェブアプリケーションを15分で開発できるというのは聞いたこともなかった。さらにRuby on Railsのホームページには、簡単なアプリケーションを作るデモが動画形式で載っていたんです。2004年はYouTubeがローンチした年で、インターネットで動画を扱うというのは一般的ではなかった。ホームページからして物珍しかったわけです。

また、Ruby on Railsを開発したDavid Heinemeier Hanssonさんは20代か30代。若くて非常に議論好き。みんなが色んな話をしていると、ガソリンを持って駆けつけ、火を大きくするような人でした(笑)

その頃「Ruby on Railsを使うと、Javaの典型的なWebアプリケーション開発に比べて生産性が10倍になる」みたいな言説が目立ち、「そんなわけがないだろう」と反論するコメントが集まって、今で言うと炎上のような状態が起きて......と、ますます議論が盛り上がっていきました。

一方で「実際に使ってみたらよかった」と言ってくれる方もどんどん増えていきました。「公正に比較するために同じようなアプリケーションをJavaとRubyで作ってみよう」と冷静に分析される方もいました。比較のうえで「Ruby的なやり方が好き」と言ってくれる方もいて地に足のついた評判が広まっていきました。

いわゆるハイプサイクルと呼ばれるものですよね。一度、実態以上に高く評価され、幻滅され、実態に沿った認識に落ち着いていく多分2004年にRailsが現れ、2012年ぐらいまでが幻想期というか、ガーッと話題になって。それから先は相対的に人気が落ち、実態に合わせた評価を得ていく。そうした流れでここまで来たと捉えています。

——流れに乗って、Rubyがさらに広がっていった。

本当に運と縁としか言いようがないですね(笑)振り返ると登場するタイミングもよかった。

インターネット時代のプログラミング言語の多くは1995年に登場しているんです。Javaが登場したのも1995年、PHPはちょっと早くて94年の暮れから95年にかけて登場しました。

なぜかというと、95年にWindows95が登場し、追加でソフトウェアを買わずともインターネットが使えるようになった。いわゆるWebアプリケーションのニーズが伸びた時期でした。それを実装するプログラミング言語への要求にも変化があり、新たな言語が生まれていった。

Rubyは決して狙って作ったわけではないのですが、たまたま最初のCGIがスクリプト言語にとって有利で、ちょうどその時期に生まれたのが幸運でした。

それに加え、数え切れない縁もありました。Dave Thomasさんなど沢山の人がRubyに注目して、実際に使ってくれたり、Rubyのためのテクノロジーを開発してくれたりしました。

例えば『アジャイルソフトウェア開発宣言』の著者のうち半分くらいはRubyにポジティブなコメントを残してくれている。Rubyを作り始めたのはそれから10年ぐらい前の話ですし、直接アジャイルに私が影響を与えたとか、逆にアジャイルから影響を受けたわけではないのですけれども。思想的には近いものを感じています。

実際、著者のほとんどはSmalltalk経験者なんです。RubyもSmalltalkの影響を受けているので、その辺の親和性もあって、Rubyを選んだ人たちが結構いたと聞いています。そういう縁はRubyが世界的に広まった大きな理由なのではと思っているんです。

一日一回GitHubの草を生やす。mrubyの開発で自分に課したルール

──そのように自分の作ったものが爆発的に世界へ広がっていく経験を、恐らく多くの日本人エンジニアは経験したことがないと思います。稀有な経験を通し、開発方法や考え方に起きた変化はありましたか?

そうですね……。Rubyが世界中で使われ、高く評価していただけるのは、とてもありがたいことです。ただ、自分の子供が世界で活躍しているイメージで、あまり「自分が経験した」という感覚はないんです。

ただ開発方法の変化は明確にありました。まず圧倒的にRubyの開発に関わってくださる方が増えた。2004、2005年あたりは、私がメインで開発し、時々インターネットからパッチやコミット、リクエストが来て、対応する感じでした。

それが2007年ぐらいからパッチを送るだけじゃなく、実際に手を動かして、コミットする方も増え、そのうちRubyという言語の方向性や機能設計などにも関わってくださるようになりました。非常にありがたかったですね。

関わる方の人数やコミット具合が増えるにつれ、私はメインの開発から徐々に距離を置くようになりました。役割で言うならプロダクトオーナーやマネージメント、コミュニティリーダー的な仕事の比重が増えていったんです。それは必ずしも好ましいことではないと捉えていて、2012年からmrubyという別の実装を作り、プログラマーとして手を動かすようにしています。

──Rubyについては「もう自分の子どもがだいぶ育ったな」みたいな感覚なのでしょうか?

そうですね。メインのRubyはだいぶ育って、ここ5、6年ぐらいは年に1回しかコミットしていないんです。

Rubyは毎年12月25日に新しいバージョンを出すという慣習があって、新しいバージョンを出すと、次のバージョン番号を付け直すんです。そこだけ「先生お願いします」って。ハンコを押すみたいな形になっています。

とはいえ、それだけだと少し寂しいですから、コアチームで「こんな機能作ろう」と議論がまとまったら、Ruby本家の方はコミッターたちが作ってくれるので、私はそれをmrubyでどう実現するんだっけを進めていくという。「最近プログラミングしてない」と言いたくないゆえに(笑)

——mrubyの開発も「自分にとって良いものを作る」がモチベーションになっている?

そうですね。使える人が便利に使ってくれたらいいやくらいの感覚です。あとは私のプログラマー欲を満たすために頑張るっていう(笑)

たまにプルリクエストを送ってくださる方もいるので、コードレビューして取り込むこともあります。自分でも「こうやったらちょっとメモリ消費が減るんじゃないか」とか細々改善しています。

GitHubの草ってあるじゃないですか。コミットすると緑になるやつ。あれを絶やさないよう自分に課しています。2021年の1月1日から昨日(取材日は3月30日)まで、ずっと1日最低1コミットはしていました。「今日4コミットするはずだったのに、ちょっと明日は何するか思いつかないから1個とっとこう」とか調整しながらも、一応毎日何かしてるっていう。

「海外行くの面倒くさい」人こそ、Rubyのコミュニティを覗いてみてほしい

──Rubyのように日本から世界に広がったソフトウェアやプロダクトは決して多くはないと考えています。企業や個人にとって何が実現の壁になっていると思いますか?

わざわざ一歩踏み出すまでの心理的な壁は大きいのではないかと思っています。

企業については、何かいいサービスを思いついたとして、それを日本向けに展開すれば言語の壁はないし、海外にライバルがいても「私たちは日本市場向けです」と言えば、国内クライアントから優先して選んでもらいやすいこともある。欲張らなければ商売が成立してしまうんですよね。

例えば、Kotlinを開発しているジェットブレインという会社はチェコに拠点があり、経営陣はロシア人です。彼らにとってチェコ市場だけで商売が成り立たないのは大前提、チェコ語だけでサービスを提供するという選択肢はあり得ないと言っていました。日本はそうではないじゃないですか。海外に出ないのは当然の判断ですよね。

それでもあえて「海外に出る」には、どうしても海外に出たいリーダーが出てくるとか、あまり想像したくはないですが、日本の国力が下がって国内市場では成立しなくなるとか、そういう状況だと思うんです。

個人についても同じですよね。別に国内で成り立つし、「海外に行くの面倒くさい」という気持ちが、一定の心理的障壁になっていると思います。

ただ、個人ベースのソフトウェア開発、特にOSS活動についていうと、ぜひRubyのコミュニティなどを見て「そうでもなさそうだな」と気づいてもらえたらいいなと考えています。

特にRubyは、コミュニティのキーパーソンが日本に大勢いらっしゃいますから。Rubyで使う機能を作って、キーパーソンとの繋がりを活かし、海外の人にも使ってもらえたら、国を超えての評価を得やすい。実際にRubyのコミュニティにはそういった方がたくさんいらっしゃいます。

──Rubyだとキーパーソンがいるから、その人をきっかけに海外出ていける。

そうですね。せっかくなので、うまく機会や環境を活かしてもらえたらと思います。私が思うよりも実際に行動に移す人は少ないので、ぜひやってみてほしいですね。

──同じように世界でも使われるソフトウェアを作りたい方に「こんな経験をするといいんじゃないか」といった話、次世代へのメッセージなどがあればぜひ伺いたいです。

2001年に初めて海外のカンファレンスに参加するまで、海外に出るなんて、全然想像していなかったんです。でも実際に外に出てみると、ありきたりな言葉ですが、確実に世界が広がりました。

一度出てみると、知り合いが海外に沢山いて、色んな場所で話ができる。そうなると、今ならロシアやウクライナ情勢なども、自分の知り合いが関わる身近な出来事として、考えられる。「海外出なくても別にいいや」と思ったままだったら、何か大きな機会を失っていただろうなと振り返って感じます。

ただ、あらゆる行動は自分で決めるものです。「そういう世界があるよ」と教えてあげられるけれど、「こういう行動をしなさい」とまでは言えません。日本で幸せに生きてく道を選ぶ人もいていいと思う。ただ、その選択肢しか知らないとしたら、もっと可能性が広がる道について、考えてもいいんじゃないかなとは言いたいです。

──最近海外とかリモートでも働けるようになってきてますし、日本にいながら海外で働く選択肢も身近になっていきそうですよね。

リモートがだいぶ一般的になってきて、日本から海外企業で働いている人も時々出てくるようになりましたね。それもちょっと新しい世界じゃないかなというふうに思います。

そういう新しい可能性が今見えているのに、自分には関係ないって止めてしまうのは、勿体ないっていう気はしますね。

──ファインディとしてそうやって海外に挑戦したいエンジニアをもっと後押ししていきたいと改めて思いました。まつもとさんに比べ、まだまだ新参者ですが、これからもエンジニアの挑戦を後押しできるよう精進していきます。今日はありがとうございました!