• 目次
  • 特集
  • トピックス
  • 未来人

  • カフェテリア
  • 旬
  • トイ

Re:バザール サイバースペースの"共創"新時代

特集 vol.2_2

オープンソース、そして「Ruby」

知的活動の新作法

まつもと ゆきひろ [ネットワーク応用通信研究所]

まつもと ゆきひろ氏は、プログラミング言語「Ruby」の開発者として、今、世界中の同業者やコンピュータサイエンティストたちから熱く注目される存在だ。Rubyにはさまざまなプログラミング言語の良い部分が取り入れられ、また、インターネット上のサービスの開発に適しているため、世界的規模で、爆発的な勢いで普及しつつある。
ソースコードを広くインターネット上に公開して多くの人々が共有し、皆で検証しながら開発をし続けていく。Rubyはそんな“オープンソース”によって開発された、日本初の日本生まれのプログラミング言語である。
そもそも、プログラミング言語の開発とは? そしてオープンソースによる開発の舞台裏とは? 松江を拠点に活動する、まつもと氏の研究所を訪ねた。

まつもと ゆきひろ

インタビュー=常盤拓司[日本科学未来館元スタッフ]

オープンソース、そして「Ruby」(前編)

プログラミング言語「Ruby」

取材にうかがった冬の日、“水の都”松江(島根県)は、小雨にしっとりと濡れていた

インタビューは、松江駅すぐ近くにある「松江オープンソースラボ」で行った。ここは、オープンソースソフトウェアの研究・開発・交流の拠点として、2006年夏、松江市が開設。地域ブランドの創生を目指す「Ruby City MATSUE」プロジェクトを展開するために、企業、技術者、研究者、学生、ユーザーの交流の場として使われている

Q そもそもどうしてプログラミング言語を作ろうと思ったのですか?

端的に言ってしまえば、プログラミング言語が好きだったからでしょうか。

若い頃から関心があって、高校生ぐらいの頃からいつか作りたいと思っていました。もともと、プログラム言語に限らず“ことば”に興味を持っていて、ずっと小さな頃には、いつか自分で自然言語みたいなものを作ってみたいと思っていたんです。

高校生ぐらいの頃にBASICなどを使うようになり、Pascalなどを本で勉強して、自分の考えていることをデザインしたり表現したりできるようになると、プログラム言語をより面白いと思うようになりました。でも、おもちゃのようなものを作るのはそれほど難しくはないのですが、ちゃんと使えるものを作るのは難しくて、実際に作れるようになるまでには10年くらいかりました。


Q Rubyを開発しようと思われたきっかけは?

1993年にPerlの存在を(当時の職場の)同僚が教えてくれたことが直接のきっかけでした。プログラミング言語にずっと興味があって作ってきた人間として、Perlの文法などの言語デザインには納得ができなかったのです。でも、他に良さそうなものも見当たらなかったので、本格的に作り始めることにしました。たまたまいろいろな幸運が重なって、なんとか最終的に使えるレベルに到達したのがRubyでした。

開発し始めて2年くらい経ったとき、そこそこのものになったので、インターネット(当時、ネットニュース)で公開しました。4年半の間にいろいろな方に関心を持っていただいて広く知られるようになり、海外からも関心を持たれるようになって、今に至ったという感じです。

Q 松本さんご自身、Rubyのすごいところはどこだと思いますか?

“他の言語にない何か”は思いつかないですね。あえていうと、組み合わせとそのバランスが良いというのが特徴だと思います。マイナーな言語にしかないような機能でも、良い機能は積極的に取り入れて、(使い勝手の)良いデザインで提供することを実践していますし、他の言語の使いにくいけれど強力な機能を工夫して、Rubyの文法の標準的範囲内のスマートな見かけで提供したりもしています。

プログラミング言語は言語なので、同じことをするにもいろいろな書き方で表現できます。しかし、自分のやりたいことに一番近い表現というのはある。やりたいことを言語の都合で邪魔することがあってはならないと考えています。プログラム言語に機能がないからこれは表現できない、というようなことは発生させたくないですね。

Q 他の言語の特徴を強く意識して取り込んでいる部分はありますか?

LISPとSmalltalkが提供するものを、普通の人が使える形で提供しようと考えています。Smalltalkを使う人にはすごい人が多い。また、Lispもいろいろなことができる言語です。でも普通の人が手にすることは少ない。Rubyではそれらの言語が提供する機能を普通の人が使えるレベルで提供しようとしています。それがRubyの立ち位置であり、Rubyから(プログラミングの世界に)入ってLispやSmalltalkに移行する人がいてもいいし、Rubyにとどまって楽しく遊び続けてくれる人がいてもいいと思っています。

また、Rubyという名前はPerlという名前を意識してつけています。この名前の提案者は(開発当時の)同僚でしたが、かっこいいし、短くて覚えやすい、世界にも広がりやすいだろうと考え、決めました。 オープンソースにする以前、1993年から95年にかけては一人で開発をしていたのですが、Perlの提供する機能をRubyで一通り提供することが開発の中心でした。Perlの機能を意識したのはその機能が一通り提供できれば使えるプログラミング言語のリファレンスモデル(原初モデル)になるだろうと考えたからです。つまり、PerlはRubyにとってのリファレンスモデルでした。


genealogy.gif

プログラミング言語の系譜 制作=日本科学未来館

参考までに、より詳細なプログラミング言語の系譜として、「Computer Languages Timeline」がウェブ上で公開されている。このページでは、不足部分を読者からの投稿により補っていく仕組みを採っている
https://www.levenez.com/lang/

プログラミング言語の開発とは?

Q 一般的にプログラミング言語はどのようにして作られるのでしょうか。

プログラミング言語のデザインは、一般的なものではありません。プログラミング言語そのものを作った人の数は、実は限られています。言語デザイナーは皆それぞれに、異なる理由とプロセスを持っているようです。

作り方の印象としては、言語だけデザインをして物(プログラム)を作らない人はあまりおらず、物を作りながら言語デザインの試行錯誤をしている人が多いと思います。でも、言語デザインの上手な人とプログラミングの上手な人は共通しないことが多くて、初期のプロトタイプが完成した後は、プログラミングの上手な人が手伝って、完成度を上げているというケースが多いように思います。

僕がプログラミング言語を開発する際は、まず文法のデザインから入ります。こういう機能を実現するにはどういう文法がいいのかをあらかじめデザインして、それを実際に作りつつ、試しつつ作っていくのです。

しかし人によっては、例えばPerlのように、小さな関数やプログラムを作って積み上げていくボトムアップ型のような開発プロセスをとる場合もあります。どちらのやり方がいいのかは聞かないでください。僕のやり方がいいと答えてしまうので(笑)。

そこは僕のがいいと言い切っちゃってください(笑)。

少なくともラリー(Perlの言語デザイナー)よりは、文法デザイン関しての才能はあると思います。他のことはともかくとして(笑)。



「松江オープンソースラボ」でもスタッフが研究活動を行っている。スタッフの平均年齢は若く、海好きな人が多いという

Q プログラミング言語を作ることの面白さはどこにあるのでしょうか?

僕は、プログラミング言語を“コンピュータサイエンスの総合芸術”と考えています。字句解析から構文解析に至るところまでは研究が進んでいて、コンピュータサイエンスの中でも定式、形式化が進み、理論的背景もしっかりしている。しかし、データ構造についてはアルゴリズムの研究が必要となり、ネットワークプログラミング機能を実現したければネットワーク関係の知識や技術が必要となる。また、OSの提供する機能を使うならば、システムプログラミングの知識などが必要になります。使い物になるプログラミング言語を一つ作るには、最近のコンピュータサイエンスのトピックのほとんどをカバーすることになるのです。

それは、非常に得難い経験になります。

なぜならば、例えば研究の分野では細分化した研究開発がそれぞれに進められているのに対して、プログラミング言語を一つデザインすることで、コンピュータサイエンスを上から下まで眺めることができるのです。

また、かなり長丁場なプロジェクトになることもあります。例えばアプリケーション開発の場合、良いアプリケーションを作っても数年後には過去のものになってしまう。でも言語の場合は、10年20年という息の長いものになる。老後もずっとやれます(笑)。

Q プログラミング言語開発を「デザイン」と呼んでおられるのはどうしてですか?

実は、プログラミング言語はプログラマーに対してのユーザーインターフェースなのです。それを使ってユーザーの意思をコンピュータに伝達するので。なので、ウェブユーザビリティの研究などで得られた原則や知見は、多分プログラミング言語に応用できると考えています。ワープロやウェブと違って提供するインターフェースが複雑なので、ノーテーション(記法)を工夫する必要があります。実際、Rubyが、大規模で複雑なコンピューティングシステムを簡便に利用するためのインターフェースとして利用されている例もあります。

プログラミング言語を実際に作るのは、それはそれで面白いのですが、プログラミング言語のノーテーション(記述法)もこれはこれで面白いのです。人間にとって、どういう風に書けるようにすれば楽になるのかを考察するのは面白いことですよ。

(後半へつづく)

2006 (C) NATIONAL MUSEUM OF EMERGING SCIENCE AND INNOVATION