Seasar Conference 2007 Autumnに行ってきた。1週間遅れでレポートする。
会場はまた法政大学市ヶ谷キャンパス。今までも何度か開催している場所にも関わらず、また道に迷った。
50人〜200人収容の6部屋に分かれて並行して、時間を5つに区切ってセッションを行なうという形式。飲み会のときにこの形式の話題が出たけど、以前のボアソナード・タワーを使う場合に比べてセッションの本数を増やせるので良いという話だった。最近はSeasarプロダクトも参加者も増えてるしね。
ただ、私は以前の「ミニセッション」もスピーカーとの距離が近くて良かったと思う。ボアソナード・タワー時代は部屋が2つしかなかったので、会場の隅のほうでコミッターが「ミニセッション」として4つ5つ出店を開いて、そこでいろいろなプロダクトの説明をやっていたのだ。
さて、今回は並行開催トラックが多いので迷うわけだけど、私は最初はS2Flex2を聞きに行った。 発表者は株式会社ニークシステムの舩倉純さん。
まずはFlex2についておさらい。Adobe Flex2とは、
MXMLは豊富なUIライブラリの表現を利用可能なXML応用言語。MXML部はFlex Builderを買えばVB式にポトペタで作れる。
ActionScript3はECMAScript4準拠, JavaScript 2.0相当の言語。厳格な型指定やらランタイムエラーやらE4XやらをサポートしてAcrionScript2までとはだいぶ色彩が異なる。
開発環境のFlex SDKは一部を除きオープンソースになった。コンパイラやデバッガもMPLで公開される。 特に、ECMAScript実行エンジンであるTamarinはMozillaに寄贈された。
今までは開発環境・実行環境がAdobeに閉じていたために導入がためらわれるような事例もあったが、今ではFlex環境はオープンソースである。
S2Flex2は、SeasarとFlex2をつなぐためのサーバーサイドフレームワークである。UIにTeedaやS2JSFを使う代わりに、S2Flex2を使うという感覚である。中身はそのままで、皮だけ差し替えればFlex対応できる。
クライアント-サーバー間通信はAjax同様に非同期なので、経験のない開発者はちょっととまどうがすぐ慣れる。通信の口を作るのはタグを書くだけ。Flex2Builderがあればこれもポトペタできる。
AMF3とは、オブジェクト転送のためのフォーマット。over HTTP(S)で用いることが多く、JSONやなんかと同じ層のもの。JSONのようなテキストベースのフォーマットに比べると
なお、AMF3は今のところ、Flash Liteでは使えない。Wiiでは前バージョンであるAMF0は使える。
AMF3によるRPCはフロントに変換ゲートウェイを置いて、ゲートウェイがRPCを内部のメソッドコールに変換する形が主流。S2Flex2も同じく。このやり方には単純にやるとセキュリティ上の問題がある。つまり、外部から内部の任意のメソッドを実行可能であっては困る。S2Flex2の場合は@RemotingServiceアノテーションを付けたクラスのみを外部に公開する。
サービスクラスのプロパティにアノテーションを付けると、プロパティをセッションに保存/復帰可能。
型マッピングは上書き可能。
ここで、実演が入った。Flex2 BuilderはEclipseベースなのでそこにDoltengが加わるとさくさくと開発が進むようだ。
S2Flexがカバーしない、Flex2開発の周辺領域をまかなうプロジェクト。
S2Flex2はAIRやFlex3にも対応可能。
次の時間は比嘉さんのセッションに言った。
言ってることは去年のセッションと殆ど変わらず、Chura開発のやりかたを見せるというもの。でも、当時はRailsのscaffoldの魔力に惑わされかけていたのが、今はなんだか落ち着いて「churaの軸」とでも言うべきものが見えてきたので良かった。
Railsのscaffoldがコード生成して一瞬で動くものを作ってみせるのは単なる客寄せで、そこから話を聞いてもらって、Railsの良さを知ってもらうというものだと思うんだよね。churaも以前はコード生成に重きを置きすぎているような感じだったけど、今回の発表はそこが改善してると思う。Doltengも進化したし、Teedaを使ってEclipseによる効率的なJava開発を実践して見せてくれた。
比嘉さんのプレゼンテーション技術の向上はめざましい。が、「芸人化」と一部で言われるのは事実無根ではない、と思う。プレゼンテーション技術が向上しているほどには発表内容が深化していないから。日記を読めばひがさんがその裏で色々考えて試行錯誤してるのは見えるんだけど、カンファレンスの発表だけではそこまでは見えないのね。一方で、プレゼンテーションの技巧は良くなっているので。
まあ、私が見た発表は比嘉さんによる3コマ連続セッションの最初の1コマに過ぎないので、後のほうの実践編ではそのへんもカバーしてたのかもしれないけどね。ま、そういう言葉を耳にしました、というのと、私もそれを否定はできないと感じた、という話。
次のコマはIrenkaセッションを聞きに行った。発表者はグルージェントの栗原さん。
IrenkaはJavaのコンパイル時ソリューション。現在のところはEclipseプラグインとして機能する。コンパイル時に"Hack"と呼ばれるユーザー定義の機能をコードに対して適用する。
Hackは「適用対象」と「作用」から成る。適用対象は例えば「@NotNullアノテーションの付いているメソッドパラメータ」に「冒頭にパラメータのNullチェックコードを挿入」というHackを適用してDesign by Contractできたりする。
驚くべきは、これは「バイトコード編集ではない」ということだ。このNullチェックコードを元のJavaソースに自然に埋め込んで反映することができる。たとえば、次のようなソースコードが本当にアノテーションのあるメソッドに挿入される。
if (param1 == null) {
throw new NullPointerException();
}
Hackの実体はPOJOとして記述する。IrenkaはJavaの言語要素を抽象化したクラス群を持っているので、これを利用し操作するようなメソッドを書く。これが作用(Hack Action)である。作用の適用対象は、独自のクエリ言語をコメントとしてactionに添えて記す。
また、コード生成の記述もそれほど面倒ではない。なるほど、生成されるコードをAPIで組み立てていくならそれは面倒であろう。かといってコードを単にテキストとして処理すると、今度はCのマクロのようなセマンティクスを考慮しない処理であるための問題が生じる。そこで、Irenkaでは既存のメソッドをテンプレートとして活用できる。例えば、Nullチェックの場合には次のようなメソッドをテンプレートとしてコードを生成できる。
void checkNull(Object test) {
if (test == null) {
throw new NullPointerException();
}
}
現在の所はEclipseプラグインとして、Eclipse JDTのコンパイルが走るタイミングでHackを適用する。
ソースコードを編集するだけではない。