aptを使ってみようかな

アノテーションによってコンポーネント構築を目論んだ次期S2Wicketだが,いくつかエントリした通り,芳しくない結果に終わってしまった。助けてエントリをしてみるも,とてもありがたい「頑張ってください」エールはいくつか頂けたものの,具体的な解決策を得るまでに至らなかった。
もっと別の何かを閃くことができれば,忘れることができるだろう。しかし,思いついたことといえば,TwitterclipseだったりSearchclipseだったり。S2Wicketについては,未解決で終わった問題領域を悶々と試すだけの日々が続いている。アノテーション以外の手立てを思いついたわけでもなく,コンポーネント構築以外の新機能が発想できたわけでもない。
僕の中で,アノテーションは「実行時に解釈するもの」という考えが根底にある。もちろんバイトコードに落ちずにコンパイル時にのみ使用する目的もアノテーションにあることは知っている。ただ,そのためには何らかの解析ツールを作成して利用しなければならず,アノテーションの利便性というか,利用価値というか,そういったものが犠牲になる気がしてならなかった。
何はともあれ,
「abstractなクラスを型とするフィールドに対して,アノテーションを付与することによって何らかの実装を持つインスタンスを動的に生成してセットする」
という次期S2Wicketの命題,どうしたものか。。。
ここで一歩引いて考えると,問題発生のそもそもの原因は,サブクラスを動的クラス生成で何とか実現できないか,と考えたことである。本来静的なものなバイトコードを動的に生成することは,永続化機構によって大きな問題となることがわかった。その壁は,とてつもなく高いものだった。
結局のところ,壁はその1枚であり,動的バイトコード生成アプローチを捨てて,事前にバイトコードを準備できさえすれば問題は解決する。たったそれだけのこと。
事前にバイトコードを準備するためには,自動生成をしてしまえば良い。つまり,aptの出番である。アノテーションが記述されたソースコードをアノテーションプロセッサに処理させて,実装を持つabstractなコンポーネントクラスのサブクラスのソースコードを自動生成する。そのコードが他のコードと同等にコンパイルされてwarファイルに含まれれば,解決である。
ま,最初からそうすれば良いのはわかっていたことだが,アノテーションに対する僕の印象が,その選択肢を選択させづらくしていたということは,前述の通りだ。
aptはもちろんコマンドラインツールとして提供されているものだが,Eclipseにビルダーとして組み込んで,暗黙的にアノテーションプロセッサを走らせることができる。これをうまく使えば(ビルダーのプラグインを利用することが前提となってしまうが)先の次期S2Wicketの目的は達成されるのではないか,と今は考えるようになった。
「アノテーションプロセッサ作ってみたいだけちゃうんか」と思うことだろう。そう,その通り。
何もランタイム時の解決だけがEoDではない。ツールに頼ることもEoDなはずだ。自動生成アプローチは,それはそれで幅広い命題なので,いろいろ模索してみたい。

Trackback URL:



  1. masataka_k より:

    http://event.seasarfoundation.org/sc2007spring/Session#tgd962180f
    Ashikunep#Irenkaもよろしくご検討くださいませって、まだ出来てませんが。APT/JSR269の類似ではSpoonも。こちらは、http://spoon.gforge.inria.fr/

  2. すごい!まさにビンゴな感じです。まだ出来ていないことが本当に残念でなりません。orz Spoonも追ってみますね。
    コンパイル時解決って,あまり聞かないというか,業界の中で動きが少ないですよね。今後ブレイクしそうな予感がするだけに,何か解を提供したいと思っていただけに,↑はホントにタイムリーな情報です。

  3. masataka_k より:

    ども。解となるかはわかりませんが、可能性にいろいろ貼っておかないと。幸いに流行の本流はひがさんがやってくれるから、別の視点から攻めてみています。Irenkaは6月末ごろにマイルストーン、9月末にリリースの計画ですすめてますので、よろしくお願いいたします。11月11日予定のSeasarCon秋でリリース版での入門セッション、応用セッションをやりたいと思っています。S2Wicketもセッション登壇いただけるといいですね。

Get Adobe Flash playerPlugin by wpburn.com wordpress themes