| 川井: |
GNU Emacsについて少しご説明いただいてもいいでしょうか?
|
| 大場: |
GNU EmacsはUNIX上で動くもっとも有名はエディタの1つで、テキストを書いたりプログラムを書いたりするツールなんですが、単なるエディタではなくて、中にプログラムを実行するインタープリターを内蔵していまして、Lispプログラム※3を書いて拡張したりもできるんですよ。エディタとしてだけでなくて、メーラーとして使ったり、Webブラウザを実装したり、OSみたいに使う人がたくさんいて、ハッカー御用達ツールなんです。当時はUNIX上でしか動かなかったんですが、宮下さんが、Mule for Win32を作ったことでWindows上でも動くようになったんです。
|
| 宮下: |
基本的には大場さんの言うとおりなんですが、1つ補足すると、ほとんどのプログラマというかデベロッパーにとってエディタって一番使うものなんですよ。プログラムのソースコードを書いたり、Emacsっていう強力なエディタ上ではコンパイルしたり実行したりテストをしたり身の回りの環境をやったり。自分とコンピュータの間をつないでくれる一番強力なツールがエディタなんですね。今の人たちってオフィスとかWebブラウザを使ってコンピュータとインタラクションするんでしょうけれど、わたしたちみたいなエディタに慣れている人間にとってはエディタがコンピュータと対話する上での一番大きな道具で、慣れてくると自分の意思をそのまま表現できる、コンピュータに対する言葉のようなものなんです。
|
| 大場: |
Emacs独特のキーバインドとかがあって、1回それに慣れるともう他のものが使えなくなっちゃうような麻薬的なものなんです。あとはどんどんカスタマイスができるので、自分の設定じゃないと他のコンピュータが使えなくなったりとか、そういう風にのめりこんでいきますね。
|
| 宮下: |
なので、今でも非常にユーザーが多いんですよ。
|
| 大場: |
前に聞いたかもしれないんだけど、なんでGNU Emacsを移植しようと思ったのか聞きたいんですが。
|
| 宮下: |
私、インターネットに本当の意味で出合ったのが大学の頃だったんですが、何もかもが普通じゃないように見えたんですよ。あのときに物理とかに興味を持たないで、そっちに進んでいたらまた違う方向にいってたんじゃないかくらい強力な出会いでした。まず、何が普通じゃないかというと、インターネットって今ではみんな普通に使ってますけど、他人のリソースを自分が使うんですよ。これはびっくりすることなんですけど、ネットワークリソースでもなんでもある意味において所有権がおかしいんです。それまでは、自分のネットワークの持ち物は自分のネットワークとして管理していたんですけど、インターネットは他人のネットワークをうまく使って、それをシェアして動くっていうシステムによって出来上がってるんですよね。同じように、インターネット上で動くソフトウェアとかシステムっていうのはほとんどボランタリーベースに作られていたんですが、その中でかなり大きな力を持っていたのが、リチャード・ストールマンっていう人がはじめたGNUというものだったんです。彼は、本当にそういう文化にどっぷりつかっていて、ある日、自分の成果が会社に取り上げられてしまうという事態を非常に問題だと感じた結果、「GNUマニフェスト」っていうのを出して、フリーソフトウェアの活動を始めた人なんです。
|
| 川井: |
そういう時代だったんですね。
|
| 宮下: |
そうなんです。それでちょうどその時に、私自身、Windowsの仕事があって、自分の使えるエディタをWindowsでも使えるようにしたいという欲求がきっかけだったんです。フリーソフトウェアですからソースコードがあるんですが、GNUのソフトウェアは改変したものを再配布できたんです。むしろ反対にソースコードにアクセスできなくちゃいけないっていうしばりまであったんです。ストールマン曰く「公共のものは公共に返さねばならない」ってやつです。そのシステムを使わせてもらえるのはありがたいことだなって思って、大学1年生のときに自分の技術的チャレンジもこめてやってみようと思ったんですね。でも見てみると、これが分からないんですよ。当時の実力では全然足りないわけです。数年たってから分かったんですが、GNU Emacsってとんでもないシステムで、およそほとんどのコンピュータシステムが詰まっているんですね。最初のときは全然気づかなくて、ただのエディタぐらいにしか思ってなかったんです。もともとストールマンはAIというかLispの研究をしていて、GNU Emacsは彼の研究の成果をそのまま詰め込んだ構造をしていて最初は本当に歯が立たなかったんですよ。まあ、普通に考えたら挫折してるところなんですが、ちょっと気合を入れて読みまくったんです。それが私の今のソースコードを書く力の80%くらいになっている気がしますね。
|
| 大場: |
それは大きいね。
|
| 宮下: |
ものすごく大きいですね。でも、そもそも実力のない人間が最初に読むにはあまりにもハードなものなんですよ。その中には現代のコンピュータシステムが持っているほとんどのエッセンシャルなテクノロジーが入っている。コンパイラ※4のテクノロジーまで入っているんです。
|
| 大場: |
そういう意味ではOSに近いものですね。
|
| 宮下: |
そう、OSに近いですね。
|
| 川井: |
なるほど。
|
| 宮下: |
これが半年くらいするとそうは言っても分かるようになってくるんですよ。最初は本当に分からないんですが、ひたすら読んでいるうちに分かるようになってきて、この時に結構な能力を身につけたんですよ。ソースコードっていうのは、例えばXに10を代入するだとか何かを表示するだとかそういう単純な繰り返しになっているじゃないですか。でもそういう見方じゃなくて、この人は一体何をしたいんだろうかってことを考えるようになったんです。腕のある人が書いたものならざっと見た瞬間に意図が読み取れる能力が身について、それ以降は自分でコードを書くのも本当に早くなりましたね。
|
| 川井: |
そんなことができるんですか。。。
|
| 宮下: |
およそ、プログラミング言語で何かを書くっていうのは、何か意味を伝えたいってことだと思うんですが、その伝えたい意味の方を早くトランスレイトすることができるようになりましたね。
|
| 大場: |
なかなかこういうことを言う人はいないと思うんですが、彼のこの能力は、本当にすごくて、ソースコードを読むだけでその人の人となりを類推できてしまうんです。
|
| 宮下: |
よいコードは、何をしたいのかストレートに伝わってくるんです。実力があるレベルまできている人のソースコードは意図がわかるんですが、それ以下だとこれは本当に意図が分からない。そういう意味では、ソースコードって文章と変わらないんですよね。書けない人に教えたりすることもあるんですが、「一体、何がしたいの?」と聞いても本人が分からないんですよ。分からないままに書いてしまっているんでしょうね。
|
| 川井: |
しかし、そういった能力が身につくというのはどういう仕組みなんでしょうか?
|
| 宮下: |
実は自分でも疑問に思って考えていて、結論にたどり着いていないんですが・・・プログラミングの世界でもボキャブラリーみたいなものがあって、オブジェクト指向というのはいい意味でそういうレベルになっていて、ある一つの言葉の意味をあらわすときにとてもよいものの考え方を提示した一連の知識セットをどんどん作っていったわけです。そういう知識セットとコードとの対応関係がわかってくると、結局どれを使いたいのかどういうことを表現したいのかってことがもう少し高レベルになってくる。そういう影響を与えているのはオブジェクト指向だけでなく、現代のコンピュータや通信のアーキテクチャー全体だと思うんですよ。ただ、エンジニアっていうのはレベルが高い人であればあるほど、ユーザーとか顧客とかをマシンの理解できるレベルにトランスレイトしていくんですが、マシンは決してきれいなものではないので、その間をつながないといけないんです。だから逆にアーキテクチャーだとかを構築するなりして、(マシンや人が)理解できる言葉に変換できる能力がどんどん高くなっていかなくちゃいけない。すると、ソースコードにもその今までこういう表現をすると伝わるなってことを綺麗に書けるんです。全人的な能力を求められるんでしょうね。意味レベルのところを1つ1つ作り上げていって、新しいセットを覚えていくと、また効率よく意味が理解できるようになる、もっと読めるようになる、書けるようになるっていうのがありますね。考え方なんでしょうけどね。うーん、説明になってないですね。。。まだこれは自分でもちゃんと理解できてないんですよ。
|
| 川井: |
なかなか難しいところですね。
|
| 宮下: |
よく思うのが、頭のセットの限界点っていうのは自分のコードの書ける限界点になっていますね。つまり、頭の能力のめいっぱいを使ってコードを書く。そこがこぼれそうになると危険信号なんです。そのセットの中でストーリーが収まっているうちは動くんですよね。これ駄目だなって思うと確実に駄目なんですよね。そういうコードの書き方をしていますね。
|
| 大場: |
それはいつ頃から?
|
| 宮下: |
やっぱりGNU Emacsのコードが分かるようになってからですね。あれは、C、Lisp、他に怪しげな言語みたいな構成になっていますからね。
|
| 大場: |
CCL※5?
|
| 宮下: |
そうCCLとかもね。アルバイトでデバイスドライバとかも書いたりもしていましたけど、やっぱりあの時のトレーニングが大きかったですね。その時に、「自分の成果を還元していかないと」って思って、せっかく自分で作ったんだから、頑張ってコントリビュートしてみましょうと思って始めたのがMule for Windowsだったんです。それで大場さんたちのような素晴らしい人たちと出会ったわけです。そこで私の知っている人たちの中でもベストな人たちが集まってきてくれたのが私にとっては本当に財産ですね。
|
| 川井: |
なるほど。
|
| 宮下: |
昔は、こんな感じでオープンソースが流行るなんてまったく思ってなかったんですよ。私の所属しているこの会社にしても、今でこそとてもオープンソースにコントリビュートしていますけれど、昔はそうなるなんて本当に思ってなかったですね。
|
| 川井: |
確かにそういう印象はありましたね。でもこれってまだ会社に入る前ですよね?
|
| 宮下: |
そうですね、ずっと前ですね。その後にMuleプロジェクトに本格的に参加することになるんですが・・・このままいくとどこまでも脱線しそうなんで、大場さん、ちょっとナビゲートをお願いします。
|
| 大場: |
はい。じゃあ、EmacsとMuleの関係について少し説明しますね。Emacsはさきほど説明したエディタ環境なんですが、もう1つMuleって呼ばれる部分があって、もとのEmacsは英語圏でしか動かないセットだったんですが、これを国際化しようとする、産業技術総合研究所の半田剣一さんが始めたプロジェクトがあったんです。それがMultilingual Enhancement GNU Emacs、略してMuleです。元々は別のプログラムだったんですが、今は統合されていて、Emacsの中にMuleが入っていて、Emacsを使えば最初から国際化されているようになっていますね。日本でもインドとか他の国でも使えるようになっています。
|
| 宮下: |
そのときに産業技術総合研究所の半田剣一さんと戸村哲さんが拾ってくれて、Muleプロジェクトにお世話になったんです。そのときあたりから歯車がまた1つ進んだっていう印象がありますね。それから自分の中で特にユーザーインターフェイスまわりでの形を模索したかったんです。まあ、それにあまり言えないんですが、いろいろあって(笑)、いつまでもMule for Windowsってのもあれだろうということで、新たにMeadowっていう名前をつけて、Muleプロジェクトの中で自分はこの領域の仕事をしますってことで始めたんですよ。そのあたりが大学の4回生くらいですかね。いろいろあってって言いましたけど、ちょっと真面目な話をすると、オープンソースのプロジェクトの中で人間関係って馬鹿にできないんですよ。私が見ている中でもすごい分裂したりだとか喧嘩したりだとかあるので、その中で前に進めるソーシャライゼーションみたいなものは生身の人間のやっていることなので、すごく重要なんです。それについてはエリック・レイモンドがいろんなことを書いていたりしますけど。。。でも、そういうプロジェクトの中でいろんなレベルの高い方がいて、いろんなことを教わったりしましたね。
|
| 大場: |
それが、「Muleたこ部屋」だっけ?
|
| 宮下: |
そうなんですよ。これが面白くて、「Muleたこ部屋」っていうのを産業技術総合研究所では作ってもらっていて、腕のある人間を集めていたんです。EmacsでのDevanagari(インドで用いられている文字)実装をされていた川幡太一さんとか、SEMIなどのインターネットメッセージ処理を手がけられていた守岡知彦さんだとかLinuxカーネルのコントリビューターとして有名なg新部裕さんといった方々がいて、本当に腕利きが集まってMuleのために喧嘩したり激論したりしたのはいい経験でしたね。
|
| 川井: |
若いうちから相当にもまれているってことですよね?
|
| 宮下: |
これは本当に財産ですね。これがなかったら、今の自分の中での自信はなかったでしょうね。勿論、私以上の人もいるでしょうけど、今では、たいがいの人間よりはコードが書けるっていう自信があるのはそういう経験があってのことなので、そういう環境を作ってくださったことには本当に感謝していますね。
※3 FORTRANやCOBOLと並び、初期からあるプログラミング言語のひとつ。動的な片付けなどLispの多くの機能がRubyにも影響をあたえている。シンプル(すぎる)記法から生み出される柔軟性により現在でも熱烈なファンがいる。
※4 プログラム言語をコンピューターで実行できる形式に変換するためのプログラム。
※5 Code Conversion Languageの略。Emacs内蔵言語のひとつ。
|