なんじゃくにっき

プログラミングの話題中心。

ScalaのWebProjectでCoffeeScriptを使う

enchant.jsというJavaScriptのゲームライブラリがあります。
そのmeetupの会場から投稿。
 
どうせなら素のJSじゃなくてCoffeeScriptで書こうと思って、
CoffeeScriptを使えるようにしてみた。
 
CoffeeScripted Sbtというsbtプラグインを使います。
 
今回はサーバー側のフレームワークとしてはScalatraを使います。
 
1. プロジェクトの雛形を取得
git clone http://github.com/scalatra/scalatra-sbt-prototype.git

g8 scalatra/scalatra-sbt
で。
(これだと使われるのはFilterではなくてServlet形式なのでFilterを使いたい場合は別途自分で作成する必要あり)
 
2. プラグインの設定
%PROJECT_HOME%/project/plugins.sbtに


resolvers += Resolver.url("sbt-plugin-releases",
new URL("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases/"))(
Resolver.ivyStylePatterns)

addSbtPlugin("me.lessis" % "coffeescripted-sbt" % "0.2.2")

追加。
 
%PROJECT_HOME%/build.sbtに

seq(coffeeSettings: _*)
追加。

3. ソース書いてコンパイルしてみる。
%PROJECT_HOME%/src/main/coffeeに
hello.coffee
というファイルを作って中身を以下のようにする。


hello = ->
console.log("Hello World!!")

hello()

 
コンパイルはsbtの中で
coffee
 
4. 配備設定
デフォルトだとコンパイルされてできるファイルは
target/scala-x.x.x/resource_managed/main/js
に生成されますが、
WEBプロジェクトだとwebapp以下に生成したい。
ので、
%PROJECT_HOME%/build.sbtに

(resourceManaged in (Compile, CoffeeKeys.coffee)) <<= baseDirectory(_ /"src" / "main" / "webapp" / "js_generated")
追加。
 
ScalatraServletに

get("*.js") {
servletContext.getNamedDispatcher("default").forward(request, response)
}
追加。
 
5. 後は開発あるのみ。
jetty立ち上げて自動コンパイルするなら

~;coffee; container:start; container:reload /