Scala用のシンプルなWebフレームワーク「Scalatra」

ScalaのWebフレームワークといえばPlay Frameworkが有名です(弊社でもScalaでの開発にはPlayを使っています)が、Playはサーブレットコンテナ上では動作しません。Scalaサーブレットコンテナ上で動作するWebアプリケーションを作るのであればScalatraというフレームワークがおすすめです。

Scalatraはその名の通りRubySinatra風のWebフレームワークです。基本機能はルーティングのみですが、テンプレートエンジンとの連携機能も可能ですし、認証・バリデーションなどをサポートするためのモジュールも用意されています。

ScalatraのWebサイトのGetting startedに掲載されている簡単なプログラムの例を見てみましょう。

package com.example.app

import org.scalatra._
import scalate.ScalateSupport

class MyServlet extends ScalatraServlet with ScalateSupport {

  get("/") {
    <html>
      <body>
        <h1>Hello, world!</h1>
        Say <a href="hello-scalate">hello to Scalate</a>.
      </body>
    </html>
  }
}

ScalatraServletを継承したサーブレットを作成し、ドキュメントルートにマッピングするアクションを1つ定義しています。このサンプルではアクションの中ではXMLリテラルを使用してHTMLを生成していますが、もちろんテンプレートエンジンを使用することもできます。リクエストパラメータはparams(パラメータ名)で取得することができます。ScalatraはPlayのように極端なステートレス指向が強要されないのでScalaに慣れていなくてもそれなりに使いやすいのではないかと思います。

なお、ScalatraのWebサイトにはgiter8というMavenarchetypeのようにプロジェクトの雛形を作成するためのツールを使用してプロジェクトを作成する方法が紹介されているのですが、giter8自体をインストールする必要があります。もちろんgiter8を使わずに自分で1からsbtプロジェクトを作成してもよいのですが、ちゃんとしたアプリを作ろうと思うとO/Rマッパーやテンプレートエンジンの設定なども必要になり、これまた結構面倒なわけです。

そこで、Scalatraと便利なモジュールや設定をセットにしたテンプレートプロジェクトを作ってみました。

github.com

このテンプレートプロジェクトには以下のライブラリがすぐ使える状態になっています。

  • scalatra 2.2.2(フレームワーク本体)
  • twirl 0.7.0(テンプレートエンジン)
  • slick 2.0.1(O/Rマッパー)
  • scalatra-forms 0.0.14(バリデーション用のライブラリ)
  • sbt 0.13.1(ビルドツール

リポジトリをクローンしてproject/build.scalaorganizationnameを書き換えてご利用ください。

なお、私一応Scalatraのコミッタをやっております。ほぼ幽霊部員で申し訳ない状態なのですが、今はScalatraのScala 2.11対応に悪戦苦闘しているところですw