ScalaのMLでXitrumという新しいWebフレームワークが紹介されていました。完全なドキュメントは以下のURLで公開されています。
READMEを翻訳してみた
Xitrum (ベトナムでは "Smurf") はNettyとHazelcast上に構築された、非同期でクラスタ化可能なScalaベースのWebフレームワークとWebサーバです。
- ScalatraとLiftの間のギャップを埋めます: Scalatraより強力でLiftよりも簡単です。RESTful APIとポストバックの両方を簡単に作成することができます。XitrumはLiftと違いビューファーストではなくScalatraのようにコントローラファーストです。
- URLのルーティングにはJAX-RS風のアノテーションを使用します。すべてのルーティングを一箇所に記述する必要はありません。
- Scalaの思想に従ってタイプセーフです。
- Nettyの思想に従って非同期です。
- セッションはクッキーもしくはクラスタ化されたHazelcastに保存することができます。
- クライアントサイドバリデーションとサーバサイドバリデーションにjQueryバリデーションが統合されています。
- GNU gettextを使用したi18n(国際化)。
- ETagを使用した条件付きGET
また、Hazelcastは以下の機能を提供します:
+-----------------+ | Your app | +-----------------+ | Xitrum | <-- Hazelcast --> Other instances | +-------------+ | | | Action/View | | | +-------------+ | +-----------------+ | Netty | | +-------------+ | | | HTTP Server | | | +-------------+ | +-----------------+
Xitrumはオープンソースです。
ざっと見ての感想
ScalatraとLiftのギャップを埋めるというのは良い狙いどころだと思います。たしかにLiftは複雑すぎるし、逆にScalatraはシンプルすぎて実際に使うには拡張が必須です。
Xitrumのドキュメントの触りだけ眺めてみた感じでは、フレームワークそのものはあまりマジックな感じもなく素直に使えそうな感じです。ScalatraもLiftもURLのルーティングは集中管理するタイプなので、各アクションにアノテーションで書けるのはいいなと思いました。ビューはXMLリテラルで構築することが前提みたいだけどScalateなんかと組み合わせて使うことはできるのかな?
キャッシュやCometのクラスタ化に別のサーバがいらないというのは、クラスタ化されたサーバが相互にキャッシュを持つからXitrumをクラスタ化するだけで分散や冗長化できる、ということだと思いますが、Netty(非同期)といい、このへんの足回りはイマドキな感じ。まあ、異常時を含め本当にちゃんと動くのかどうかは実際に試してみないとわかりませんが。非同期だとデバッグも大変だし…。
面白そうなフレームワークではあるのですが、なんだかんだ言っても普通のAPサーバで動かせないもの(最終的にwarでデプロイできないもの)はまだ実戦投入しにくいのが現状なので(今までのJavaを使っていた部分をScalaで置き換えていくという使い方がメインなので…)、フロントのフレームワーク部分だけを使えるといいのになぁ…と思いました。