ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

ステートフルなフレームワーク

rhacoのオフ会で何故かWicketの紹介があったようで、halt氏がそれにインスパイアされてステートフルなフレームワークについてエントリを書いていたので反応してみる。

ぺちぺでのステートフルなフレームワークっていうと。pieceがあるけど、yamlかいたりしなきゃいけない分Wicketの方がずっとシンプルに見えた。というか、Webアプリ作ってるのに、普通のGUIアプリを開発してるような感じでコードを書いていけるのは本当にうまい。楽しそう。
...
で、ステートフルなフレームワークでモバイルにばっちり対応してるようなものはいつでてくるんでしょうか。

riafカンファレンス!

ステートフルなフレームワークを作るのは実はそう難しい事じゃないです。自分ですら Xhwlay - イベント駆動指向ステートフルページフロー実行エンジンライブラリ をでっち上げられる位なので。只悩ましいのはHTMLと繋げるところで、マルチウインドウをサポートしようとするとどうしてもステートを保持する為のIDをGETクエリ(POSTでも良いと言えば良いのだけれど)に埋め込まないとイケナイ。つまりHTMLのレンダリング側でちょっと凝る必要が出てきます。
あとは、「今自分はどのページを見ているか」とか、「今居るページから遷移できるページはどれか」というフロー処理のロジックを組み込んで、フローIDの管理はCSRF対策のTicket発行の雰囲気で実装すれば、多分自分でFW作ったことのある人であればそれなりに組めちゃうと思います。
FSM*1についていろいろ英語で難しそうなドキュメントはありますが、要するにすごろくゲームで自分の駒の居る位置と、リクエストに対して進める事のできる升目を把握していれば良い、という感じなので。

で、多分、PHPでステートフルなフレームワークで、モバイル・・・にも、使えるのは Xhwlay です(笑)。いえ、Pieceを知らないというかやってないのでほざいてるだけで、多分Pieceでもできるとは思いますが。Xhwlayはかなり丸裸(Bare)なやつで、フレームワークというよりはライブラリに近い形です。本当にフロー実行部分しか備えてないですし、フロー定義もYAMLじゃなくてPHP連想配列です(笑)。

「それは対応しているとは言えない」という突っ込みはおいといて。

RendererもXhwlay自体が提供しているのは単純にPHPファイルをincludeするやつくらいで、I/Fさえ合わせれば速攻でSmarty用のやつとかも作れます、というかYakiBikiではそうしてます。ので、Piece Unity よりBareで単純な分、モバイル開発のようにそのドメインに特化したノウハウを組み込まなければならないような条件下ではXhwlayもそれなりに検討の余地有りだと思います。ただしCodeGeneratorとかValidatorライブラリとかORMとかは一切付けてないので、その辺はPEARからなり自前からなり引っ張ってきて用意する必要があります。またHTMLのヘルパー機能も一切付いてないので、その辺もプロジェクトに合わせて好き勝手に実装する必要があります。

うーん、でも結局ニッチ、マニアック、オレオレ野良FWなのには変わりないんですけどね。WicketのようなGUIっぽいコーディングはできません。元々Piece UnityやPiece Flowが難しすぎて、もっと単純にできるんじゃないか?と思って作り出したやつなので。基本思想はPieceよりで、Wicket程にはリベラルじゃないです。

以上、宣伝でした。

*1:Finite State Machine