未踏ソフトウェア創造事業千葉PM担当プロジェクト最終成果報告会レポート

未踏プロジェクトの成果報告会のレポートです。
おかしな点があればご指摘ください。


==============
IPA未踏ソフトウェア創造事業の千葉PM採択の4案件について、事業の最終成果報告会が行われた。

今回の4案件は、Ruby関連が2件、Java/Seaserファンデーション関連が2件ということで、Ruby創始者である、まつもとゆきひろ氏と、Seaserファウンデーション創立者のひがやすお氏、さらに本プロジェクトのPMであり、かつ世界的に知名度の高いバイトコード操作ライブラリであるJavassistの開発者、千葉滋氏による特別講演会もあわせて行われた。


1.特別講演「DI:Configuration Files must Die」
 ひがやすお氏

DIコンテナの概念、SeaserとSpringの比較、SeaserEJB3対応などについての講演。XML設定ファイルの肥大化による「XML地獄」を回避するために、Seaserでは「Conversion over Configuration」という考え方を用いて設定ファイルを極力書かなくて済むようにしている。インターフェースやプロパティの名前さえ一定の規則に従っていれば、自動的にコンテナがオブジェクトをInjectしてくれる、という仕組み。

規約から外れる例外的な箇所については個別にアノテーションを用いて対処するという仕組みには感心した。このように従来は設定ファイルに記述していた内容は、

(1)自動Injectにより書かなくて良い
(2)例外的な設定はアノテーションを用いて記述
(3)外部の設定ファイル(今までどおり)に記述


というように分かれていくであろう、ということを語っており、さらに

(1)環境に依存する設定については、外部の設定ファイルに記述
(2)今後変更があるかどうかわからない -> 多分、変更はない-> アノテーションを用いて記述


という考え方で、設定ファイルとアノテーションを済み分けることが可能ではないか、とも提案していた。

また、自動的にオブジェクトがInjectされるため、どのように依存性がInjectされているかを確認する手段がない、という課題に関しては、現在のInjectの状態をファイルに出力するような機能の導入を検討しているようである。


2.「Ruby言語による生物化学情報基盤ライブラリの開発」

ゲノム情報を生かした創薬などの用途に使用されるライブラリである、BioRubyChemRubyの開発に関する報告。現在この分野はPerlによる実装であるBioPerlが最も主流であるが、解析対象の複雑化に伴い、オブジェクト指向言語を用いることが有効であると考え、このようなソフトウェアを開発するに至ったようである。また、今までコマンドラインを用いて一つ一つコマンドを実行していたため解析に非常に手間がかかっていたが、BioRubyChemRubyではこれらの作業をバッチコマンドとして、一括で実行できる点が強みであるとのこと。すでに多くのユーザに使われているらしく、今後発展が期待できそうなソフトウェアである。


3.「ユーザ主導型 Web アプリケーション作成ツールの開発」

アンケートフォームや、参加者名簿などといった、簡単なCRUD型のWebアプリケーションを、Webブラウザ上から簡単に作成できる、というソフトウェアの開発についての報告。DBの定義から、ビューの定義、画面遷移の定義までを全てブラウザ上から実行できるとう点が特徴。Wiki+DBという形式のWebアプリケーションを簡単に作成できる。


4.特別講演「2010年の最新Ruby--当たらぬも八卦」
 まつもとゆきひろ

この報告会が行われてた2月24日はRuby言語の誕生日ということもあり、2010年にはRubyはどのように成長しているか、ということをRubyの開発者自身が語る、という講演。

Ruby2.0の構想や現在のRubyの問題点など、かなり詳細なレベルの話や、RoRが流行した要因などについての分析などの話を聞くことができた。Ruby言語以外でもRoRのようなプロダクトはいくつか存在するが、RoRのようにDSLを多用するプロダクトでは、Rubyのような動的言語が有利である、とのこと。


5.「オブジェクト指向スクリプト言語Rubyの処理系の刷新」

構文解析やスレッドの実装方式を改良し、処理速度を向上したRubyのVMであるYARVの開発についての報告。現行のRuby処理系は、構文解析を行う際には抽象構文木を構築して解析を行っていたが、YARVではJava同様のスタックマシンに変更したため、処理速度を大幅に向上できたとのこと。また、ネイティブスレッドをサポートするなどの改良もなされている。この実装はRuby2.0にも取り込まれる予定である。


6.「JavaServer Templates 「Mayaa」の開発と世界発信」

Seaserファウンデーションで開発されているWebテンプレートエンジン「Mayaa」についての報告。JSPやVelocityと同様の分野に分類されるプロダクトであり、いかにこれらのプロダクトと差を付けることができるか、という点が課題であるとのこと。


7.特別講演「ソフトウェアを使ってもらうには --- Javassist の場合」
 千葉滋氏

Javassistを開発し普及するまでの間に千葉氏が感じたこと、またソフトウェアの普及とキャズム理論の関連についての講演。


・Javassitが普及するまで
千葉氏はもともとC/C++ソースコード操作技術に関する研究を行っていたが、Javaが徐々に普及しつつあったため「これからはJavaだ」という事になり、Javaの勉強を兼ねてとりあえず何か作ってみよう、ということで作ったのがJavassistであった。1998年のことである。当時はバイトコード操作ライブラリといえばBCELが主流であり、BCELに勝つためにはプロトコル(API)の簡素化、ドキュメント、サンプルプログラムの充実が重要であると判断し、注力した。これにより徐々にJavassistの知名度は高まり、ある時JBossのメンバーからJavassistをJBossの傘下に移行しないかとの連絡が来たとのことである(なお、連絡が来た時点では千葉氏はJBossとは何なのか知らなかった)。


・ソフトウェアの普及とキャズム理論の関連
「よいソフトウェアであれば自然に普及する」という考え方は幻想であり、これはキャズム理論を用いるとわかりやすい。キャズム理論については割愛するが、「アーリアダプター」と「アーリーマジョリティ」の間には「越えられない谷間」が存在し、多くのソフトウェアはこの谷間を越えられずに消えていくものが多いという。Javassistでは上でも述べたように、まずユーザシナリオやドキュメント、サンプルをしっかりと整備し、Javassistの周辺の部分の充実に注力した。また、超えられない谷を越えるには、まずアーリーマジョリティを構成する集合の中でも特にニッチな部分をどんどん攻略していく必要があるとも述べていた。Javassistの場合は、「アスペクト指向を実装したい人たち」が、このニッチな部分に該当する。

このように、一般的な知名度は高くなくても、ある特定分野でしっかりとした存在感を示しておけば、あとは勝手にアーリーマジョリティに浸透していく、というのが千葉氏の考えのようである。


・質疑応答
会場から「バイトコード操作そのものに対して拒否反応を示す人が大勢いるが、どのようにすればこれを克服できるか」という質問があり、千葉氏は「それはアセンブラプログラマにとってのコンパイラの議論と同じであり、メンタルの問題である」と回答した。


【まとめ】
今回の報告会は、コアなRubyデベロッパーとJavaデベロッパーによる「Ruby vs Java」という感じの会であったが、非常に濃い内容であり充実した一日となった。特にJavassistの千葉氏の講演は、私の現在の研究内容と強く関連するものであり、非常に興味深かった。最後の質疑応答に関しても、現在の会社での業務において常に課題となっている事であり、参考になった。

================