Hello Worldに至るまでの道

まつもとゆきひろ氏:1993年の2月にRubyを作り始めたんですけど、プログラミング言語を最初に動かすプログラムと言えば、普通の人は「Hello World」だと思いますよね。Rubyの言語ではprint "Hello World"と書くとHello Worldが表示されます。

10秒ぐらいで書けるわけですが、自分のプログラミング言語でHello Worldをしようと思うと大変なんですよ。

まずHello Worldって文字列ですよね。文字列はStringオブジェクトなので、まずはオブジェクトを作るところから始めないといけないのですが、オブジェクトは何かのクラスのインスタンスなのでクラスを作らないといけないんですよね。また、Stringクラスはオブジェクトクラスのサブクラスなのでオブジェクトクラスを作らなければいけません。

だけど考えてみると、Stringクラスにしてもオブジェクトクラスにしてもクラスのインスタンスなんですよね。ということでクラスを作らないといけないんだけど、クラスはオブジェクトのインスタンスなので「あれ? ループしてる。どうしたらいいの?」となるわけです。そうやって芋づる式にどんどん作っていかないといけないんですね。

printもメソッドなのでprintメソッドを作らないといけないし、printメソッドを作ったらメソッドを呼ぶ仕組みを作らないといけない。どんどん必要なものが増えていきます。その結果、作り始めたのが2月でHello Worldが動いたのが8月。半年も掛かったんですよ。既存のプログラミング言語であれば10秒で終わることが半年掛かって「何がうれしいの?」という感じなんですけど、思い出してください。これは趣味なので半年間楽しめて万々歳という感じなんですよね。

(会場笑)

そのあとにもやることは山のようにあってprint "Hello World"で済むわけではなくて他にもいろんなクラスを作らないといけません。数値を扱いたいからIntegerクラスを作ったりして、そのうちメモリが足りなくなるのでガベージコレクションを作りました。既存のCやC++のためのガベージコレクションライブラリとリンクしても、そのままでは落ちるんですよ。

(会場笑)

それでだいぶがんばってデバッグしようとしたんですけどどうにも動かなくて、仕方なくGCを自分で作りました。

オープンソースという概念はまだなかった

そうやってRubyが「使えるレベルになった! これでインターネットに公開しよう」と決心するまで3年弱。1993年の2月に作り始めてインターネットに公開したのが1995年の12月なので、2年10ヶ月掛かりました。

そのときも「世界中で僕の言語が使われたら」とか思ってたわけではなくて、おすそ分けみたいな感じです。そもそも1993年にはオープンソースという概念がまだないので、フリーソフトウェアという感じです。

私自身、大学時代にプログラミングの勉強をしたときにどうやってプログラミングを学んだかと言うと、かなりの割合で既存のソフトウェアのソースコードを読んだんですね。とくに、フリーソフトウェアとして流通しているものを読んだんですが、それがRubyがベースになっているので、いろんな言語のいろんなものを参考にしました。一番参考になったのは、実はEmacsのソースコードで、RubyのあちこちでEmacsのソースコードの影響が見えます。見る人が見ればわかるのですが、そんな感じのものがありました。

そうやってフリーソフトの恩恵を受けてソフトウェアを学んできたので、自分が作ったソフトウェアのうち、業務命令で作ったものは会社に権利があるので勝手に公開したら怒られてしまいますが、誰に命令されたものでもなく自発的に開発したものは公開するほうが当たり前だと当時から思っていました。

さらに言うと、ソフトウェアは物理的実体がないので、誰かに差し上げるときにコストが掛からないんですね。これが郵送料が掛かりますとか、切手を貼って送る必要があったら、さすがに公開する気にはならなかった。自分の持ち出しがある分にはあまり公開する気持ちにはならなかったんですけど、インターネット回線さえあれば「ここに置いていきますので、勝手に持っていってください」というのであれば自分の負担はほぼゼロです。

そうすると、「コピーして勝手に持っていってください」「どうぞ使う分にはご自由に」「何かを払う必要なありませんし、感謝の気持ちを表す必要もありません」「どうぞ勝手に」。それで使ってもらえたら「よかったね」という感じのことを思っていたので、そうやって今まできました。

その後Rubyは世界中に広まって「良い」と思ってくれた人が多くいました。そこはだいぶ予想外だったのですが、公開して最初の10年弱ぐらいは「Rubyってあるよね? がんばって作ってるよね。僕は使ってないんだけど」という状況がずっと続きました。

ですがここ十数年ぐらいは、「Rubyを使えます」「使いました」「Rubyは私の人生を変えてくれました」と言ってくださる人が多くてビックリする話です。世界的に影響を与えるようになりましたが、最初からそれを目指していたわけではなくて、偶然です。未来のことなんてわからないですしね。

「賢さ」とは何か

私のキャリアはこんな感じなんですが、「へびのように賢く」というタイトルについて考えてみようと思います。

「賢さ」について考えてみましょう。賢さが目指すのは何かというと、私自身の考えでは自由であることではないかなと思います。もう1つは、これは自由と関係があるのですが「コントロール意識」というのが重要なキーワードになるんじゃないかと思っています。

ある調査によると、上司が部下のことを叱ると部下の生産性は60パーセント下がるそうなんです。60パーセント下がるということは、40パーセントになるということですよね。怒っただけで半分以下になっちゃうんです。よく怒る上司っていますよね。だけど、彼は怒ることによって部下の生産性を60パーセント下げているんです。さらに同僚が怒られているのを聞いた他の部下の生産性も落ちるらしく、もう最悪ですよね。

なぜ下がるかというと、一番の理由はコントロール意識の無さなんですね。つまり上司が怒るか怒らないか、完全に一貫性を持って怒る上司に私は会ったことがありません。どちらかと言うとそのとき虫の居所が悪かった+自分が失敗した。これが重なったら怒られるんですが、それは自分にはコントロールができません。災害に遭ったみたいなかんじで、だいぶまずい感じがある。

そうやって自分がコントロールできない状態で強制されると、生産率が非常に下がるんですね。自分の状況をコントロールできていないと感じるときに、ストレスが非常に増えるという話もあります。逆に言えば、コントロール意識を自分で持っていて、自分で自分の状況をコントロールできていると思っているときにはストレスが少ないし、生産性も高まります。

コントロールできないものと戦わない

ですが現実問題として、世の中何もかもコントロールできるかというとできないわけです。例えば自分の取り巻く環境はだいぶ運次第で、選べないことが多いですよね。あるいは自分で上司を決めることはできません。

未来のことも、誰にもわかりません。そうするとよく聞かれるんですよね。例えば「5年後流行している技術にはどんなものがあるでしょうか?」ってまじめな顔で聞く人がいるんですけど、わかるわけないじゃないですか。

ですが、私たちはその意識を変えることはできるんですね。外側の環境を変えることはできませんが、自分がその環境をどう捉えるかということは変えることはできるんです。今日の覚えて帰ってほしいことの1つは「コントロールできないものと戦わない」ですね。わからないものはわからない。変えられないものは変えられないんです。

それは無駄な努力なのでしないですね。未来予測であるとか、それから周りの過剰な期待に応えるとか。あるいは自分じゃない人が自分のことを理解してくれるかどうかですね。人間には自分のことを理解してほしいという欲求があるわけですが、人間はお互いをわかり合える存在ではありません。どこかのアニメのセリフみたいですけど(笑)。

「何も言わなくてもわかってよ!」という気持ちはありますが、伝えないことは伝わらないですし、伝えたことも伝わらないんですね。本当にどうしたもんでしょうね。

(会場笑)

なので、諦めの気持ちを最初に持つことが必要じゃないかなと思うんです。それで、自分にできることだけをする。明日の天気はコントロール不能なわけです。「明日は旅行に出かけるから晴れてもらわないと困る」みたいなこともありますが、雨が降るときは降るんですよね。それはコントロール不能なので仕方ない。でも、雨が降っても大丈夫なように備えるかどうかは自分でコントロール可能ですよね。

あるいは、他人が自分に対してどういう態度を取るかという問題もあります。自分のことをやたらと嫌う人とか辛く当たる人とか。それってコントロール不能なんですよね。そいつを捕まえて「そんな対応やめろよ!」と言ってもやめないんです。意味ないんですよ。だけど自分がその人の対応をどう受け止めるかはコントロールできます。その辺もけっこう重要なんですよ。

コントロール意識を持つ

私は島根に住んでいるんですが、先日地元で車を運転して空港まで向かっていたら、信号の直前で後ろから来た軽自動車がすごい勢いで追い越していきました。無理矢理追い越しを掛けられるとだいぶイラッとしますよね。

そのときに数年前に聞いた言葉を思い出しました。「There must be a reason」、「理由があるに違いない」という言葉で、これを三度唱えるとイライラが減ると聞いたことがあったんですね。実際に「There must be a reason.There must be a reason.There must be a reason.」とやってみたら、「あの人はこの飛行機に遅れそうだったのかな」と思って「まぁ、ちょっといいかぁ」と、思えるようになりました。

それは、受け止め方を変えたんですね。乱暴な運転をして追い越した車にヒヤッとした事実は変えられませんが、そのあと自分がイライラするかどうか、自分の気持ちをどう整理するかはコントロールできるんです。つまり、コントロールできることとコントロールできないことがあって、コントロールできないことは「そういうものだ」と、ありのままに受け入れることが重要です。

それがコントロール意識を持つということなのかなと思います。そのためにはできることとできないことを区別をする必要がある。そして、できないことに対して心を痛めない。できないんだから。

未来のことは予測できない

例えば未来予測ですね。誰しも未来のことを知りたいと思います。キャリアの話をしていると「5年先の私はどうしているんだろう?」とか「10年先の私はどうしているんだろう?」とか思うわけです。

それは私も聞かれるんですね。「まつもとさんは5年先にはどうなっていたいですか?」とか、「キャリアの目標は何ですか?」と聞かれたときに「現状維持が目標です」とばかり言っています。

(会場笑)

私の場合は特殊で、ソフトウェア開発のわりとあがりのポジションにいるんですね。つまり、自分でソフトウェアを開発してそれをインターネットで公開して、それを世界中の人が使って、さらにそのソフトウェアを使うことや存在して開発を継続していることが素晴らしいと思う会社が私のことを雇用してくれています。

私はサラリーマンなので給料をもらっていて、しかもそれが複数の会社からもらっていて、かつ業務命令がないんですよね。つまり「Rubyのことだけやってくれればいいから」という感じなんです。これ、最高じゃないですか? 最高ですよね?

(会場拍手)

ありがとうございます。これを維持するというのが僕の目標です。

(会場笑)

そのためにはRubyに没落してもらったら困るんですよね。一生懸命Rubyを開発して、それぞれの会社が「まつもとのRubyを応援しているんだよ」というのが正当化されるようなRubyであり続けることが目標なんですが、そうは言っても未来はわからないんですよね。なので、5年先とか10年先の長期的なプランは、1993年の頃から考えないようにしているんです。

なぜなら、それはコントロール可能ではないので。他人のコントロールは不可能なんですよね。Rubyが人気あるというのはたくさんの人がRubyを使っているということですが、ここにいるみなさんの首根っこを捕まえて「おいお前! Rubyを使え!」と言ってRubyを使わせることができるかというと、できないわけです。

私にとってRubyを使ってくれるのはよろこばしい偶然であって、私が何かをしたからRubyを使うようになるわけではない。ですが、「理性的な判断をする人であれば、Rubyを選んでくれるといいなぁ」という状況を整えることはできるので、それをやっています。そのあとみなさんが選ぶかどうかというのはみなさん次第です。

それは、あまり心配してもしょうがないんですね。自分の行動はコントロールできるし、自分の思考のコントロールも難しいけどできないことはない。自分が何をどう認識するかもコントロールできないことはない。そういうことをするのが「賢さ」じゃないかなと思います。このコントロール意識は重要ですね。できることとできないことの区別、それからできることをして、できないことは諦める。これは重要なことじゃないかなと思います。

自分のコントロールできないことは気にしない。未来であるとか天気であるとか、Rubyの評判や自分に対する評判・評価みたいなものに対して、ある程度以上に気にしない。もちろん自分の評価が高まるように戦略的に行動することはOKです。

それはむしろするべきですが、その結果本当に評価が高くなるかどうかは他人のことなのでコントロールできません。評価が高かったら「あぁ、成功したんだ。自分はうまくいったんだ」と思えばいいし、うまくいかなかったら「あいつは僕の意図が伝わらなかった」と、そういうふうに思えばいいですね。

現実を正しく認識し、できないことはあきらめる

他人からの評価もですが、「正解」も自分でコントロールできないことが多いんですね。若い人だとけっこう最近まで学校に行っていたかもしれませんが、学校に行くとだいたい正解があるんですよね。試験も100点満点とかあるでしょ? だけど、世の中の問題には正解はあまりないんですよね。だけど、正解を期待しちゃうんです。

僕もよく、「これから先どんな技術を学んだほうがいいんですかね?」とか、「私のキャリアはどうしたらいいんでしょうか?」と質問されるんですが、聞くほうは何か正解を求めていることが多いんですよね。だけど、残念ながらそんなものはないんですよ。

万人に対してうまくいく魔法の方法というのはほぼありません。そうすると「あなたの目指すポジションや、あなたの持っている特質や得意なことによっていろいろ変わっていきますよね」という当たり前なことしか言えなくて、「聞くんじゃなかった」と、だいぶガッカリされるんですけど(笑)。

(会場笑)

だけど正直に言うとしょうがないですよね。世の中には正解がある分野と正解がない分野があって、正解がない分野のほうが広いんです。そうすると、そういう分野において正解を追い求めるのは無駄である。むしろ正解がないことについて認める。そうなるとすべてのトレードオフになります。そのどこを重視するのはあなた次第です。

スペシャリストかジェネラリストかみたいな話があって、それを同時に追及するにはおそらく人生の時間が足りないんですね。そうなるとどちらかを選ばないといけないケースが多いので、「私はどちらを選んだらいいんでしょうか?」と、聞く人もいるんですけど「それは自分で決めて」という返答になりすね。

(会場笑)

それには正解はないんですよ。もちろんその人にとっては正解はあるかもしれないけど、その人の正解は私にはわからないんです。現実を正しく認識すること、できないことはあきらめること、そういうことが賢さじゃないかなと私は思います。