koichik の「J と X の狭間で」

タイトルはインスパイヤ
いろいろ行き詰まってるのでちょっと逃避 (苦笑).


従来,Java 界隈では様々な設定情報を XML ファイルに記述することがよく行われていました.
その結果,設定ファイルが膨大になり,「XML 地獄」なんてことがいわれるようになってしまったり.
そのためか,近頃は XML を利用しないフレームワークが増えてきているようですね.


そこで CoC が効果的なわけですが,それでも設定しなきゃいけない項目はやっぱり残ったりします.
それをどうするか?
自分は元々 XML アレルギーがあまりないので,XML でいいんじゃないかと思ったりしちゃうのですが,どうやらそれは流行ってないらしい (苦笑).
だからといって JSONYAML を使うのかというとそうでもなく,Java によるソースコードで表現しちゃうのが今風?


その風潮,Java 以外の言語なら理解できるんですよね.

ってのが有効な言語の場合.
Lisp なんかはこういうのお手の物ですよね.
最近だと Ruby なんかはそういうのが得意らしいとか.
こういう言語の場合,その設定ファイルは「プログラム」には見えない,簡潔で宣言的なものになるのでしょうが...


でもなぁ.
それって Java ではどうなのかなぁ?
LispRuby などと違って,Java にはそのための記述力というか表現力が備わってないと思うんだよね.
なので,「設定」とか「定義」からイメージするような,簡潔で宣言的な記述を Java でできる気がしない.
っていうか,【見覚え】たぶん【ありません】
例えば Click の Table のサンプルとか,静的な定義に該当するコードが多くを占めてると思うのだけど,あれがシンプルだとはちょっと思えないわけで...
まぁ,難しいというわけでもないんだけど,煩雑というか,少なくとも自分は (補完があっても) ああいう類のコードをわざわざ書きたくはないなぁ,という感じ.


そう考えると,Java の普及と同時期に XML も普及したのは,偶然ではなくて必然だったんじゃないかと思えてきたり.
Java には XML が必要だったんじゃないか,Java に欠けているものを補完してくれたのが XML だったんじゃないかと.
つまり,現実的でない

の代わりに

  • XML 上のミニ言語で DSL

として使われることが多かったんじゃないかと.
そんなわけで (どんなわけで?),XML を見直してもいいんじゃないかってのが最近 (っていってもここ数日) の気分.


確かに XML は記述が冗長.間違いない.
でもでも,それってタグや属性を補完してくれる XML エディタを使えばそれほど気にならないんじゃないかと.
自分が XML にあまりアレルギーがないのは,XML を使う機会が増えた頃から WSAD (WebSphere Application Developer,現在は RAD) を使えたことが大きいです.
WSAD には標準で XML エディタが備わっていて,DTD があればタグや属性はサクサク補完してくれたのだ.
それが今では WTP (WST) の一部として Eclipse で使えるようになってるヤツです.たぶん.


そう.
XML のいいところは,DTD で簡単に「俺言語」(DSL) を定義できることですね.
簡単じゃないけど XML Schema もあるし (苦笑).
流行ってるとは言い難そうだけど RELAX NG もあるし (流行ってぇ〜).
ともあれ (JW),スキーマ言語によって俺言語の文法を定義できること,それを理解してくれるエディタを IDE で手軽に使えて,入力の補完や検証を行ってくれることは XML のメリットだと思います.


とはいえ,XML エディタだけでは足りない部分もあります.
Seasar2 の設定ファイルである dicon の場合だと,クラス名やプロパティ名を入力するわけですが,汎用の XML エディタではそこまでは補完してくれません.
そんなわけで (どんなわけで?),Kijimuna の出番ということになります.
XML を使うことの問題を Kijimuna のような (IDE の) プラグインで解決することにも賛否あるようですが,どっちみち Eclipse (Java エディタ) の補完がないと生きていけない体,Kijimuna (dicon エディタ) が補完してくれるなら何一つ問題ないというのが自分の立場.
エディタの提供元が少し違うだけじゃん,みたいな.
どうせ裏では同じモデル (珍しく雑誌モデルじゃない方のモデル) を参照してるのさ.
NetBeans? 利用者が増えればきっと NetBeansKijimuna ができるんじゃないかな?


そんなわけで (どんなわけで?),設定情報や定義情報を

  • Java エディタで補完してもらいながら Java ソースで表現
  • XML エディタで補完してもらいながら XML で表現

の,どっちがいいか? という話だと,自分は後者なのです.
Java よりは XML の方がよっぽど明解・簡潔・宣言的に書けると思うので.


始めの方で書いたように,設定自体を減らすことは間違いなく重要.
その上でやっぱり必要な設定がある場合,それを Java で表現する「Java DSL」なアプローチには魅力を感じないなぁ,と思う今日この頃なのでした.


でもでも,Seasar2 の設定を Java で書けるようにするという,ひがさんの提案をおいらが却下したというのは濡れ衣です.
確かに賛成はしてないけど.
ちなみに,Seasar2 コミッタであると同時に「Maven 2.0入門 (isbn:477412964X)」の共著者でもある横田さんは,LiQ に影響されて Seasar2 の設定を Java で書けるようにする Builder を実装までしたそうですが,それを瞬殺したのはホンマさんです.(^^;