今年の3月に日経ソフトウエア編集に異動して以降,国内で開かれるJavaのイベントにはなるべく参加するようにしている。異動後,初めて担当した特集が,9月号(7月23日発売)のJavaの大特集だったからだ。その流れで,現在のJava業界におけるスター技術者の1人であるRod Johnson氏の講演にも出かけ,Web記事を書いた(関連記事)。

 Johnson氏は,複雑化したEJB(Enterprise JavaBeans)の反省から生まれたオープンソースのDI(Dependency Injection)コンテナ「Spring Framework」の開発者である。その彼らしく,講演では従来のEJB(特にエンティティBean)を豪快にぶった切っていた。

 現行バージョンの2.1までのEJBを「悪い標準」と位置付け,「悪い標準は標準がないよりも悪い」と言い切った。技術革新の激しい分野では,標準化委員会が机上の議論だけで標準化を行うのではなく,競争による淘汰にまかせるべきだという。「悪いアイデアが標準化されるとなかなか消えない」からだ。

 従来のEJBは,「『やっかいな処理をコンテナにまかせる』という理想に,実装(ソフトウエアとしての実装という意味ではなく,具体的なEJBの仕様という意味)が追いついていなかった」という面がある。こうした観点からすれば,Johnson氏の主張はやや辛らつすぎる気がしないでもない。ただ,現場でEJBにもどかしさを感じていた技術者にしてみれば,同氏の主張は大いに共感を覚えるものだったようだ。

 幸いなことに,現在のEJBはいい方向に向かっている。2006年初めにリリース予定の次期EJBであるバージョン3.0は,「軽量Java」と呼ばれるトレンドを大幅に取り入れて生まれ変わる見込みだ(参考記事)。

 Spring FrameworkをはじめとするDIコンテナやHibernateをはじめとするO/R(Object/Relational)マッピング・フレームワークは,誰かが「標準」として押しつけたのではなく,使い勝手のよさから自然に技術者の間に広まっていった。こうしたソフトが生み出した,POJO(Plain Old Java Object,普通の昔ながらのJavaオブジェクト)を中心とした開発スタイルが軽量Javaである。競争による淘汰の結果が,標準に反映されることになったのだ。

 EJB 3.0の仕様の策定には,Hibernateの開発者であるGavin King氏も参加しており,大きな影響を与えている(注1)。従来のEJBの仕様を策定した技術者との間に摩擦が生じたとも聞くが,最終的には「技術者の民意」を最大限,尊重する方向で落ち着いた。現在のJavaの仕様が民主的なプロセスで決められている何よりの証拠だと言えるだろう。

注1:EJB 3.0が含まれるJava EE 5では,EJBからO/Rマッピング機能が切り離され,EJBだけでなく他の技術とも組み合わせて利用できるようになる。

当のW3Cすら使いたがらないXML Schema

 さて私は講演を聞きながら「別の分野のもう一つの悪い標準」を思い浮かべていた。Web関連技術の標準化団体であるW3C(World Wide Web Consortium)が標準化したXMLのスキーマ言語「XML Schema」である。こう思ったのは私だけではないらしい。よくのぞいている技術者のブログでも,Johnson氏が語ったEJBの話がそっくりXML Schemaに当てはまることを暗示していた(リンク)。私はXMLにそんなに詳しいわけではないが,XML Schemaの悪評は漏れ聞こえてくる。個人的な感想を言えば,評判の悪さは(2.1までの)EJBより上かもしれない。

 XMLは当初,スキーマ言語としてSGML(Standard Generalized Markup Language)で使われていたDTD(Document Type Definition)を流用していた。ただDTDは,XMLの構造に従っておらず,データ型を定義できないといった欠点があった。そこで,より強力なスキーマ言語として開発されたのがXML Schemaである。W3Cが2001年5月に勧告した。

 もっとも,XML Schemaは米Microsoftなど複数の企業が仕様の策定に参加したため,複雑化して使いづらいものになった。「XML Schemaの複雑な機能は使うな」と呼びかける有名な文書があるくらいだ(原文日本語訳)。

 使いづらいXML Schemaを反面教師として生まれたのが,村田真氏が開発した「RELAX(Regular Language description for XML)」とJames Clark氏が開発した「TREX(Tree Regular Expressions for XML)」である。これら二つが合流して「RELAX NG(リラクシングと読む)」というスキーマ言語になった。RELAX NGは,情報交換技術の標準化団体であるOASIS(Organization for the Advancement of Structured Information Standards)が2001年12月に標準化し,2003年11月には国際標準化機構(ISO)の規格になっている。

 RELAX NGのスキーマからJavaのソースコードを自動生成するツール「Relaxer」の開発者である浅海智晴氏は,XML SchemaとRELAX NGの現状をこう語る。「システムの発注側は,W3C標準であるという理由でXML Schemaを使うことを指定してくることが多い。一方,技術者はXML Schemaを使いたくないので,いったんRELAX NGで開発しておいて,XML Schemaに変換してから納入する」のだという。

 RELAXの開発者である村田氏のブログによると,XML Schemaを標準化した当のW3Cの中(例えばベクター・グラフィックス用言語であるSVG:Scalable Vector Graphicsのワーキング・グループ)ですら,スキーマの作成にXML SchemaではなくRELAX NGを使っているケースがあるという(リンク)。

 調べてみると,次期HTML仕様である「XHTML 2.0」でも,今のところXML Schemaは使われていなかった。XHTML 2.0の最初のワーキング・ドラフトが公開されたのが2002年8月。これにはRELAX NGのスキーマのみが含まれ,XML Schemaのスキーマや従来のHTMLで使われていたDTDは含まれていなかった。これらは「後のバージョン(subsequent versions)には含まれる」とのことだった。

 だが,2005年5月27日に公開された現時点での最新ドラフトでも,状況は変わっていない。相変わらず「後のバージョンには含まれる」と書いてあるだけで,XML Schemaは使われていない。3年近く経っているにもかかわらず,である。「W3Cの標準だから言及しないわけにいかないが,できれば使いたくない」というのが本音かもしれない。

 XML Schemaは,Johnson氏の語る「悪いアイデアが標準化されるとなかなか消えない」例にぴったり当てはまっているように見える。ただ技術者は,こと技術に関してはとてもわがままな人種である。嫌いなXML Schemaの顔をいつまでも立てるようなことはしないだろう。近い将来,「気付いたら,誰もXML Schemaを使っていなかった」という状況が来ないとも限らない。

(大森 敏行=日経ソフトウエア)