30年間で大きく変化してきたハードウェア

まつもとゆきひろ氏:ほかに、30年間見てきて変化してきたものを考えると、やはりハードウェアの変化はすごく大きいんですね。

(スライドを示して)先ほど話したNEWSのマシンだとこんな感じで、当時はこれが常識だったわけですね。

モトローラのMC68020だったものが、今私が使っているパソコンだとAMDのRyzen9ですね。私のパソコンはちょっと古いので(CPUマイクロアーキテクチャは)Zen2ですけれど、最近だとRyzen9 5900というのが出ています。

クロックだと16MHzが4GHzになっているので、250倍です。メモリ容量だと、メインメモリ8MBだったのが今は64GBで、私のマシンに積んでいるのは30年間で8,000倍です。ハードディスクは156MBを積んでいたのが、1TBのSSDを積んでいるので、6,400倍。さらに外付けのハードディスクもいっぱいあるので、それも足すとものすごいことになるわけですね。

当時のマシンはCPUが1台当たり1個しかなかったんですね。だけど、今だとマルチコアで、私のマシンは12コア24スレッドです。Threadripperだと、64コア128スレッドみたいになったりするわけです。

ムーアの法則のおかげでどんどん性能は良くなっていて、指数関数的増加をしています。最近は物理的限界に到達しつつあって、指数関数的増加はちょっと鈍ってきたと言われることがありますが、それでもハードウェアの値段全体としては安くなっているし、容量では増えているし、クロックは上がっているという傾向があります。

思えば私が中学生、高校生だった40年前は、フロッピーディスクというものがありました。年寄りの昔話になってきましたが、(当時は)240KBもデータが入ったんですね。

中学生だった頃の私には、この240KBは無限の容量で、どうやってこんな容量を使い切るんだろうと思っていました。プログラムを書いても書いても、数キロバイトぐらいにしかならないんですね。240KBもあったら、僕が書く一生分のプログラムはこの1枚に入るんじゃないかと思っていたんですけど、まぁそんなことはなかったんですね。

今私のマシンには、数TBの外付けのハードディスクがあります。何が入ってるかというと、GitHubからダウンロードしてきた大量のソースコードとか、画像データとかいろいろです。240KBは秒で吹き飛ぶ感じで、いろいろ詰まってるわけです。

ディスクとネット帯域はあればあるだけ使う感じで、容量が増えたりハードディスクが伸びたりすると、当たり前が変わってきて、バランスが変化します。

ソフトウェアで2番目に変化したのはスレッドの価値

ソフトウェアにとって、けっこう重要なのがコア数の変化です。30年間で、ソフトウェア的に2番目に変化したのはスレッドの価値だと思います。

Rubyはすごく早い時期からスレッドを提供していました。二十数年前のシングルコアしかない時代にスレッド実装した時は、アルゴリズムの表現手段としてスレッドを考えていました。

例えば、コンシューマプロデューサーモデルとしてパイプラインを作って、データをこっちのスレッドで作って、こっちのスレッドでデータを処理する、みたいなことは考えていました。

正直に言うと、パフォーマンスは気にしていなかったんですね。スレッドはもともとそういう1種のアルゴリズムみたいなものを簡単に書くことができるのですが、当時はそのパフォーマンスをそんなに気にしないという理解でした。

だけど現代において、スレッドは処理を複数にオフロードして、全体的なパフォーマンスを向上するために使われることのほうが圧倒的に多くなったんですね。

例えば理想的に仕事を分散できるならば、それぞれのコアでフルスピードで起動することによって、4コアだと4倍早く仕事が終わります。高速化手段として使われるので、パフォーマンスが超重要になってきたんですね。

そうするとRubyの持っていたThreadやFiberは、シングルコア時代の設計になっているので、あまり向いていないということになります。

Rubyの場合は、Ruby Actorの略でRactorという名前の新しいデータ構造をRuby3.0から導入することによって、マルチコアを活用できるようにしようと考えて、設計を書き換えています。

1995年はプログラミング言語の当たり年だった

30年間で一番変化したのは、このアプリケーション・ドメインじゃないかなと思います。

Rubyはスクリプト言語としてデザインしました。スクリプト言語はデータを加工するための小さなプログラムという感じです。Perlとかシェルスクリプトとか、そういうもので、もうちょっと複雑なことも書けるようにと考えていました。それがだんだんWebアプリケーションのほうに使われ方がシフトしていったという過去があります。

Rubyを作り始めたのは1993年と言いましたが、実際にインターネットで「こんなもの作りました」と発表したのは1995年です。この1995年は、プログラミング言語の当たり年と言ってもいいと思っています。これを言ってるのは私だけなのですけど(笑)。

例えば、Java。たぶん世界で一番有名な言語になったと思いますが、このプログラミング言語がソフトウェアとして公開されたのが1995年なのですね。こんな言語を今サン・マイクロシステムズという会社がやっていますよという発表は、その前の年(1994年)にあったのですが、実際にそのソースコードも含めて発表されたのは1995年です。

それからPHPは、WordPressなどインターネットで一番使われている言語といわれることがよくあるのですが、これが誕生したのも1994年から1995年にかけてぐらいです。

また、JavaScriptも公開されたのは1995年です。

そしてRubyもインターネットで「こういうソフトウェアを作りました」「こういう言語を作っています」「ソースコードはどういうものです」と公開したのは、1995年の12月21日です。

そうすると、いわゆるプログラミング言語の世界でインターネットを構成する重要な言語の多くが誕生したのが、この1995年なのですね。

もちろん、例えばPerlやPythonはもっと古い言語ですし、あるいはCやC++はさらに古いわけですが、今でも使われている重要な言語が、1年でガッと出てきたのはけっこう重要なことなんじゃないかなぁと思います。

Windows95の登場により変化した言語へのニーズ

これは何かというと、言語へのニーズの変化を意味しているんじゃないかなと思っています。つまり1995年は、Windows95が出た年なのです。

Windows95は、マイクロソフトのOSでアドオン、つまりよそからサードパーティのライブラリなりハードウェアなりを買わなくてもインターネットに接続できた最初のOSなのですね。

それより前、一般の人が使うのはパソコン通信でした。Windows95の発売に伴って、いわゆる“The Internet”を使う人がガッと増えて、Webアプリケーションに対するニーズがすごく増加しました。

Webアプリケーションは、当時はまだWebアプリケーションという呼び方をしていなくて、CGIと言っていたような気がします。動的なWebページなど、いろいろな仕事をさせるようなWebページが誕生したのが1995年です。

もちろんそれより前からあったのですが、ニーズがすごく上がって、そういうことができる言語が伸びるタイミングが1995年にあったんじゃないかなぁと思います。そこの隅っこにいられたのは、Rubyにとってすごくラッキーだったと思うんですね。

なので、スクリプト言語、UNIX系のテキスト処理言語として生まれたRubyは、Webアプリケーションというところに新しい住処を見つけて、特に2004年のRuby on Railsの誕生以降は、この領域でものすごく伸びたと言えると思います。

プログラミング言語に関しては、現在再び変化が起きています。例えば最近の言語であるのは、Go、Rust、Swift、Zig、そしてCarbonです。Carbonは発表されたばかりなので海の物とも山の物ともつかないんですけど。

これらの言語は、共通する特徴として静的な型を持っています。ほとんどネイティブコンパイラで、システムプログラミング領域を狙っています。Goはちょっと古いですが、最近どんどん登場していて、話題になっています。

2000年代は、Webアプリケーションを作るのは、Perl、Python、Ruby、PHPのような動的言語だったのが、最近はバックエンドもGoやRustで書きましょうという人も出てきて、その対応ができるぐらい便利な言語ではあります。

良い言語だとは思いますが、静的な言語か動的な言語かというのは、振り子みたいに行ったり来たりしているので、それを考えると今は静的言語が大流行だからといって、これが未来永劫続く、30年後も続くというのはなんだろうなぁ、未来に対しての予想がちょっと硬直しているんじゃないかなという気がするんですね。

10年先、あるいはもっと先かもしれないけれども、動的言語だけど静的型チェックがある抽象度の高いハイレベルな言語が、もう1回流行るんじゃないかなと思うんですね。

振り子がちょっと逆方向に行った時にまだRubyがいて、「Rubyのこんなとこがすごく便利」みたいなことを言ってもらえて、また人気が出るといいなぁという、これは希望的観測なのですけども。

30年間で起きた質的な変化は意外と小さい

そういうのを考えると、この30年間で起きた変化は、ハードウェア的には何千倍とか変化していてすごく大きいのですが、質的な変化は意外と小さいなと思うんですね。

コアになっているUNIXのAPI、システムコールみたいなものは増えていますけど、サブセットとして私がまだ20代でRubyを作り始めた時のシステムコールと同じものを含んでいるので、すごく劇的な変化という感じではないんですね。

1990年代にはUNIXではない新しいOSを作りましょう、という動きがたくさんありました。大学や例えばApple、マイクロソフトなどの企業が研究をたくさんしていました。

だけど、ほとんど生き残らなかったんですよね。この40年で「UNIXでいいや」みたいになっちゃったんですよ。それを考えると意外と変化しなかったなというのが正直なところだと思います。

プログラミング言語も、もちろん新しい言語がどんどん出てきましたが、じゃあ古い言語が駆逐されたかというと、だいぶ減りましたが、Perlもまだあるし、Pythonもまだすごく人気があるし、Rubyも当然あるし、PHPも元気だし、さらに言うと、みなさんからは見えなくなったかもしれませんが、FORTRANやCOBOLも場所を選べば現役で働いているわけです。

そういう意味で、30年ぐらいのスパンでいうとプログラミング言語も意外と生き残っているという感じですね。

先ほども言いましたが、ハードも容量はすごく変化しているんだけど、そうはいっても連続的変化です。不連続な感じで、まったく違うハードウェアはそんなに出てきていないんですよね。

例えば、ハードディスクのグルグル回るスピンドルがSSDみたいな動かないやつになったとか、そういうのは違いといえば違いですが、同じようにデータを保存して、同じようにデータを出してくる点では、物理的実態は違うけど抽象的な、ソフトウェア的なアクセスとしては変わらないという連続的変化なのですね。

変化は意外とゆっくりなので未来は怖くない

そうすると、ここ30年の間に不連続な変化はあまり起きていないということだと思うんですね。変化というのは、ピンポイントで起きると思うんですよ。

この30年間で、私が個人的に不連続な変化だなと思うのは、Webです。30年前は、アプリケーションのほとんどは、インストールする感じの、いわゆるデスクトップアプリケーションでした。

だけど、現代において、新しいソフトウェアビジネスを始めるとなった時に、CD-ROMやDVDを配ってソフトウェアをインストールしますという話にはなかなかならないですよね。

実際にほとんどのケースはWebで済んじゃうんですね。ソフトウェアの作り方そのものが大規模に変わってしまったという意味では、Webアプリケーションは本当に不連続な、エポックメイキングな変化だなと思います。

私が社会人になった1990年代ぐらいまでは、みんな夢見る感じでした。汎用のアプリケーションプラットフォームみたいなものを配って、そのアプリケーションプラットフォームに対して例えばスクリプトなりプログラム言語なりを送りつけると、そこでアプリケーションが動く世界を夢見ていました。

ジェネリックなアプリケーションプラットフォームみたいな商品はいっぱいあったのですが、誰も使わないんですよね。そんなデスクトップアプリケーションをわざわざインストールするのは面倒くさいので、それをするぐらいだったら個別のやつを使うよという感じでした。

でも、冷静になって考えてみると、ブラウザーという、もともとはWorld Wide Webを見るためのツールだったものが、今や汎用のWebアプリケーションプラットフォームになったんですね。だから1990年代の夢は形を変えて叶ってしまったんですよね。そのプラットフォームとしてのブラウザーができてしまったということだと思うんですよ。

それはすごいことというか、驚くべきことだなぁと思います。でも逆に言うと、そこまでなのですよね。30年かけて何が変わったかっていうと、実はそんなには変わっていないんじゃないかなと思います。

わからないですよ。来年ぐらいに量子コンピューターが急に実用化されて、我々がふだんノイマンアーキテクチャで計算していた仕事の半分ぐらいが量子コンピューターにいくみたいな未来が、来年ぐらいから始まる可能性はゼロとは言えません。

でもそうなっても、変化は意外とゆっくりなんじゃないかなと思っています。そういう意味で言うと、未来は怖くないと思います。

未来予想はできないけれど、今見えている変化には対処できる

ジョエル・スポルスキーさんという人がいて、この人は昔マイクロソフトにいて最初のバージョンのExcelを書いたチームの一員なのですが、彼が言うには、「マイクロソフトは滅びない、そしてIBMも滅びない」と。

なぜかというと、未来に変化はあるかもしれないけれども、マイクロソフトもIBMも未来の変化に対して適応するだけの頭の良さと、適応し終わるまで生き延びるだけのお金を持っているからと言うんですね。

みなさんも同じで、これから未来は変化するかもしれませんが、それに適応できるだけの時間を稼げれば未来は怖くないと思うんですね。

一方、未来は予測できません。私の上司が、「そんなことは起きないから」と言ったのが見事にフラグになったように、これは変わらないと思っていたことも、変わる時には変わるんです。未来はこうなると誰かが言っていても、話半分で聞いとけということだと思います。

ただ、現在には対処できるんですよ。今起きている変化に対しては対応できます。例えばRubyの場合は、マルチコアになったので、マルチコアを活用できる仕組みが必要だということがわかってきました。明日できるわけではないけれど、何年もかけて設計して実装して、Ractorを導入しました。今ももっと使い勝手が良くなるように鋭意改善中です。

そういうかたちで、何年かけてもいいから現在見えている変化に対して対応することはできるんだと思います。そういう意味でいうと、継続することそのものが力であると思います。

ほかにも、この30年間で多くの人にとって大きな変化となったのは、オープンソースみたいなかたちのソフトウェア開発が一般的になったことだと思うんですね。

ただ、私が大学生だった1980年代には、すでにフリーソフトウェアというかたちで変化が起きていたので、世界の片隅にあったものが一気に広がることが起きたということだと思います。

それはインターネットもそうです。スイスにあるCERNという機関の中で細々と使われていたものが一気に伸びて、世界を変えてましたし、例えばLispの人たちが知っていたガベージコレクタという技術が、Javaを通じて世界中の人が知るようになったとので、未来はすでにあるんですね。ただ均一に分散していないので、探すとあるところにはあるという感じなんだと思います。

つらつらと、30年間の変化について話してきましたが、繰り返していうと未来は怖くないよ、未来予想はできないよ、だけど、現在見えている変化には対処できるよということです。継続することは大事で、心配しなくていいよというのが今日の話でした。どうもありがとうございました。

(次回へつづく)