SideCI Blog

コードレビュー自動化サービス「SideCI」を運営するSideCI株式会社のコーポレートブログです。



もしOSに断絶があればRubyは死んでいた可能性が高い、まつもと氏がRuby25周年で講演

もし過去のOSに断絶があったら、Rubyが絶命していた可能性はかなり高い。25年のRuby開発の歴史を振り返りつつ、そんな意外な見方を示したのはRubyの生みの親として知られる、まつもとゆきひろ氏だ。

日本生まれのプログラミング言語「Ruby」(ルビー)が25歳の誕生日を迎えた。Rubyが生まれたのは1993年2月24日のこと。それからちょうど25年目となる2018年2月24日に、Ruby25周年記念イベント「Ruby25(ルビー・トゥエンティーファイブ)」が、Rubyアソシエーションおよび日本Rubyの会の後援で東京の品川インターシティーで開催された。

基調講演を行ったまつもと氏は、25年を振り返りつつ、今後のコンピューティング環境の変化とRubyが取り組む技術の方向性について示唆深いトークを行った。ここではまつもと氏の講演と、それに先立って行われた日本Rubyの会代表理事、高橋征義氏の講演「Rubyの1/4世紀」から、Rubyの来し方、行く先を眺めてみよう。

f:id:sideci:20180224135551j:plain Ruby25周年を祝う「Ruby25」で講演した、Ruby生みの親のまつもとゆきひろ氏

UNIXに収斂したOSのランドスケープ

多くのソフトウェアの寿命は数年とか、長くても10年程度と長くはない。プログラミング言語は一般のソフトウェアに比べると息が長いが、それにしてもRubyが25年にも渡って活発な開発を続けているのは驚異的だ。日本生まれで、コアのコミュニティーに日本人開発者が多いソフトウェアプロジェクトとしては、例外的な成功事例といっていい。

Ruby成功の要素にはウェブ開発フレームワーク、Ruby on Railsの存在がある。Ruby開発25年の歴史のちょうど折り返し地点、2005年に登場したRuby on RailsがRubyのエコシステムに果たした影響は無視できない。

今ではTwitterやGitHub、Airbnb、Uber、クックパッド、マネーフォワード、食べログなど多くのサービスがRuby on Railsで開発されている。その背景としてサーバーやクラウドの世界をLinuxが制覇して、開発プラットフォームとしてOSがUNIXへと収斂していった歴史があることは無視できない。まつもと氏は講演で、こんな風に指摘する。

「25年での変化は驚くほど小さい。たとえば、OSはUNIX系に収斂して、サーバーサイドはLinux、スパコンもLinuxになっている。CPUはARMもあるが、x86系に収斂した」

インターネットを支える基本的アーキテクチャーは劇的には変わっておらず、そうしたアーキテクチャーの安定性にRubyが救われた面があると、まつもと氏はいう。

「もし過去のOSに断絶があったら、Rubyが絶命していた可能性はかなり高い」

RubyはなぜRubyという名前になったのか?

1993年に「Ruby」という名前が決まった背景には、どういう経緯があったのだろうか? Rubyは、なぜRubyという名前になったのか。まつもと氏が振り返る。

「(スクリプト言語の)Perlにならって宝石の名前を付けました。Perlができるのと同じようなことができるのを目指していたんです。Rubyのほかにもサファイアとかダイアモンドなども候補だったもののタイプが面倒そうだったのでやめました。残ったCoral(サンゴ)とRubyを比較すると、Rubyのほうが高級感があるのでRubyに決めた」

Rubyは「Perlの次」としてデザインした面があって、次のような名称の偶然もあるのだという。

「6月の誕生石はPearl(真珠)で、Rubyは7月です。また、活字の大きさを表す単位として、pearlは5ポイント、rubyは『ルビ』の語源でもある5.5ポイントとなっています」

どちらを見てもRubyは「Perlの次」となっていた、というわけだ。

Rubyは名称ばかりでなく、多くの要素をPerlから取り入れている。そうした言語デザインについて「正直やりすぎた(笑)」と苦笑いするまつもと氏。最近は「Perlの次と言われるよりも、むしろPythonの隣とか言われる。あるいは斜め後ろとか(笑)」と自嘲気味に語って、25周年記念を祝いに集まったRubyファンから笑いを取っていた。

Ruby開発の25年とは、どんな25年だったのか

Rubyの誕生日は1993年の2月24日だが、実は一般にRuby言語の実装が公開されたのは1995年のこと。では2月24日とは何の日なのか?

「Rubyがいつ生まれたのかというと、概念が誕生したのが誕生日だと思うんですね。ソフトウェアプロジェクトを始めるには名前を決める必要がある。その名前を決めたのが2月24日です。Rubyという名前が概念をRubyという言語を作ったと考えると1993年2月24日がRubyの誕生日です」(まつもと氏)

当初の1993〜1994年は実はまつもと氏が1人で開発していた時期。1995年12月21日にインターネットの掲示板(NetNews)でアナウンスした以下のメールが一般へのお披露目となった。

f:id:sideci:20180226115545p:plain (画面)これがRubyを一般に公開するアナウンスの1995年のメール

高橋氏によれば、1995年や1996年は、まだプログラム一般に関心のある一部の層にしかRubyはリーチできていなかった時期だ。ところが1997年にはネットメディアや雑誌でRubyに関する記事が登場しはじめたほか、オンラインソフトウェア大賞を獲得。「プログラミング言語に関心ある人にリーチしはじめた」(高橋氏)。

1999年には解説本として決定版となる『オブジェクト指向スクリプト言語Ruby』(まつもとゆきひろ/石塚圭樹 著、アスキー)が出版、さらに2000年には英語圏でベストセラーとなる『Programming Ruby』が出版された。高橋氏による25年の歴史の区分によれば、1998年から2003年は「Rubyが広く知られるようになった『認知』の期間だ。

f:id:sideci:20180224133033j:plain (写真)高橋征義氏によるRuby開発25年の歴史の分類 (※高橋氏がまとめたRuby開発25年の主な出来事は https://github.com/takahashim/ruby-history にある)

次の5年は「転換」の時期。特に2004年にデビューして2005年に正式リリースとなったRuby on Rails人気は、Ruby言語を世界的に広めるきっかけとなったし、それまで統一されていなかったRubyのパッケージ管理のエコシステムの発展を促す背景ともなった。

ただ、この時期にはRuby関連のイベント開催が活発になったものの、その多くはRubyが好きな個人の集まりでしかなかった。仕事ではJavaやVisualBasicを使っていて、多くの人にとってRubyは趣味にすぎなかった。それが2008年以降の10年はRubyエコシステムの発展と普及が起こった時期で、米国でも日本でもスタートアップ企業を始めとして、多くのサービス開発にRuby/Railsが使われるようになったのだった。

今回開催されたRuby25は最上位の「ルビースポンサー」8社を含む40社のスポンサーから協賛を得ていたし、会場で投げかけられた「仕事でRubyを使っている人?」との問いかけに会場のほぼ全員が手を挙げるという状態。これは10年前には考えられなかったことだ。Rubyの商業利用に加えて、Ruby Prize、フクオカRuby大賞、Ruby Heroes、RubyKajaなど多くのアワードも生まれている。高橋氏はそうしたRubyの歩みと開発コミュニティーについて「個人が支えるRuby。(そうした)個人を支える組織」という風に説明した。

f:id:sideci:20180224123147j:plain 写真:Ruby25のイベント会場の入り口。かつて個人的趣味の集まりという側面の強かったRubyコミュニティーだが、いまや非常に多くのスポンサーに支えられていることが分かる。

f:id:sideci:20180224180112j:plain 写真:Ruby25の会場には多くの関係者やRubyistが集まった

良いプログラミング言語とは特別なことができる言語ではない

まつもと氏は島根県にIターンして、松江市名誉市民となっていることで知られている。そのまつもと氏が島根に移住したばかりのころに受けたインタビューで、地元新聞記者の質問に困ったことがある、という。

「あなたが作ったRubyでは何ができるんですか?と聞かれたんですけどね、すごく困った(笑)」

プログラミング言語はチューリング完全と言われるものであれば「できること」はすべて同じだ。言語Aに「できて」、言語Bに「できない」というようなものはない。

まつもと氏は言う。

「いま現在人類に知られていないアルゴリズムも含めて(Rubyで)全部書けるんです。やればできる」

ただ、もちろんだからといってプログラミング言語が全部同じなどということはなく、つまるところ、プログラミング言語の進化は生産性の向上がテーマだった。

「人間の理解力には限界があるからプログラミング言語がでてきた。そうでなければ全部機械語で書けばいいわけですからね」

だから良いプログラミング言語とは「短い時間で開発できること」「短く簡潔で直接的な表記ができるもの」「オブジェクト指向やMVCといった優れた抽象化を提供するもの」となるという。

Ruby3:3倍速く、分散処理に対応し、静的解析が可能なRuby

現在のRuby最新版は2017年12月にリリースされたRuby2.5で、現在開発中のバージョンは2.6だ。そして次の大きなマイルストーンとなるのは「Ruby3」だ。Ruby3はいつごろ登場し、そして、どういうものになるのだろうか?

まず1つ重要な論点として「連続的な変化をしようと思っている」ことを、まつもと氏は強調する。Rubyは2007年にRuby1.8から1.9へとバージョンアップしたとき、大きな非連続な進化を遂げた。実際には両方とも1系バージョンであるものの、この変化は中身も文法もRuby1からRuby2へのバージョンアップと呼ぶほどの大きな変更だった。その結果「1.8と1.9の間の非互換性でコミュニティーが分断されてしまった。それはとても不幸なこと。だから、そうした分断はRuby3では避ける」と、まつもと氏は言う。こうした「分断」は過去にPythonやPerlでも起こった経緯がある。

Ruby3のリリースは「いつ」と決めているわけではないという。大きく3つの観点で十分だとなれば、そのバージョンに「Ruby3」のラベルをつける。これはLinuxカーネル開発コミュニティーのアプローチも参考にしているという。

3つの観点というのは、高速、分散、静的解析の3つ。現行バージョンより3倍高速で分散処理に対応し、静的解析についても機能を取り入れた実装が提供でき次第、「これがRuby3です」とラベルをつけることになる。

Rubyを3倍速くしようと宣言し、「Ruby3x3」(スリー・バイ・スリー)というスローガンをまつもと氏が掲げたのは2年半前のことだ。その進捗についてまつもと氏は語る。

「2年半前に3倍と言いはじめたときには、自分でも『できるも八卦、できぬも八卦』くらいに思ってた。ところが今はJITを使えばできるのでは、という感じになってきた。明日には無理かもしれないけど、あと1年とか2年あれば、2013年のバージョンに比べて3倍速いというのは案外不可能ではないというところまで来た」

JITはJust-in-Time(コンパイラ)の略で、Javaなど先行する言語処理系では取り入れられている高速化技法だ。JITは起動時にコンパイル処理が走るため、小さなコマンドラインツールを繰り返し起動するようなスクリプト言語的な用途には向かない。一方、いったん走り出したら徐々に速度を上げていく特徴からサーバアプリには向いている。このためJITをデフォルトにするかどうかなどは、まだ決めていないそうだ。すでに次バージョンのRuby2.6にはMJITと呼ばれるJIT実装が取り入れられていて、起動オプション「--jit」とすることで実際に利用できるようになっている。

ほかにRuby3に向けて、マルチコア、マルチノード、マルチデータセンターといった分散環境での処理が「Rubyらしく書ける」ことも大きな目標。これは現在進行中のコンピューティング環境の変化に合わせるものだ。

現在、Rubyコア開発者の笹田耕一氏が「Guild」(ギルド)というプロジェクト名で取り組みを始めている。RubyにはThreadクラスと呼ぶスレッド実装があるが、並列実行は極めて限定的なサポートとなっている。一方、Guildのほうはマルチスレッドプログラミングにおけるロック・アンロックの制御などプログラミングの困難さを避けつつ、並列実行が可能なモデルを実現するものとなるようだ。

(参考リンク) 2016年のRubyKaigiにおけるGuildの発表動画:https://www.youtube.com/watch?v=WIrYh14H9kA と、発表スライド:http://www.atdot.net/~ko1/activities/2016_rubykaigi.pdf

静的解析についていえば、もともと動的言語の中でも特に動的度合いが大きいRubyでは難しい面がある。ただ、IDEなど開発環境関連ツールで知られるJetBrainsがRubyでのプロファイル型解析に取り組んでいるほか、Rubyでは「Steep」と名付けられた静的型推論の実装が進行中だ。SteepではTypeScriptのようにソースコードとは別ファイルに型情報を持たせるような実装になる。ここにはまつもと氏の徹底したこだわりがある。「int a = 5」にある「int」のような型情報や宣言をソースコードに書かずに済むなら書きたくないという。これは主流派の意見というわけではなく、ちょこちょこと型情報を書くことで処理が速くなるなら書けばいいのではないか、というプログラマも少なくない。ただ、Rubyの思想として「同じことを冗長に書くのは良くない」とする「DRY」(Don't repeat youself)の原則というものがある。処理系がソースコードから推測できる、あるいは実行できるのであれば、型宣言は本質的に不要な情報のはずだというのがまつもと氏の主張だ。コンピューターの都合に人間側が合わせる必要なんてない、そんなのは楽しくない、というRubyのスタンスが明確に出ている意見と言えそうだ。

高速化も分散処理も、静的型推論もいずれも簡単ではない。だからこそ重要という側面もあるという。「Rubyが生き残るにはワクワクするテーマが重要」(まつもと氏)。1960年代にケネディー大統領が人類を月に送るのだと宣言したのと同様に、専門家ですら無理だというような目標を掲げて「やるぞ」と宣言することが大事なのだという。

f:id:sideci:20180224140035j:plain

未来のプログラミングはテディベアプログラミングのように!?

「ソフトウェアの開発はインタラクティブになっていく」とも、まつもと氏は予想する。現在のRubyでは、例えばメソッド名を打ち間違えたまま実行すると、Google検索のように「もしかして:」と表示される機能が実装されているが、これが開発中にタイプするそばから提示されるようなイメージだ。

もう少し近未来的なプログラミングの世界について「テディベアプログラミング」も、まつもと氏は例に挙げる。テディベアプログラミングというのは、文字通りぬいぐるみのテディベアを使ったプログラミング。机の上にテディベアを置いておき、自分が何を実装しようとしているか、何が問題で行き詰まっているかをテディベアに話かける。冗談のような話だが、対話によって思考が明晰になることで生産性が上がると言われている。もともとペアプログラミングという2人が1組になって作業中の思考を言語化しながらプログラミングを進める開発手法から出てきたもので、話しかける相手が人間でなくてもどうやら効果があるらしい、ということから出てきたのがテディベアプログラミングだ。実際まつもと氏は子育て時に赤ん坊を抱っこして、赤ん坊に話しかけることによってRubyの特徴的で強力な文法である「ブロック」を思いついた経験もあるそうだ。

将来ぬいぐるみのテディベアではなく、IDEが果てしなく進化したような形で対話的にプログラミングができれば、と少し夢物語のように語ったまつもと氏だが、そこにあるのは、「たのしいRuby」「たのしいプログラミング」という価値観だという。思考の明確化、思考のツールにRubyがなれるといいとして、まつもと氏はこういう。

「かたくなに人間のためにRubyを作ってきました。これは向こう25年も全く変わらない」

例えば型情報を明示的に書いたほうが処理系の高速化ははるかに容易だが、これは人間がコンピューターに歩み寄っている姿そのものだ。それが悪いわけではない。プログラミング言語は多かれ少なかれ人間側に歩み寄りつつ、コンピューターの都合も勘案してバランスを取っている。ただ、Rubyは徹底して「人間のため」を貫いている。だからこそ多くのプログラマが「愛している」と言ってはばからない珍しいプログラミング言語となっているのだろう。

かつて「コンピューターは難しい」と言われることが多かったのが、この25年で「楽しい」という人々が多く出てきた。そうした状況の変化を指摘しつつ、まつもと氏は「もっと楽しいが当たり前になってほしい」と言って講演を締めくくった。

Rubyは25歳。もう大人だが、まだまだ若くもある。これから25年でRubyがどんな変化を見せてくれるのか楽しみだ。

f:id:sideci:20180224145226j:plain

「サプライズ」として、まつもと氏の講演後に実の娘2人が登壇し、父に花束を贈呈した。ふだんプログラマとして知られるまつもと氏だが、「父は子煩悩でほとんど叱るということがなかった」と長女は語った。次女は「好きなことをして生きてきたというのを体現したような父を見て育った」と誇らしそうに語った。

(SideCI特別取材班)

2月28日公開予定!
Ruby25周年記念イベント後半に行われた、まつもとゆきひろ氏とRebuild fmで有名な宮川達彦氏の特別対談記事についても鋭意作成中です。