ObjectSquare [2001 年 11 月号]

[OOエンジニアの輪!]



OOエンジニアの輪!

〜 第 12 回 一杉 裕志 さんの巻 〜

今回のゲストは一杉 裕志さんです。一杉さん は産業技術総合研究所でオブジェクト指向言語に関して 研究しておられる研究者であり、今回は現在開発中 の MixJuiceEPP という 言語について語ってもらいました。

MJ ( MixJuice ) : クラスからモジュールとしての機能を分離し、代わりに差分プログラミングの機構と モジュールとを融合させたプログラミング言語です。
EPP : 拡張部品を追加することで言語機能を拡張することができる拡張可能プリプロセッサです。

尊敬する人 中村 修二 さん
(カリフォルニア大学サンタバーバラ校教授: 青色発光ダイオードの発明で有名)
好きな言葉 いい技術は必ず普及する

オブジェクト指向との関わり

-- まず、最初にお聞きしたいのですが、産総研(産業技術総合研究所)ってどのようなところなんですか?

もともとはですね、電子技術総合研究所っていう名前だったんですけども、国立の研究所 だったんですよ。で、通産省がありまして、その下に工業技術院っていう役所があって、 その下に電子技術総合研究所とか、何とか研究所とかが幾つかあったんです。それが、今 年の4月1日に独立行政法人というものになりまして。でも、今のところはむかしとあまり 変わってないですね。基本的には国から研究予算をもらって研究するという感じです。

-- オブジェクト指向はいつ頃から取り組まれているのですか?

産総研に入って7年ぐらい経つんですけども、学生時代からオブジェクト指向言語を使っ た研究をやっていたんですよ。専門はプログラミング言語なんですけども、プログラミン グ言語の言語処理系をオブジェクト指向言語で書くっていうことをずっとやっているんで すね。要するに、インタプリタとか、言語のランタイムシステムとかですね、あと、コン パイラとか。

-- なるほど。

昔から拡張可能なソフトウェアっていうものにすごく興味があって。拡張可能言語っての もその一つで、プログラミング言語の言語処理系をオブジェクト指向言語で書けば拡張性 が高くなるのではないのかと思って、学生の頃、チャレンジしたわけです。

いまで言えば、Singleton パターンとか、Decorator パターンとか、Strategy パターン とか、Factory Method パターンとか、そのあたりを駆使して出来るだけ拡張性を高くし ようということに徹底的にこだわって作ってみたんですね。で、拡張性はかなり高くなっ たんですけども、いろいろ問題がありまして。どうも今のオブジェクト指向言語には、ま だ足りないところがあるなぁって思ったんですよ。そのあたりを突き詰めようと思いまし て、産総研に入って7年にもなりますけど、ずっと研究しているという状況です。

-- オブジェクト指向言語の方にかなり趣向されているという感じですかね?

そうですね。

-- だいたい、一通り言語系はもうやられているんですか?

いや、自分で主に使っている言語ってのはそんなにないですね。C++ とか、CLOS っていう Lisp。で、Java ですね。他の言語は、言語の仕様書をパラパラと眺める程度ですね。


オブジェクト指向言語への不満

-- オブジェクト指向のどの辺が良いみたいな気に入ったきっかけはありますか?

良い点はですね、複雑な概念が抽象化できる、よく言われていることですけども。あと、 動的にデータ構造がつくれて。悪い点というのは一杯ありましてね。

-- 是非、聞きたいですね。

学生の頃に拡張性の高いソフトウェアってのに徹底的にこだわっていろんなシステムをオ ブジェクト指向言語でモデル化しようとプログラムを書いてみたんですけども、どうもう まく行かないことがあるんですね。例えば、ビデオテープレコーダのシステムを例にとり ますと、ユーザとテープとテープレコーダの3つのオブジェクトがあるっていうのが素直 なモデリングだと思うんですね。で、ユーザは何ができるかというと、テープをテープレ コーダに差し込んで、再生ボタンを押すということが出来る。問題は、テープとテープレ コーダの間のインタラクションで、ユーザにとっては見えないんだけど、テープをテープ レコーダの中に入れるとテープの蓋が開いてテープレコーダのヘッドと密着してベータな らベータ、VHS なら VHS という方式で記録を始めるわけです。テープとヘッドの間のインタ ラクションというのは、情報隠蔽されるべきものだと思うんですね。ところが、素直に設 計すると、テープレコーダはテープレコーダで内部の情報が情報隠蔽されているし、テー プはテープで内部の情報隠蔽されているので、そうすると、どうしてもヘッドとテープの 間のインタラクションはパブリックなインタフェースにならざるを得ない。ところが、ユ ーザはそこはほんとはアクセスしてはいけないものだから、そこがうまく情報隠蔽できない。

インタビュー風景

-- どのようなところが問題なんでしょうか?

名前空間の制御の方法に強い制限があるってとこが問題なんだと思います。で、C++ だと friend ってものがありましてね、それでうまく行くときもあります。でも、それは汚い し、制限があるんですね。その後にネームスペースってものが入ったりとか、あと、Java だとインナークラスとかネステッドクラスとか呼ばれているものが入って来て、そこでち ょっと表現力が上がったんです。要するに名前空間を入れ子にできるので、さっきの例で いえば、テープとビデオレコーダの間のインタラクションを隠蔽してしまうことができる ようになったんです。でも、3つのクラスが重なっているというのは表現できないですね。

僕は、この原因は、結局、クラスってのは、本来違う2つの機能を併せ持っているところ に問題があるんじゃないかと思っているんですよ。要するに、クラスはもともとオブジェ クトってものを生成するための雛型なわけですね。それに、情報隠蔽の単位という役割も 持たせてしまっている。それは、小さいプログラムだと非常に良く機能するんですよ。

-- なるほど。

ところが、これが、今のオブジェクト指向言語で表現できない。

で、このあたりを何とかできないかなって思って、ずっと研究してきたんです。 それで、最近、ようやくこれでいいんじゃないかなって思ったものができたんです。

-- それが、MJ ( MixJuice )?

ええ、そうです。


クラスがもつ問題を分離した MJ

-- なんとなくわかりました。 私の言葉で言い直させていただくと、クラスってのは責務を分担する単位としては 適切だけど、情報隠蔽ってのはコラボレーションによってどう隠蔽されるのかって いうのが異なってくる。だから、どう相互作用するかっていう流れの中で切ってい かないと情報隠蔽ってのはうまくいかないよ、ってことですよね?

インタビュー風景

そうですね。まさに、UML でいうコラボレーション図っていうのが、けっこう情報隠蔽の 単位として適している場合があるように思うんです。これは、僕だけが言っていること ではなくてですね、同じことを言っている人がいるんですよ。それは、論文にもなっている んですね。コラボレーションベースドデザインとかその人は呼んでいますが。あと、ちょっ と考え方が違うんですけども、アスペクト指向 ってのが非常に有名になってきていますね。

-- アスペクト指向とこの MJ の違いってのはどこにあるんですか?

アスペクト指向と似ているところは多いんですよ。彼らもですね、問題にしているのは、や っぱり、複数のクラスにまたがった機能を再利用の単位としたいっていうことを言っている んですね。で、違うところはどこかというと、今、アスペクト指向の実装として AspectJ っ ていうプログラミング言語があるんですけど、それは、非常に動的な側面を重視しているん ですね。MixJuice の方は、AspectJ よりは、柔軟性は低いんですけど、そのかわり安全性 を重視していて、ちゃんと部品をつなぎ合わせたときに型チェックをするので、その出来た 結果のアプリケーションの安全性が、AspectJ よりかは高いっていう特徴を持っています。

-- MJ を作る上で、どのようなところに気を使われたんですか?

これを設計する上でシンプルさってものにすごく気をつかったんですよ。この言語の前にも つくってみたんですけど、それは、非常に複雑な言語で、とてもそれは人に説明しきれない ものだったんです。それを時間をかけて、すごくシンプルにして、今ここまでたどり着いた んです。

-- なるほど。

で、先ほどもいいましたが、やっぱりコラボレーションの単位を再利用の単位とするべきだ って思っている人は他の研究者にもいて、やっぱりそれぞれ違う言語を提案しているんです。 でも、どうも僕からみるとずいぶん複雑なんですよ。とても一般のプログラマに普及すると は思えない、自分も全然使いたいとは思わないっていうのが多いんですけども。

そこで僕がつくるものは、今までできなかったこともできて、なおかつ、今までよりもさら にシンプルな言語にできないかなって思って、すごく頑張ってみたんです。

僕はうまくいく理由っていうのは、今までは本来違う概念だった、クラスとモジュールを 無理やり一つにしていたのが問題であったのに対して、MJ では、それらの2つの概念を分けて、 クラスという単位とはまったく独立に自由にモジュールの切りわけができる。そうゆう自由度 を増したところが、この言語の書きやすい、うまくいく理由ではないかなぁって思っています。

-- 責務と情報隠蔽ってのは少し違っていて、 情報隠蔽ってのは、コンテキストに依存するよって言う話はなんか新鮮で。 言われてみて改めて考えるところがありますね。


MJ の反響

-- MJ の反響とかはどんな感じですか?

インタビュー風景

反響ないんですよ。何十本かはダウンロードされましたけれども。やっぱり、プログラミン グ言語ってのは、普及させるのがすごく難しいと思うんですよね。それに加えて、今までと は違う考え方をした言語なので、ますます受け入れがたいものになるんだと思うんです。 だから、どうやって売り込んでいこうかなって未だにすごく悩んでいるんですが。でも、自分 自身でいろいろプログラムを書いてみた感想としては、これは結構いけそうじゃないかなって 思っているんですよね。

-- 具体的な応用例とかあるんですか?

応用例はいろいろ考えているんです。例えば、オープンソースのアプリケーションの記述 言語に適しているんじゃないかとかですね、いろいろ売り込み方を考えているんですけど も。今は、Linux とか GNU とかが流行っていますが、そこで複数のコントリビュータが作 った patch をマージするところが一番大変なんです。コンフリクトが起こったりすると。 そうすると、誰かが中身を理解してうまくマージしないといけないんですけど、その辺を少 しでも簡単にできないかなぁと思ってて。そのためにこの言語は役に立てるんじゃないかな って思っているんですけども。あらかじめ、機能的に独立したものを独立したモジュールと して書けるという言語ですから、別々に書かれたものが比較的安全にマージできるのではな いかなと思っています。

もう一つは携帯電話上のあるいは PDA 上のアプリケーションというのを考えていて。あれは 各個人が持つものですから必要とする機能っていうのは、個人個人の事情によって千差万別 なわけです。ところが、携帯電話はメモリが非常に小さいっていう制限がありますよね。こ れが、パソコンでしたらメモリが潤沢にあるから、すべての人が必要な機能を全部盛り込め るような万能アプリケーションを作っておけば、だいたいの人が満足するでしょう。例えば、 マイクロソフトの Office なんかのアプローチですね。でも、携帯上にはそんな万能ソフト ウェアってのは絶対乗らない。そこで、どうすればいいのかというと、あらかじめ必要な機 能を機能毎にモジュール分けしておいて、ユーザは自分の必要な機能だけをこれとこれとい うふうに選んで、それを組み合わせてダウンロードする。これによって、必要最低限の機能 を持ったアプリケーションを自分の携帯電話上にダウンロードできる。

-- この話っていうのは、汎用的なクラス構造があって、 その中の必要な機能だけをモジュールで括りだしてビルドしてあげると、 使ったところのクラス構成だけでできた Java ソースができるから 小さくなるという考え方でいいですか?

そうですね。

今までの技術を使えば、例えば、ダイナミックローディングを使うとか、あるいは、デザイン パターンの Strategy パターンとか、そういうものを使うことによってやっぱり同じようなこ とはある程度できると思うのですが。MixJuice を使うことによって、今までの言語よりは簡潔 にかける、素直にこの機能だけをこのモジュールっていうふうにモジュール分けができるって とこが特徴だと思います。

-- この MJ を実現させている仕掛けってのが、 EPP っていうプリプロセッサが後でマージしてくれるからなんですよね?

そうですね。JavaVM が持っている継承機構を使っているんですが、バイトコード編集を して実現しています。

-- だから、MJ で作っても、最終的に普通の Java のアプリケーションになるんですね。


Java 言語への不満から生み出された言語 EPP

-- Java の魅力とか、EPP の開発のきっかけにも 結びつく Java の限界などをお話ししていただけますか?

Java のいいところは、シンプルで非常にきれいにまとまっているというところだと思いますね。 C++ がひどすぎたという意見もありますけども。C++ は、なんでもかんでもいろんな機能を取 り込んで非常に複雑化して、巨大化してしまっている言語ですね。それに比べて、 Java は 必要最低限の機能に絞り込んでシンプルにした。それから、最近のアプリケーションを書くの に必要なライブラリを一通り標準で持っているというのも大きいですね。GUI があって、Socket があって、Thread がある。この3つが標準で揃っている言語ってのは、Java が最初じゃない でしょうか。しかも、ポータブルというか、いろんな実装がある言語っていうのは。 で、いいところは、あるんですけども、僕として不満なのは、拡張性がないって所なんですよ。

-- 他に好きな言語とかあるんですか?

僕の好きな言語は Lisp なんです。Lisp も Smalltalk も好きな人には非常に好きで、 それぞれいいところがあるんですね。でも、僕にとっては、Lisp と Smalltalk は全然違っ て、例えば、マクロがある言語とマクロがない言語ということですね。

マクロがあるとなんでいいかというと、普通の関数とかオブジェクトとかというふうに 切り出せないところも再利用の単位にできるというか、切り出せるというのがいいですね。

Lisp がいかに良い言語かっていうのを訴える 「普通のやつらの上を行け」 という文書があるんです。

インタビュー風景

-- そんなのがあるんですか?

日本語にも訳されているんですけども。

-- 挑発的なタイトルですね。

その著者がいうには、Lisp がすべての言語よりも最も優れているんだと。それは、Lisp を 使ったやつにしかわからないっていうふうに言っているんですね。じゃ、具体的に Lisp の どこが優れているかっていうのは、あまり書いてなくてですね。

-- (笑)

で、唯一本当らしいことが書いてあるのは、マクロが便利なんだということなんですね。 それだったら、僕も納得できるなぁって思って。

-- C のマクロとは違うんですか?

えぇ、違います。C のマクロは、大分書けることが限られてくるんですが、Lisp のマクロは Lisp のプログラムで書くんですよ。だから、何でもありで、非常に複雑なことが書けるんで すね。

で、僕としては、Lisp も好きなんだけどもやっぱり S 式というか、括弧のおばけはやっぱり 見にくい。それから、型チェックがないのも大きなプログラムを書くにはきついと思っていま して。

-- その辺は Java の優れたところですか?

でも、Java にはマクロがない。

そこは自分でなんとかしようと思ってて、Java にマクロを入れるというか拡張性を求めた のが、EPP のひとつの用途ですね。

-- 何の略なんですか?

Extensible PreProcessor (拡張可能プリプロセッサ) の略です。 Lisp のマクロと同じぐらい強力なマクロが Java で書けるというシステムです。

-- こちらの方は、反響は?

これは、大分、古くて4年ぐらい前に公開したんです。Java に対するプリプロセッサとい うのは需要があるのかなって思って公開したんですが。研究目的にはいくつか使われて、 あと、製品にも使われていますね。


EPP を使って言語仕様を拡張しよう

-- 今後のオブジェクト指向ってどんな方向に向かっていくだろうってのはありますか?

オブジェクト指向っていう考え方自体は、もう非常に普及して成熟していると思いますね。 で、最近、僕も必要だと思っているのは、リファクタリングをサポートするツールとか。 あと、単体テストとか。まぁ、 JUnit とかありますけども。で、そのあたりとこの MixJuice のモジュール機構とを組み合わせて、便利なものが出来ないかなぁって思っ ているんです。まぁ、結局、期待するというか、自分がやりたいっていう話になります けど。足りないものは自分でやるしかないっていうそういうふうに思っていますんで。

-- (笑)

インタビュー風景

そうそう、僕がいつも思うのは、言語というものがあって、誰もその言語仕様をいじりた がらないんですよ。言語屋は仕事だからやっていますけども、ほとんどの人は、言語とは いじっちゃいけないもので、そのまわりのツールで頑張りましょうとか、方法論とかデ ザインパターンとかで頑張りましょうとかいって。僕はなんでかなぁって思うんですね。 ちょっと言語をいじれば、非常にうまく解決できる問題もけっこうあるんじゃないかなぁ って思うんです。テスティングツールに関しても、その言語と統合して、非常にうまいも のができないかなぁって思っているんですよ。

-- なんででしょうね。自信がないんですかね。

理由は僕も考えていましてですね。言語処理系っていうは非常に複雑で、一枚岩のシステム なんですよ。で、非常に複雑なプログラムで、中身をちょこっといじるっていうのは難し いんです。ちょっといじると他のところに思わぬ影響が出てくるっていうのがありまして。 そこを解決するために、非常にモジュラリティの高い言語処理系ってのを作ればいいんじゃ ないのかなって思っていまして。まぁ、それを解決するのが、また、EPP であるんですけど も。EPP の中身ってのはほとんどコンパイラと同じで、構文解析して、意味解析をして、 コードをはきだすっていう形なんです。その過程を細かくモジュール分けして新しい機能 を簡単に追加できるようにする。そのような構造をもった言語処理系なんです。そういうも のがあれば、ちょっとした言語の改造なんか、また、実験なんかが簡単にできるんじゃない かなぁって思っていまして。それが、EPP の開発のモチベーションの一つですね。


仕事のスタイル

-- こちらにいらっしゃる方っていうのは、 基本的に研究をして、できた結果を世に出すということをしているんですか?

そうですね。学会に論文を出すっていうところが使命なんですが。でも、それだけじゃなく て、ほんとに産業界に役に立つような成果も出すっていう使命も持っているんですよ。

-- 産総研自体の仕事のスタイルなんかはどうなっているんですか?

非常に自由ですね。裁量労働制ってのが始まったんですよ。フレックスよりも柔軟で・・・。

-- コアタイムがない?

そうですね。1ヶ月何時間働けっていうのもないです。そのかわり自宅勤務ではないので、 1日1回は顔をださないといけないですね。まぁ、毎年、どこまで目標が達成されたのかっ ていうのがチェックされて、それによって給与とか昇格とかが決まるっていう成果主義に なってます。

でも、その研究の中身をどう評価するかってのが、すごく難しい問題だと思っているんです。

-- その辺の指標とかっていうのはあるんですか?

その指標自体をどうしましょうかねっていうのを常に議論している状態なんですよね。 まぁ、簡単なのが論文数。

-- 何本出したとかですね。

論文にも、例えば、この雑誌は非常に格が高いとかっていうそういう指標があってですね。 impact factor っていう数字なんですけども。それが、高いところに通ったやつは良いん だという評価尺度は一応あるんです。まぁ、それに対しても異論はあるんですが。

インタビュー風景

-- 難しいんですね。仕事と評価って。

我々もまたちょっと違っていまして。他の分野の人たちはわりと論文の数ってのは、確立 された評価方法なんですけども、ソフトウェアを書く人はどう評価するのかってのがあり ましてね。僕みたいに実用レベルのソフトェアを頑張ってつくろうと思っていると、 論文を書いている暇がなくて、また、論文を通すのもなかなか難しいんですね。そうする と、ソフトウェアの本数とか行数とかではかるのかって。そこまではできませんけども。

僕は、まぁ評価されなくてもいいよって思ってて。それよりも世間に評価された方が一 番はっきりしているし、それが本来の目的だからそっちの方でがんばろうかなって思っ ているんです。

-- 最近、そういう流れもありますね。オープンソースとか世の中に評価されればっていう。

世の中でよっぽど良い評価を得ていれば、それは、産総研だって認めないわけにはいかな い。そこまでの成果が出ればの判断次第かなって思ってて。

-- 感じとしては大学の研究室っぽいものですか?

そうですね。ただ、学生がいないってのはやっぱりすごく大きくて、すべて一人でやら ないといけないっていう。大学の先生だといろいろ学生にやってもらって、それを組み 合わせて成果を出すっていう感じになりますけど。

-- じゃ、まとまってプロジェクトチームで研究するってことはないんですか?

少ないですね。一応、研究グループってのがあって、それぞれでミーティングを持って ディスカッションとかしているんですが、基本的には一人一人がそれぞれテーマを 持っていて、自分でやるっていう感じの研究スタイルなんですよ。

ちなみにこれは私の近辺の話で、他の部所ではだいぶ状況が違うかもしれませんね。 産総研は広いですから、他のところの様子についてはほとんどわかりません。

-- ほとんど今は、毎日この MJ の仕事をしているんですか?

なんか雑用も多いんですけども、そうですね、本来の職務としては、これが 100% ですね。

-- 当面は MJ?

MJ と EPP とを両方やっています。EPP バージョン 1.1 をずっと前からやってて、今、 バージョン 2.0 に作り直そうと思っています。で、そのバージョン 2.0 を書く言語として、 MJ を使おうと思っていまして。

-- それってなんかあれですよね。コンパイラをつくるのに・・・。

ブートストラップです。まさにそれです。どんどん書きやすくなっていくんです。

-- 昔わかんなかったんだよな。その原理が。なんで、C のコンパイラ が C で作ることができるんだろうなぁって。すっごいわかんなかったんですよ。 最初、どうやって作るのっていう。


プライベート

-- こういうことをやられていると家庭と仕事との両立とかってどうされていますか?

子供ができるとたいへんですね。なかなか仕事に時間がさけなくて。かみさんが働いてい るんで、そうすると、家事も手伝わないといけないし、たまには保育園にも迎えに行かな いといけないしで。

-- 今までってのは、けっこう家でも休日にやったりとかされていたんですか?

インタビュー風景

そうですね。休日とかに出てきたりとか。最近なかなか出来ないですね。

-- けっこう厳しいですよね。

えぇ。もうちょっと子供が大きくなれば、また、手もかからないのかもしれないですけど。

-- 今、おいくつなんですか?

今、1歳1ヶ月で、まだ、歩きはじめてないんですけど、もうそろそろ歩き始める頃ですね。

-- 歩きはじめたらたいへんらしいですよ。

らしいですね。なんか地獄だという話も聞きます。

-- 目が離せないらしいですよ。

いま高いところに上るのが好きで、椅子とかに登って、それで降りれないんですよ。 なんか、落っこちないかって心配なんですよ。ほんとに、目が離せないですね。

-- ちなみにお子さんって男の子ですか?

いや、女の子です。

-- やっぱり・・・。

なんかそういう業界のうわさがあるんですか。

-- 先週、オブジェクトの広場の編集後記にかいたら、 けっこう反響がありましてね。やっぱりそうですっていうのが。

ぼくの周りも女の子が多いんですよ。やっぱりあるんですかね。


若いエンジニアへのメッセージ

-- 最後に若いエンジニアへのメッセージをお願いします。

僕としては、言語っていうものは与えられたものだとは思わないで、不満があったら、ここ をほんとはこう直せばいいんじゃないかとかいうことを大勢の人が考えてくれるといいなっ て思っていますね。で、いろんな人がいろんなアイデアを出せば、いいものが出来上がって きて、言語が良くなっていくんじゃないかなって思っているんです。


© 2001 OGIS-RI Co., Ltd.
Prev Index Next
Prev. Index Next