#sprayとは
Scala/Akkaベースのwebフレームワーク
- 非フルスタック
- RESTful API設計に向く
- 高速・軽量なビルトインHTTP Server(spray-can)
- Servlet 3.0 互換
spray | REST/HTTP for your Akka/Scala Actors
twirlとは
スタンドアロンなscala template
spray/twirl
このエントリのゴール
sprayのview層にtwirlを導入して簡単なwebアプリケーションを構築する
手順
spray/spray-templateを雛形としてプロジェクトを作ります。
1. spray-templateをcloneする
今回はHTTP Serverとしてspray-can
を使うので、cloneしたらそのままでよい。
$ git clone git://github.com/spray/spray-template.git my-project
$ cd my-project
2. sbtのバージョンを変更する
2014/01現在、sbt 0.13
ではtwirlの依存関係を解決できません。
よってbuild.properties
を編集して、sbtのバージョンを0.12.4
にしてやります。
sbt.version=0.12.4
# sbt.version=0.13.0
3. twirlを導入
spray/twirlを参考にしてtwirlを導入します。
plugins.sbt
に以下の依存関係を追加。
addSbtPlugin("io.spray" % "sbt-twirl" % "0.6.1")
build.sbt
に以下を追記。
import twirl.sbt.TwirlPlugin._
...
seq(Twirl.settings: _*)
これでOK
4. scala templateを追加
twirlがscala templateを認識するパスはsrc/main/twirl
以下です。
src/main/twirl
ディレクトリを作成し、次のscala templateファイルを追加します。
@(title: String, user: String)
<!DOCTYPE html>
<html>
<head>
<title>@title</title>
</head>
<body>
<p>Hello, @user</p>
</body>
</html>
5. scala templateのレンダリング
MyService
トレイトを次の通り書き換えます
trait MyService extends HttpService {
val myRoute =
get {
path("") {
respondWithMediaType(`text/html`) {
complete(html.hello.render("Greeting", "twirl").body)
}
}
}
}
scala templateのレンダリングはrender()
メソッドを用いて行います。
このレンダリング結果はtwirl.api.Html
クラスなので、body
メンバ、もしくはtoString()
メソッドによって、レンダリング結果をString
として取り出してやる必要があります。
6. 動作の確認
$ sbt
> re-start
ブラウザでlocalhost:8080
を開いて、Hello, twirl
という文字列が表示されていれば成功です。