LoginSignup
3

More than 5 years have passed since last update.

spray+twirlを試してみた

Last updated at Posted at 2014-01-18

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にしてやります。

build.properties
sbt.version=0.12.4
# sbt.version=0.13.0

3. twirlを導入
spray/twirlを参考にしてtwirlを導入します。
plugins.sbtに以下の依存関係を追加。

plugins.sbt
addSbtPlugin("io.spray" % "sbt-twirl" % "0.6.1")

build.sbtに以下を追記。

build.sbt
import twirl.sbt.TwirlPlugin._

...

seq(Twirl.settings: _*)

これでOK

4. scala templateを追加
twirlがscala templateを認識するパスはsrc/main/twirl以下です。
src/main/twirlディレクトリを作成し、次のscala templateファイルを追加します。

hello.scala.html
@(title: String, user: String)

<!DOCTYPE html>
<html>
<head>
  <title>@title</title>
</head>
<body>
  <p>Hello, @user</p>
</body>
</html>

5. scala templateのレンダリング
MyServiceトレイトを次の通り書き換えます

Myservice.scala
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という文字列が表示されていれば成功です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3