日本最大級のエンジニアコミュニティQiita、プロダクト開発部部長の清野俊文です。
この番組では、日本で活躍するエンジニアをゲストに迎え、
キャリアやモチベーションの話を深掘りしながら、エンジニアの皆さんに役立つ話題を発信していきます。
はい、ということで今回からのゲストは、Rubyの生みの親であるMatzこと松本ゆきひろさんです。よろしくお願いします。
はい、よろしくお願いします。松本です。
はい、よろしくお願いします。QiitaはRubyも使ってますし、
松本さんにはお世話になっているので、本当に今日はありがとうございます。
はい、よろしくお願いします。
はい、今日松本さんで大丈夫ですかね、呼び方は。
好きに呼んでいただければいいと思うんですけど、松本でも松でも、他の人と区別がつけば大丈夫です。
はい、ありがとうございます。
1回目にお送りするテーマは、松のキャリア史、趣味から世界の言語になるまで、です。
はい、ということでですね、1回目はですね、松さんの今までのキャリアについてですね、
ちょっと聞いていきたいなと思っております。
結構、いつも本当にRuby会議とかでお話はいつも聞かせていただいてはいるんですが、
そもそも松さんがこれまでどういうことをしてきたのかって、
なんていうんですかね、実はあんまり聞くシーンなかったなと思っているので。
そうですかね、はい。
キャリアのスタンダードについてですね、
もっといろいろお伺いをしていきたいなと思っております。
はい、よろしくお願いします。
松さんに聞くのはあれなんですが、今やられていることっていうのを改めてお伺いしてもよろしいでしょうか。
私ですか、今の活動としては大きく分けると、3つぐらいに分かれていて、
1つはRubyのパパなので、Rubyという言語そのものを、
デザインしたり方向性を決めたりとかいうような活動をしています。
具体的に言うと、例えば開発者ミーティングとかで、
Rubyに対するこんなふうな機能が新しく欲しいですみたいなリクエストが
割と頻繁に来るようになりましたって、
それに対して一つ一つ検討して、
これは入れる、これは入れないとかいうようなことを決めたりとかですね。
あるいは、その中に入れない、入れないとかいうようなことを決めたりとかですね。
あるいは、その開発コミュニティの中から、
こういう機能を新たに作りたいですみたいなリクエストが来て、
その結果、言語にも影響がありますみたいなケースもあるので、
その場合は、その言語変更は許可できませんみたいなことを決めたりとか、
そういう方向性を決める活動があって、
これが一番、私にとって重要な活動なんですけれども。
2番目が、長い経験を持つ、そして自前の著名なプロジェクトを持つ、
ソフトウェア開発者の先輩として、
技術顧問っていう肩書が多いんですけれども、
いろんな会社さんのお手伝いをして、
技術者の人とお話をしたりアドバイスをしたりするような仕事があって、
これが私の主な収入源になっています。
オープンソース活動はお金にならないので、
オープンソース活動はお金にならないので、
最後が、三永さんが使っているCLBの開発って、
開発コミュニティがだいぶ昔に比べて充実して、
だいたいソフトウェアエンジニアとして、
プログラマーとして皆さん私より優秀なので、
私あんまり口出すっていうか、
実際の行動を書くっていうところまでいかないんですよね。
でも、個人的には自分は根っからのプログラマーだと思っているので、
プログラムを書いてないとつまんないんですよ。
そういうのもあって、
10年以上前から、
mRubyっていうRubyの別芸室を作っているんですけれども、
プログラマーとしては、
空いた時間にはこのmRubyを作るっていうのが、
これもお金にはならないんですが、
このmRubyを作るっていうのがプログラマーとしての活動。
プログラマーとしては、
開いた時間にはこのmRubyを作るっていうのが、
これもお金にはならないんですが、
このmRubyを作るっていうのがプログラマーとしての活動。
だからコミュニティリーダーあるいは言語デザイナーとしての活動、
技術顧問としての活動、
その中には講演とか、
今回みたいにPodcastに参加させていただいたりとか、
雑誌の原稿を書いたりとか、
そういう活動も含んで、
最後にプログラマーとしてmRubyを開発するっていうのが、
私のメインの活動になります。
ありがとうございます。
まさにRubyの幅であり、
技術顧問であり、
プログラマーというところでいろいろされているっていうことで、
日本のエンジニアであれば、
松さんのこと知らない人はいないんじゃないかと思うんですが、
ありがたいことですね。
本当にそんなにすごい、
この業界というところを牽引されている松さんが、
まず最初に聞きたいなと思っているのが、
プログラミングを始めた、触ったきっかけと、
その当時どんな感じだったのかっていうことを
ぜひお伺いしたいなと思っております。
私が最初にコンピューターのプログラムに、
コンピューターに接したのが1977年にあるんですよ。
だからすごい昔ですよね。
その時に、50年近く前になるんですね。
その時に父親が割とガジェット好きな人で、
LKIT-16って言ってもだいぶ年寄りの人しかわからないんですけど、
当時ワンボードマイコンみたいな、
マイコンキットみたいなのが流行ってたんですよ。
それを父親が大阪の日本橋で買ってきて、
彼がハンダ付けしてコンピューター作ったんですね。
作ったら飽きちゃって、そのまま放置されていたのを、
当時小学校、私6年生ぐらいだったと思うんですけども、
16芯ダンプを打ち込んで、LEDがくるくる回ったとか言って、
わあ嬉しいみたいな感じの遊びをしたのが、
コンピューターに触れたきっかけになります。
ただその時は、16芯ダンプを打ち込んだだけで、
プログラムとは何ぞやとかよく分かっていなくて、
こういう機会があるので、っていうレベルで終わったんですね。
プログラムとして、プログラムを開発するっていう意味での
コンピューターの出会いっていうのは、その後中学校3年生の時に、
やっぱりガジェット好きの父親が、だいぶ父親の影響が大きいんですけど、
ロケットコンピューターっていうのを買ってきて、
シャープのPC1210っていう機種なんですけど、
これはベーシックが動いたんですね。
このベーシックでポチポチやるのは、
中学生にもわかったので、
初めて自分でベーシックのプログラムを組むようになって、
それが私の最初のプログラミングの原体験になります。
中学校3年生、15歳の時ですね。
ありがとうございます。
もう中学生の頃からプログラミングってところに触ってたってことですね。
そうですね。
当時、ガジェットとしては存在しつつも、
そこに興味を持ったきっかけとかってあったんですか?
もともと、科学とかテック系のものに興味があったのは確かですし、
コンピューターって当時の他のおもちゃと違って、
ある意味自分で判断するんですよね。
イフ分とかアルトで大きい、小さいとか。
そういう自分で判断する、遊べるものっていうのは、
私にとって非常に刺激的に映ってですね。
あと、プログラムを書いていくと、
自分の思った通りに動いたり、
バグあったりすると思った通りに動かなかったりするんですけど、
これを見てると、ペットの犬に対して芸をしつけてるみたいな感じがして、
なんかこの機械かわいいなーとか思ったんですね。
それが原体験、最初のモチベーションになった感じがしますね。
本当に自分で触って操作ができるって面白さと、
手を加えていくっていうことでの愛着みたいな。
そうですね。言った通りに動くこいつはかわいいなって。
なるほど。ありがとうございます。
今でもあんまり変わらない気がしますけどね。
確かにRubyみたいな言語を育てていくみたいな、まさにそういうイメージですよね。
なるほど。ありがとうございます。
そこで初めてプログラミングってところを触ったっていうお話かなと思うんですけど、
そこからもずっとプログラミングをやり続けてたんですかね、今まで。
そうですね。細々とやり続けていましたが、
当時コンピューターっていうのは非常に貧弱で、
言語の選択肢があんまりなかったんですよ。
当時のコンピューターっていうのは、電源を入れるとベーシックに動く感じだったので、
ポケットコンピューターもそうですし、
その後PC8801っていう、いわゆるパソコンを手に入れたんですけど、
そのパソコンにしたところで、やっぱり電源を入れるとベーシックが動くんですね。
ビジュアルとかつかない、昔のベーシックってだいぶ今のプログラミング言語と比べて貧弱で、
ストレスを感じてたんですね。
一方、私は本を読むのがすごく好きな人で、
オンエアに入れてあってコンピューター関係の本を読んだり、
あるいは当時コンピューター雑誌がたくさんありましたので、コンピューター雑誌を見てると、
私の知らない遠く、例えば大学の中であるとか海の向こうとかでは、
もっと強力なコンピューターでいろんな言語が使えて、
その言語は今の私が使っているベーシックよりもだいぶ高級だったり、
ストレスを感じなさそうな言語が世の中にあるなと思ってですね。
自分の貧弱な環境と本の中にある優れた環境との間のギャップみたいなもの。
いつかこんな環境でプログラムしたいとか思うっていうのが私の高校時代ぐらいですね。
なるほど。そこから大学に進学されたんですかね。
はい。
そのタイミングではどういうところを専攻したりしてたんですかね。
大学はコンピューターサイエンスを専攻しました。
そうなんですね。
筑波の情報ですけど。
じゃあそこで本当に中学からプログラミング始めて、
高校時代も本だったりいろいろな情報もキャッチアップしつつ、
大学から本当に専攻として勉強を本格的にされ始めたっていうようなイメージなんですかね。
そうですね。
そうなんですね。
そこからある意味でRubyの原点というか、
ルーツ的なところは続いてるようになったんですね。
そうですね。
言語を作りたいモチベーションとしては当時からありましたね。
そうなんですね。ありがとうございます。
そこで言語処理系みたいなところは勉強しつつ、
ファーストキャリアとしては、もちろんRubyを作ってたわけじゃないかな
っていう気はしてるんですけど、
いわゆるファーストキャリアとしてはどういうことをされたんですかね。
大学を卒業して、院に行かないかって言われたんですけど、
私当時、家があんまり乳腹ではなかったので、
これ以上親の迷惑になるわけでもいかないなって言って、
その時点で就職して、ソフトウェア開発会社に就職しました。
この会社は自宅開発をメインにする会社だったんですけど、
当時まだバブルの末期ぐらいだったので、
かなり景気よく採用してたんですね。
2000人ぐらい社員がいる会社だったんですけど、
中堅のソフトウェア開発会社ぐらいだったんですけど、
1年に200人ぐらい採用するんですよ。
1割採用するって言ったらだいぶ正気を失ってる感じがしますけど。
かつその200人のうち、ほとんどが文系未経験みたいな。
大学時代からコンピューターサイエンス専攻しましたって人は、
6人しかいなかったんですね、その200人中。
この6人は経験者なのでって言って、
教育機関とかゼロでプログラムかけるから、
いきなりその部署に放り込まれて、
社内ツールを作るシステム部門に配属されたんですね。
ここは割と自由な部分で、
他の人たちはお客様のために一生懸命ソフトウェア開発するんだけど、
この人たちは社内のためのツールを、
自分で資料決めて勝手に作ってくださいみたいな感じだったので、
割とのんきに開発してましたね。
お前このツール担当なとか言って、
あと全部任せたらよろしくみたいな感じで開発をしてましたね。
最初からだいぶフリーだもん。
そうだったんですね。
その時は何て言うんですかね、
いわゆる開発みたいなものっていうのは、
本当にウェブ開発ではないですよね。
本当にソフトウェア開発を一部プログラマとして
そうですね、デスクトップシステムだったので、
当時ソニーのニューズっていう名前のワークステーションがあったんですけど、
そのソニーのニューズっていうのが会社の標準の開発環境というか、
技術者用マシンだったので、
そのマシンで動くデスクトップツールを作るっていう感じでした。
Xウィンドウだったので、その上で開発するんだけど、
当時、Xツールキットっていう、
Xウィンドウの上で動くためのツールキットがあったんですけど、
めっちゃ使いにくかったんですよね。
それで海外産のツールキット、
サードパーティーのツールキットを導入しようかなと思ったらですね、
それ日本語通らないんですよ。
仕方がないから海外産のやつを参考に
自分でツールキットを作って、
その上にデスクトップアプリを作るみたいなことをしてましたね。
なんか本当にフリーダム。
なるほど、本当にそういう感じだったんですね。
そうですね、やりたいことはだいたい言って、
筋が通ればやらせてもらえるみたいな環境でしたね。
エンジニアとしては仕事がフリーダムっていうところで、
材料を持って面白い仕事ができるような環境だったのかなって、
今お話ししたんですけど。
そうですね、だいぶ地球運動が高かったです。材料をたくさんいただいてました。
考えてみればその時新卒だったので、
20代前半ぐらいの新卒だったので、
それによくやらせたなっていう感じではありますが、
だいぶフリーダムでしたね。材料をいただいて本当に幸せに開発してました。
そこの幸せに開発ができてた状態から、
ある意味で確実に何かしらの挑戦をすることによって、
ある意味で、
一個お暇だから趣味の一個でRubyを始めたようなイメージなのかなと思ったんですけど、
最初の2つの会社では実際そうな感じでしたけれども、
そうですよね。
手が早い方だったので、
約束して、
例えば3週間かかりますっていった仕事を、
でも力入れて1週間でやって、
残りの2週間分はRubyやってるみたいな感じで仕事してましたね。
本当に仕事の中で一緒に並行してやり続けていたというような感じですね。
そうですね。
なるほど。
本業に対してすごい集中ができているわけじゃなくて、
2つやってるような感じなのかなって話聞いてきて。
そうですね。
当時の部長を聞いたら怒るかもしれないけどね。
世の中のエンジニアって結構仕事をすごい集中して、
それでいっぱいいっぱいになっちゃってる方って多いかなと思うんですけど、
その中でやり続けられていた理由って何なんですかね。
Rubyの方が楽しかったからなんですね。
そうですね。
面白かったんですね。
そうなんですよ。
やっぱり楽しい大事ですよね。
今もそこの面白さみたいなので、
Rubyの開発はずっと続けてるみたいな感じなんですかね、イメージ。
そうですね。
イメージ的には次何やってやろうみたいな感じではありますね。
そういう面白さからRubyの開発を始めて、
ある意味でどんどんコミュニティが大きくなってきて、
今があるかなと思うんですけど、
そこの中で自分自身のRubyに対しての向き合い方とか、
考え方のスタンスとか責任感とか、
そういうのって変わってはいきましたかね。
変わってはいてというのは、
最初の頃って一人で開発するんですよね。
だから変わったタイミングって多分2回ぐらい。
大きく変わったのは2回ぐらいあって、
つまり作り始めてから一般公開するまでの間って、
他にRubyのことを知ってる人いないわけですよね、
合格してないから。
その時ってやめても誰にも目をかけないわけですよ。
それでも続けるっていうのは、
ちょっとめんどくさいバグとか、
開発に行き詰まったりとかするとですね、
続けなくてもいいかなみたいなことも何回かあったんですけど、
なんでこんなことやってんだろうって思う限りですよね。
自分一人だけしか知らない、
自分一人しか使ってないツールだ、
言語なわけですから。
それでもね、
一つ一つの課題とかバグ直したりとか、
機能追加したりとかいうことが面白いなと思って続けてたら、
これぐらいやったら使い物になるだろうって言って
公開するに至ったっていう感じですね。
これが最初の段階で。
それからしばらくも、
大体メインでは私が開発して、
時々パッチいただいて、
それを取り込みますみたいな感じだったんですが、
何年かぐらいだったかな。
多分2004年か、
もうちょっと後かなぐらいに、
このバーチャルマシンの部分を、
他の人が書いたものに置き換えて、
それでRubyが何倍も速くなったりとか。
そういうのもあって、
だんだん他の人が、
僕よりもプログラマーとして優秀な人が関わってきて、
これは出なさないほうがいいかなみたいなところも増えて、
それで私が直接CRubyのコードを改善したり、
手を入れたりするようなことが減ってきて、
プログラマーとしての自分の役割がどんどん減って、
むしろデザイナーであるとか、
コミュニティのリーダーであるとか、
そういう立場のほうの割合が増えてきたっていうのは、
2番目の大きな変化だったというふうに思いますね。
ちょっとそれぞれについてご質問したいんですけど、
まず一つ目のところが、
ある意味で、
今も趣味でプログラミング言語を作っている方って結構いらっしゃると思うんですけど、
自分の勉強のためにもそうだし、
ある意味でそうやって育てていく面白さみたいなので、
作っていらっしゃる方っていると思うんですけど、
それを本当に一般の人に使える状態で、
ちゃんと安定した状態で出すみたいなのって、
それはそれで一個勇気がいるアクションなのかなと思っていて、
その時に自分が作って使うだけではなくて、
世の中に公開しようって決断をした理由というか、
そこのモチベーションってどういうところだったんですかね。
Rubyを作り始めてリリースした1990年代の前半ぐらいっていうのは、
世の中にオープンソースって言葉はまだなかったんだけど、
フリーソフトウェアを世に問うている人たちってすごくたくさんいたんですよね。
そういう人たちの行動を目の当たりに見てますし、
私自身もプログラミングの学習をしたのは、
既存のフリーソフトウェアのソースコードを見て、
こういうふうにやるんだっていうふうに勉強してきた過去があるので、
それを思うと、自分の開発したソフトウェアでしがらみがない場合には、
もちろん会社のために作ったソフトウェアは公開するわけにはいかないんで、
しがらみがない場合には自分が完全に権利を保持して、
しがらみがないソフトウェアをインターネットで公開するっていうのは、
むしろ自然でそうしない理由がないというふうに思っていたんですね。
育ってきた環境というか文化っていうのは、
フリーソフトウェア文化の中で育ってきたので、
それに従ってRubyを作って、
Rubyが使い物になるようになった時点で公開するっていうのは、
私にとってむしろ自然だったっていうふうに思いましたね。
本当にいわゆる今で言うOSS文化というか、
先人が作ってくれたものを自分たちももちろん使うし、
それを作ったものは出せるなら当然のように出していくみたいな、
そこの雰囲気みたいなのも当時からずっとあったっていうのは。
なるほど。ありがとうございます。
そこから次、自分が直接手を動かさずに、
コミュニティでコントリビートしてくださっている方たちに任せていくっていう、
ある意味でプレイヤーからコミュニティリーダー的な振る舞いに変わっていくっていうタイミングだったのかなと思うんですけど、
そういうのってあるあるの話で言うと、やっぱり手を動かしたくなっちゃうとか、
やっぱり自分がそこを離れきれない、どうしても手を動かし続けちゃうとか、
そういうのってタイミングとして結構あるあるの悩みとしてあるんじゃないかなと思うんですけど、
当時ってそこのちゃんと任せるみたいなのはスパッと決められたんですかね。
いやあんまりなくてですね、
ただ例えば新しくできた、新しく入れ替えた他の人が作った、
まさささんと人が作ったバーチャルマシンとかですね、
できはいいし実際に早いんだけど、実装が複雑って言っていいのかな。
正直一目で見てはすぐに分かってすぐ手入れられるって感じではなくてですね、
こう自分のプログラマーとしての限界を感じるというかですね、
ちょっと手が出ない部分が多いんですよね。
現在だとC Rubyの実装のだいぶ多くの部分がですね、
私が手を出して良くなるイメージがあまり浮かばないっていうかですね、
出来が良すぎたり、アルゴリズムが高度すぎたりとかしてですね、
ちょっと手が届かない感じがする部分が結構多いですね。
そうなった時にちょっとこれは私は手出さない方がいいんじゃないかなっていう感じになってきたのが、
ちょっとプログラマーとしてですね、
C Rubyに対するプログラマーとしての画像がフェードアウトしていった原因でありますね。
で、割とそれからあと早い時期に、いろいろ多くあるんですが、
mRubyの開発2010年に始まっているので、
完全に手を引いたのいつだったかな。
多分数年ぐらいはちょっとモンモンとしてたんですけど、
2010年からあとはmRubyのメインプログラマーとしてずっと活動しているので、
過去10年、15年ぐらいはですね、
コミュニティー代表としてのC Rubyに書くと代わりと、
それからプログラマーとしてのmRubyの代わりっていう風に、
自分の中で住み上げができるようになったので、
それ以来はだいぶハッピーに暮らしてきていますね、住み上げができて。
なるほど。
じゃあ、新しい自分がアウトプットできる場所を作って、
自分自身も移行ができたから気持ちよく、
そこら辺を任せることができるようになったっていうのは。
そうですね。
俺がmRubyとかなくて、
自分の打ち込めるソフトウェアとして、
プログラマーとして打ち込めるものがなかったとすると、
もうちょっと違う、ちょっとうくつな状態になってたかもしれませんね。
ある意味で、やっぱりそれ自体を作っていくっていうのも
一個目的としてはあったんですかね。
やっぱりそういう自分自身も手を動かしていきたいなみたいな。
もともとプログラミングが好きなので、
それも楽しいので、
その活動が何らかの方に取り入れられるっていうのは、
ちょっと辛い感じがしますね。
自分とって辛いなと思いますね。
まつさん、今日はありがとうございました。