Seasar Conference 2007 Autumn に行ってきた。1週間遅れでレポートする。
会場
会場はまた法政大学市ヶ谷キャンパス。今までも何度か開催している場所にも関わらず、また道に迷った。
50人〜200人収容の6部屋に分かれて並行して、時間を5つに区切ってセッションを行なうという形式。 飲み会 のときにこの形式の話題が出たけど、以前のボアソナード・タワーを使う場合に比べてセッションの本数を増やせるので良いという話だった。最近はSeasarプロダクトも参加者も増えてるしね。
ただ、私は以前の「ミニセッション」もスピーカーとの距離が近くて良かったと思う。ボアソナード・タワー時代は部屋が2つしかなかったので、会場の隅のほうでコミッターが「ミニセッション」として4つ5つ出店を開いて、そこでいろいろなプロダクトの説明をやっていたのだ。
S2Flex2
さて、今回は並行開催トラックが多いので迷うわけだけど、私は最初は S2Flex2 を聞きに行った。 発表者は 株式会社ニークシステム の 舩倉純 さん。
Flex2
まずはFlex2についておさらい。Adobe Flex2とは、
- swf形式を生成する開発環境
- これまでのFlashはタイムラインベースのアニメーションツールだったが、Flex2は開発者のためアプリケーション開発環境。
- WebアプリケーションはHTML+JavaScriptだが、Flex2によるRIA(Rich Internet Application)はMXML+AcitonScript3で書く。
標準機能でも、数行でリッチなUIを提供可能
タブ
- 3Dチャート
- cloverflowみたいなUI
MXMLは豊富なUIライブラリの表現を利用可能なXML応用言語。MXML部はFlex Builderを買えばVB式にポトペタで作れる。
ActionScript3はECMAScript4準拠, JavaScript 2.0相当の言語。厳格な型指定やらランタイムエラーやらE4XやらをサポートしてAcrionScript2までとはだいぶ色彩が異なる。
開発環境のFlex SDKは一部を除きオープンソースになった。コンパイラやデバッガもMPLで公開される。 特に、ECMAScript実行エンジンであるTamarinはMozillaに寄贈された。
今までは開発環境・実行環境がAdobeに閉じていたために導入がためらわれるような事例もあったが、今ではFlex環境はオープンソースである。
S2Flex2
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
アノテーションを付けたクラスのみを外部に公開する。
サービスクラスのプロパティにアノテーションを付けると、プロパティをセッションに保存/復帰可能。
型マッピングは上書き可能。
- remoting_adjustor.dicon
- amf_binder.dicon
ここで、実演が入った。Flex2 BuilderはEclipseベースなのでそこに Dolteng が加わるとさくさくと開発が進むようだ。
Akabanaプロジェクト
S2Flexがカバーしない、Flex2開発の周辺領域をまかなうプロジェクト。
AIR/Flex3
楽しいJava
次の時間は 比嘉さんのセッション に言った。
言ってることは 去年のセッション と殆ど変わらず、Chura開発のやりかたを見せるというもの。でも、当時はRailsのscaffoldの魔力に惑わされかけていたのが、今はなんだか落ち着いて「churaの軸」とでも言うべきものが見えてきたので良かった。
Railsのscaffoldがコード生成して一瞬で動くものを作ってみせるのは単なる客寄せで、そこから話を聞いてもらって、Railsの良さを知ってもらうというものだと思うんだよね。churaも以前はコード生成に重きを置きすぎているような感じだったけど、今回の発表はそこが改善してると思う。Doltengも進化したし、Teedaを使ってEclipseによる効率的なJava開発を実践して見せてくれた。
比嘉さんのプレゼンテーション技術の向上はめざましい。が、「芸人化」と一部で言われるのは事実無根ではない、と思う。プレゼンテーション技術が向上しているほどには発表内容が深化していないから。 日記 を読めばひがさんがその裏で色々考えて試行錯誤してるのは見えるんだけど、カンファレンスの発表だけではそこまでは見えないのね。一方で、プレゼンテーションの技巧は良くなっているので。
まあ、私が見た発表は比嘉さんによる3コマ連続セッションの最初の1コマに過ぎないので、後のほうの実践編ではそのへんもカバーしてたのかもしれないけどね。ま、そういう言葉を耳にしました、というのと、私もそれを否定はできないと感じた、という話。
Irenka
次のコマは 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を適用する。
- 今後はポップアップメニューの項目から任意の時点で、特定のファイルにのみ適用するような仕掛けも作りたい。
- Eclipseに依存しない実行形態も作成する?
- サーバーサイドに構成管理システムに対するゲートウェイとして設置し、セマンティクスを考慮するリポジトリ・ゲートキーパーを作成することも考えられる。(商用向けに作成予定)
ソースコードを編集するだけではない。
けれども、ソースコードとして見えないところでフレームワークが勝手に色々やってしまうがための問題もあるのではないか(see 自動で何かやってくれるフレームワークで戸惑う理由 )
コンパイルエラーや警告を生成することも可能。