私はJavaが嫌いだ(言っちゃった)。ご先祖様のC++に敬意をはらわないどころか失敬なところが嫌いだし、日食なんて名前のツールを作られちゃうグタグタなところも嫌いだし、完璧主義でデザインパターンをむやみやたらに使うところも嫌いだ。
しかし一つだけ(もしかしたら三つくらいかもしれないが)Javaがうらやましいことがある。
EJB?ナイナイ。Springだかシーサだか知らんがもう少し落ち着いてから出直してください。
Jython?うーんまあ、いいなぁ。
JavaCC?捨てがたいけどね、GoldParserでいいや。
じゃあ何か?賢明なる読者の方ならもうわかったであろう。そうVelocityである。
実のところVelocityはそれほど複雑なソフトウェアではない。かなり単純な部類であろう、正直Perlのprint文と大差ない。
しかしそのPerlのprint文程度のものが、Javaのオブジェクトをそのまま評価できるというだけ類稀なる便利なツールになるのである。テキストの自動生成にはPerlとかRubyだと思っていたがその常識を覆してくれたのだ。
具体的に見てみよう。
あなたの名前は$nameです
$nameの部分が渡された変数で置き換えられる。つまらない例だ。次を見てもらおう。
あなたの名前は$person.nameです あなたの年齢は$person.ageです
これでこそVelocity様である。$personはJavaのオブジェクトでそのメンバー変数にそのままアクセスできてしまうのである。これはO/Rマッピング技術やOOPととても相性がいい。従来のテンプレート技術では出力時にわざわざ変数を渡してやる必要があったのだが、Velocityではプログラム内で自然に使用しているオブジェクトを渡すだけでいいのだ。
さらに驚くべきはメンバー変数だけでなくメソッドも呼び出せることだ。これを利用すれば簡易インタープリタだって作れてしまう(作らないけど)。
これに加えてifとforeachが使えるのだ。文句のつけようがないではないか。
モチロン、ドダイはこれを指をくわえて見ているわけではない。.NETの世界はちゃっかりしているのでNVelocityなるものがある。(こんなのもあるらしい。SourceForgeのやつは日本語がうまく通らずハックした。こっちなら最初から日本語が通るかも。ハック済みのソースが欲しければ連絡ください)
今まで述べてことはC#のオブジェクトに対してそのまま適用できる。そしてドダイの自動コード生成は完全にVelocityに依存している。テンプレートを変更すれば簡単に複数のRDBに対応できてしまう。また自動生成コードを少しカスタマイズしたいときもテンプレートファイルをちょこっといじるだけなのである。
ところで最初にJavaが嫌いといいましたがもちろん本心ではございません。いつでも簡単に撤回しますのでぜひともJavaのお仕事を…