「言語を作りたい」その気持ちで完成したRuby

ーーまず、Rubyの生みの親として有名なまつもとさんに質問です。そもそも汎用言語を作ろうと思ったのはなぜでしょうか?

まつもとゆきひろ氏(以下、まつもと):自分が欲しいものが、たまたま汎用言語だったんです。「目的が手元にあって、それを果たすためのツールを作ります。そのツールは自分のニーズさえ満たしていればOKです」という感じではなくて、とにかく言語が作りたかったんです。言語を作りたい気持ちが先にあって、具体的にどんな言語かといったら、自分の好みに合うものが欲しくて。

特に何か満たさなくてはいけない条件があるわけではなく、趣味で作っているので、どんどん凝るわけですよね(笑)。そうしていくうちに、結果的に汎用的なものができた。

とはいっても、100人が100人気に入るようなものを作ったかっていうとそうでもないんだけど、意外と私と好みの合う人が多くて、思ったよりずっと広い範囲の方に受け入れられた感じだと思っています。

ーー言語を作りたい気持ちが一番にあったんですね。

まつもと:そうなんですよね。ソフトウェアのツール作る時は、多くの場合、例えば「こういう問題があるので、その問題を解決するツールを作りましょう」「可能であればその周辺領域もちょっとずつ広げて、汎用性を…」みたいなアプローチになることが多いんですけれど。

私の場合は言語が好きなので、自分で言語デザインして作りたかった気持ちが先に来て。趣味で「じゃあどうせ作るならいいのが作りたい」「いいとはなんぞや」みたいなことを言いながら、どんどん発展させていったら、汎用言語ができちゃった感じです。

ーープログラミングが好き、言語が好きな方の中でも、言語そのものを作ろうとする方は少ないと思います。まつもとさんが「言語を作る」という思考に至るようになった理由はなにかありますか。

まつもと:私がプログラミング始めたのは中学生の時で、その時に使っていたのはBASICという言語でした。かつての私が使っていたのは、ポケットコンピューター(ポケコン)と言われる、ちっちゃいコンピューター(に載っていた)BASICだったので、ものすごく機能が制限されていたんですよね。だけど、中学生なので、「プロも大変だな」とか思うくらいで、それが制限された環境であることすら知らないわけですよ。

ある日、本屋に行ったら、Pascalという名前のプログラミング言語の本が置いてあって。それ見て「この言語をもし僕が使えたら、今持っているフラストレーションの大部分は解決しそうな気がする」「プログラミング言語によってだいぶ違うんだな」と思って。

プログラミング言語に関心を持っていろいろ見てみたら、プログラミング言語ってだいたい誰かが意図を持って作っていることに気づきました。「じゃあ自分でもできるんじゃないかな」と思ったのが、言語を作ることに至った1つの理由です。そのへんがすでにおかしいっていっちゃおかしいんだけど(笑)。

もう1つは、高校生ぐらいの時に『I/O』とか『ASCII』とかのコンピューター雑誌を見ていて。その雑誌の中で、時々「こんな新しいプログラミング言語が出ました」とか、「こんな新しいプログラミング言語を作ってみました」みたいな記事が載るんですよ。

そこで「プログラミング言語というのは、作ってもいいものんなんだ」と思って。さらに加えて、私は当時、鳥取県の米子市というだいぶ田舎なところに住んでいて、周りにコンピューターに関心を持つ友だちがあまりいなかったんですよね。「あの雑誌に載っているプログラミング言語が〜」みたいな話を友だちとすることがなかったんですよ。完全に孤立した環境で、自分がおかしいのかどうかに気がつくチャンスがないんです。

大学ではコンピューターサイエンス専攻したので、やっと周りにプログラミングの話をできる友だちができました。そこで「プログラミング言語に興味があって。できるものなら作りたいと思っているんだけど」と言ったら「は?!」と言われて(笑)。

その時に初めて、自分がマイノリティであるということに気がつきましたが、まあだいたい手遅れで。やりたいって思ったものはしょうがないですよね。

中高生の時には、スキルや知識がなかったので、言語を作りたくても作れませんでした。でも、大学で勉強して、仕事でもプログラマとして経験を積み、ある程度いろいろなことができるようになったので。最初に「言語を作ろう」と思ってから10年ぐらい経っているんですけども、1993年にとうとう取り掛かった感じです。

僕がもうちょっと都会に住んでいたら、こういうことにはならなかったかもしれない(笑)。

ーーなるほど、環境の影響は確かにありそうです。ちなみに、Rubyの開発の中で一番大変だったところはどのようなことでしたか?

まつもと:いろいろあるといえばありますが、乗り越えられて良かったなと思っていることがあって。Rubyは1993年に作り始めて、1995年にインターネットで「こんなものを作っています」と公開したんですが、作っていること誰も知らない時期があるわけですよね。私の直接の知り合いの何人か以外は、Rubyの存在をぜんぜん知らないわけです。当たり前ですけど。

誰も知らないから、その間にやめても誰にも迷惑かからないんですよね。だから、例えば「技術的に難しい」「ちょっと突き当たっています」みたいなことがあると、「いや、そもそも別にやらなくてもいいよな」みたいなことを思うところあって。

でも、そこで諦めていたらたぶんRubyはなかったので、誰も知らない、誰も迷惑かけない時期を乗り越えられたのは、ラッキーだったなと思います。

手を止めないために、小さな目標を立て続けることが大切

ーー誰にも迷惑をかけないことは、モチベーションも保ちづらいところだとも思います。まつもとさんはなぜ乗り越えられたのでしょうか。

まつもと:もともと、一番始めに言語を作りたいという基本的なモチベーションがあったので。あとはプログラムを書いている間に、例えばちょっとしたプログラムが書いたとおりに動くのって、それはそれで達成感があるわけですよね。

そういう小っちゃいゴールみたいなものを設定して、「今日は1+1が動いた」「『Hello, World.』が動いた」とかをやっていって。で、あるいは、「『Hello, World.』と動かそうと思ったらどこかに問題があってまく動かなかった。どこに問題があるか探す」とか。そういう小っちゃい課題を少しずつ解決していったので、なんとかなったんだと思います(笑)。

マラソンランナーの人がいつかのインタビューで答えていましたが、「『42.195キロ先までがんばるんだ』と思うとなかなかモチベーションが続かないけれど、『100メートル先の電柱まで走ろう』みたいなことを考えると、最後まで走れる」という話を聞いたことがあって。たぶん似たような感覚なんじゃないかなと思います。

「この小さなプログラムが動くところまでいこう」「今日はこのバグ直すとこまではやりましょう」みたいなことをずっと続けていく、繰り返し続けていくのが、長く続くプロジェクト、しかも誰にも迷惑かけないプロジェクトで、やめずにすんだことなんじゃないかなと思います。

プログラミングする人に寄り添っているのがRubyの特徴

ーーありがとうございます。そのようにコツコツと続けることで完成したRubyですが、Rubyのアイデンティティはどういったところにあると考えていますか?

まつもと:Rubyのアイデンティティは結局、プログラミングをする人のメンタルというか、気分に対して明示的に「こう考えていますよ」ということを言った、最初のほうの言語じゃないかなと思うんです。

もちろんRubyより前の言語が考えていなかったわけではありません。ただ、Rubyはわりと早い時期から楽しくプログラミングすることにフォーカスしています。その“楽しい”というのは私の考える“楽しい”で、「共感したらどうぞ」という感じのアプローチをずっと取ってきたんです。その結果、いいよって思う人たちが意外と多くて、今日まできました。

そういうところに明示的にフォーカスしてきて、かつ過去二十何年の間に「Rubyはこういうところが楽しんだよ」ということをずっと示してきたので、ぜんぜん言語化されてはなかったけれどど、「Rubyによる楽しさはこういう感じだ」と、なんとなく共有されてきたんですね。そして、そのRubyによる楽しさというものが、Rubyのアイデンティティになっているんじゃないかという気はします。

Rubyがこれから進歩する時にも、Rubyの持っている良さとか、楽しさとか。言語化されているような、されていないような部分を壊さないのが、最初のゴールになると思います。

「互換性を壊す」という言い方を私たちはしますが、今まで動いていたRubyのプログラムが「新しいバージョンになってこういうふうに変わってしまったので、今までのプログラム動きません」となったら、それ書き直さなくちゃいけないわけです。

書き直し方が明示されているかどうかはともかくとして、書き直すのは苦痛です。苦痛は楽しくない。それはRubyのコアの原則に反するような気がするので、そういうことはやめましょう、と。そうすると、デザインの選択肢を狭める結果になるわけです。完全にフリーハンドだったらできることが、過去を大事にするとできないことが当然あります。

作る側は、楽しかったり苦しかったりするんですけどね(笑)。選択肢が少ないというのは、縛りじゃないですか。Rubyの未来をデザインして作っていくのは、そういうわりと縛りプレイみたいなところがあるんです。楽しいから縛りプレイをするんだけど、「縛りがなかったら楽だよね」と思うことも同時にあるわけで。そんな感じの気持ちでRubyを作っています。

ーーなるほど。ちなみに、Rubyとはまた別の言語をもう1個作ってみたいと思ったことはありますか。

まつもと:思ったことはあるんですが、ずっとRubyが忙しくて、なかなかまとまった時間が取れないんです。やはり0から作るのは大変なので。

まとまった時間は取れなかったんですが、4年ぐらい前に、雑誌の連載の一環で言語を途中まで作ったことはありました。雑誌の連載の間は、月の前半は雑誌の原稿を書きながらプログラミング言語少しずつ作るみたいなことやっていましたが、連載が終わっちゃって。そこからはまたRubyのことに構いっきりなので、もう何年もほったらかしです。

作ってみたいなとは思っています。プログラミング言語以外もやりたいことはいっぱいあるんですが、やはり最初の一歩を踏むのって、何でもそうですが大変なんですよね。

「きっかけがあるとできるんだけどなぁ」と思いながら、怠惰に過ごしている感じです。Rubyをちょっと直すぐらいは簡単ですが、何もない0から作るってのは、だいぶこエネルギーが必要なんですよね。

プログラミングは本質的には楽しいこと

ーープログラミング教育についてもおうかがいします。プログラミングを学ぶ時には、写経のように書き写しながら覚えた方がいいのか、それとも文法を覚えるところからなのか、どちらの方がいいのでしょうか。

まつもと:なにを言っても生存者バイアスになってしまうので難しいところではあるんですが。ただ、自分の楽しいと思うことをすればいいと思うんです。プログラミングって、本質的に楽しいことだと思うんですよ。私自身がそうやってプログラミングの世界に入ったので、学校の勉強とかとは違う感じで、楽しむ感じで使えればいいんじゃないかなと私は思います。

ただ、世の中にはプログラミングにもともと関心はなかったけれど、入った会社がITだったのでプログラミングやりました、みたいな人もたくさんいて。それはそれでものになっている人もいるので、楽しむことが唯一の道だ、とまでは言いません。

ただ、プログラミングは「Hello,World.」で終わる入門書のレベルと、実際に仕事でやるレベルの間にすごいギャップがあって。そこがあまりカバーされません。そこを埋められるのは、先輩のきめ細かなフォローか、楽しいからどんどんやるかのどちらかしかないような気がするんですよね…。

ーー学校の勉強という点で言うと、最近では小学校の義務教育としてプログラミングを教えていますよね。

まつもと:小学校では音楽の授業もあるわけですが、じゃあみんなが音楽家になるかといったらそうでもないわけで。プログラミングの授業があることが、どういうふうに効くかは予想し辛いところがあると思います。

今は少なくともプログラミング的発想を教科に組み込むことと、体験をすることでしかないので、プログラミングそのものでは成績はつきません。成績をつけるようになると、プログラミングが嫌いになる子が出るのではと、かなり危惧しています。今後の学校教育どのようになるかは、見ていかないといけないと思っています。

一方で、自宅のパソコンにプログラミングできるツールが入っていたとしても、勝手にそのツールを使ってプログラミングをする子どもばかりではありません。ですが、学校で「今日はプログラミングの体験をしてみましょう」となり、1時間遊びました。自宅に帰っても同じソフトをインストールしてプログラミングできるということになると、他の方法ではプログラミングを始めなかった子が始めるかもしれない可能性はあります。

だから、裾野を広げるには役に立つだろうなとは思ってはいます。ただ、そこで「じゃああなたよくがんばりましたね」「じゃああなたは5です」「あなたはちょっと遊んでいたので1です」とか言われたりすると、それは「学校のこと」と線を引いてしまって「おもしろいもの」とは思わない危険性は、けっこう高いんじゃないかなと心配はしています。

ーー評価されるようになったり、義務になってしまうと辛くなることは、プログラミング以外にもいろいろとあるような気がします。では、両親など、子どもに教えるような立場になる人は、どのようなどアプローチをすれば良いのでしょうか。

まつもと:自分自身は、勝手にやっていたわけですよね。親のコンピューターを勝手に取って、勝手にプログラミングしていたんですけど、それで怒られるわけです。「そんなことしていないで勉強しなさい」とか。そういうなかでもプログラミングしてきたので、好きな子が勝手にやればそれでいい。興味がなかったらやらないから、それは身につかないからいいやと思っていました。

私には子どもが4人いますが、その4人の子どもたちにはプログラミングは教えませんでした。自分が興味をもたないと学ばないからと思って教えなかったら、最後まで興味を持たなくて(笑)。「自分の選択だから勝手にやれ、やりたかったらやれば」「パソコンはあるから」という感じでいたら、結局最後まで興味を持たなかった。少なくともこう身内、血縁に後継ぎはいないという(笑)。

最近は子ども向けのプログラミングスクールがすごく人気らしいですが、そういうのが必要かというと、子どもが自分か「行かせて」と言うなら「どうぞどうぞ」と感じですが。そこまででもない時に行かせる必要があるのかな、とは思ってはいます。

例えばプログミングの体験の時間があって、「もっとやりたい」と言われたらやらせてあげたらいいんじゃないかな、と思います。

(次回つづく)