futoase

よろしくお願いします。

俺 AdventCalendar 3日目

Scalatraとは

scalaで出来てるsinatraライクなweb framework です。
ドキュメントはここに記載されています。
見た感じ、すぐに手を付けられそうですよね。

試してみたい

環境なのですが、OSがMac OS Xであることを前提といたします。

homebrew にて Giter8をインストール

brew install giter8

Giter8にてscalatraスケルトンを作成

g8 scalatra/scalatra-sbt
スケルトン作成中にアプリ名、サーブレット名を聞かれるので適当に入力

テスト実行

Giter8 実行ディレクトリパス以下に "oreadventcalendar" できていることを確認し、
sbtを起動し、且つコンパイルをsbtシェル上から実行する。

cd oreadventcalendar
sbt
container:start
~ compile

※ ~ compileはTriggedExcecutiというsbtの機能だそうです。
参考

http://localhost:8080/ にブラウザでアクセスしてみる

おお、成功。

軽くroutingをいじってみる

oreadventcalendarディレクトリ以下の
src/main/scala ディレクトリに作成したサーブレットファイルがあるので開く。

import org.scalatra._
import java.net.URL
import scalate.ScalateSupport

class OreAdventCalendar extends ScalatraServlet with ScalateSupport {

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

  notFound {
    // Try to render a ScalateTemplate if no route matched
    findTemplate(requestPath) map { path =>
      contentType = "text/html"
      layoutTemplate(path)
    } orElse serveStaticResource() getOrElse resourceNotFound() 
  }
}

ルーティングを一つ増やしてみる。

import org.scalatra._
import java.net.URL
import scalate.ScalateSupport

class OreAdventCalendar extends ScalatraServlet with ScalateSupport {

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

  get("/ore"){
    <html>
      <body>
        <h1>Ore</h1>
        <p>My name is futoase.</p>
      </body>
    </html>
  }

  notFound {
    // Try to render a ScalateTemplate if no route matched
    findTemplate(requestPath) map { path =>
      contentType = "text/html"
      layoutTemplate(path)
    } orElse serveStaticResource() getOrElse resourceNotFound()
  }
}

oreadventcalendarディレクトリ直下にパスを移動し、
sbtを起動、再度コンパイルを実行する

sbt
container:start
~ compile

http://localhost:8080/ore にアクセスしてみると…

おお、ルーティングが有効になっている!

使ってみて

  • scalaらしいこと何もやってない…
  • コマンド任せで、スケルトンからクラスファイルを生成し、楽にアプリを作成できるような雰囲気
  • nodeとプロトタイプ作成速度変わらないのかもしれない(scalaに慣れなくてはいけないだろうけど。)

良い感じでした!

Copyright (c) 2013-2017 Keiji Matsuzaki