Seasar Conference 2008 Autumn に行ってきました
まずいつもの事ながら、あれだけの人数の方がいらっしゃるカンファレンスを切り盛りしたスタッフの皆様、お疲れ様でした。
以下、ざざっと見たものを。
「近」未来のプログラミング言語
千葉先生のお話。「言語」と「フレームワーク」の対比から始まり、「汎用的な機能をあらかじめ提供する」「開発者を制約する」といった側面から眺めてみた時に、実は境目は曖昧な部分もある。(ex. SQL って言語?それともフレームワーク?) その中で、一つキーワードになってくるのが「設定ファイル」を如何に書くか、という部分。(CoC で記述しない、というパターンは除いて)
struts-config.xml などといった、まま「設定ファイル」ととらえてしまうと、おそらく意味が違っていて、その「フレームワーク(言語)」が対象とする領域において、生成物のアプリケーションの動作や振る舞いを定義するモノをどう記述するか、といった観点。Java でいうと、XML 、アノテーション、などなどのこと。
では、そのフレームワークを設計するときに、XML を沢山記述するのはいやだし、アノテーションでは不十分といったケースで、記述の柔軟性や出来る事の多様さを求めようとすると、いわゆる「言語」よりな拡張をする方向に向かうのだけれど、「言語拡張」をして、それにみあうツールを整備して、、、云々となると正直かなりパワーが必要で、大変なことになる。
ただ、実は小さな「専用言語」を作ることはそこまで大変でもなくなりつつある、という事。そこで例に挙げられていたのが、JastAdd。Java コンパイラに対して、アドオンで拡張文法を組み入れる事が出来る模様。
すぐにでもとりかかりたい!、というには私にはまだ敷居が高そうな感は否めないですが、コードの可読性を高めたり、記述量を減らしつつ、直感的に分かりやすい記述が出来るようになる(ような気がする)ので、妄想で楽しんでおりました。
CubbyでRESTfulなWebアプリを
Choistudy でもお世話になっている Cubby のお話。実は先日テスト周りの話に伴いコミッタにしていただきました。(ML でも何故かテストケース周りの話ばかりしていたので。。。) 1.1 系をベースに CoolURI などといった Cubby の特徴を中心にライブデモでのアプリケーション作成まで。Converter の話は実は見落としていたところなので、これは使いどころを考えてみようと思いました。
私が Cubby の好きな所はこの辺りでまとめたので割愛しますが、今後もシンプルさを保ちつつ使いやすいフレームワークであるといいですね。また、Choistudy を Cubby を使っているサービスの一つとしてご紹介頂き、ありがとうございました。m(_ _)m
Seasar の中の中
Javassist を S2AOP でどういった形で利用しているかを中心にされたお話。Javassist で生成されるバイトコードの疑似コードと、実際の CtClass などの使い方を交互に説明されている部分は、非常に分かりやすい内容でした。またメモリ周りの工夫などの話は知らない内容だったので、勉強になりました。(具体的にはどれくらいのサイズ減があるのかな、という所にも興味がわきました。)
とはいえ、最近では直接 Javassist 使わずとも、ちょっとした事(テストケースの中などのチェックなど)であれば AspectWeaver を使っちゃったりして手でインターセプタ当て込んだりしています。。。
AspectWeaver aspectWeaver = new AspectWeaver(clazz, null); Method hogeMethod = ClassUtil.getMethod(clazz, "hogeMethod", new Class[]{Object.class}); MethodInterceptor interceptor = new HogeMethodInterceptor(); aspectWeaver.setInterceptors(hogeMethod, new MethodInterceptor[]{interceptor}); Class<T> generateClass = aspectWeaver.generateClass(); return (T) ClassUtil.newInstance(generateClass);
セッションで説明されていた部分は、この AspectWeaver の先の EnhancedClassGenerator などなどですね。ふと今思ったのですが、説明されていた内容が、Seasar のクラスの中で、どこに該当するのかのマッピングがあってもよかったかもしれないですね。
データベースの構成管理とリファクタリング
構成管理の観点として、データベースのスキーマや初期データまでを含めて管理しようという観点でのお話。またそれをスマートビルド (Maven のビルドライフサイクルにあわせた形) との親和性を高めて実現しようという話。モデリングツール自体は Eclipse プラグインで、その成果物の XML を種に Maven プラグインで実際のスキーマ変更や初期データ投入をやるイメージ。
今のところ、Choistudy では、
- モデリングツールではないですが、S2Dao-codegen (の Maven + PostgreSQL 専用カスタマイズ版)を利用して、xls から DDL と Entity クラスの自動生成
- DDL の実行は Maven SQL Plugin で CI や開発フェーズで実行
- テストデータの生成は、Seasar S2TestCase の readXls を Maven を利用して投下
- リリース時のマイグレーションは手動で SQL を記述して実行
としています。
上記でもわかるように、最後の二つのフェーズは手動の作業に依存しており、ここの部分については、まだ改善の余地があるとは踏んでいます。手はつけれていないのですが、LiquiBase などもウォッチしており、データベースの構成管理については私も悩んでいる所ですので、継続的に jiemermy はウォッチしたいと思っています。
Irenka の取り組みは気になりますね。。。
LT の時間
id:makotan と久々に再会し、色々お話してました。T2 も聞きたかったです。
懇親会
丸山先生や長谷川さん、id:nowokay さん、などなどが最初のテーブルで、色々とお話。最近のサンの話とか、フルネスでのお話、Spring 界隈のお話を伺ったり、Delphi で機械制御されている方のお話とか、データ解析のお話とか。
id:masataka_k 兄さんに、Yukara のデモを見せていただく。Wisdom の部分で、Choistudy との連携が出来るんじゃないか、などといった妄想を膨らませる。実際に Yukara から投げられるイベントがどういう形でくるのかにも依存するけれど、例えばキーワードベースであったり、実際利用しているクラスの情報であったりを投げてもらえれば、Choistudy 側でもっている問題とのマッチングなども出来るのでは、と。
id:agt さん、id:y-baba さんと Cubby のお話。こっそり 1.1 で追加されている機能の話についての話をしたり、Validation 周りで Choistudy で拡張している機能についての話をしたり。後、JSP 2.1 の CustomELResolver の話はここらへんが参考になります。(完全私信)
- http://www.techscore.com/tech/J2EE/JSP2.1/4.html
- http://java.sun.com/mailers/techtips/enterprise/2007/TechTips_Jan07.html
後者の二つ目の例で、Bean の Method Invocation をする例がありますです。試したい試したいと思いつつ出来ていないのですが、多分これを使うと
${S2.hogeDao.findAll}
みたいな事が出来るのでは、と睨んでいます。
id:taedium さんに、S2JUnit4 の話を聞いたり、S2JDBC-gen の事を聞いたり、S2TestMethodRunner のごくごく一部について少しフィードバックしたり。
id:t-wada さんの最近の Ruby な話を聞いたり。その中で何故かコンパイラコンパイラの話になり、Tuigwaa の WikiEngine で使っていた、字句解析器 (JavaCC) の中でステートを扱えると、同じ Token でもステートが違うと役割が変わる事ってありますよね、的な話で盛り上がったり。
skirnir さんたちとこれまた何故か最近の JS のフレームワークで面白いものの話をしたり。私は今は jQuery がおもしろかとです、とか。
結局土曜日に帰る予定を急遽新幹線を変更して朝までコースに。二次会では id:agt さんと熱いトーク三昧。(途中で寝てしまってスミマセン)。こういう機会で普段は別々の所で頑張っていらっしゃる方々とお話出来るのは本当にパワーをもらえることを実感して京都に帰って参りました。