sbt-appengine-pluginにサンプルを放り込む

はじめに

Scala始めた人が、じゃあ試しに何か作ってみようかなーとか考えた際に、ネタとしてGAE/Jを考える割合は多分120%くらいあるんじゃないかなーとか思ってます。
そんな訳で天領倉敷Scala第4回勉強会 : ATNDでもネタとして設定してみました。
で、開発環境として考えられるのはEclipse or sbt-appengine-pluginあたりかなーと思われます。
個人的にはsbtが超気に入ったので、sbt-appengine-pluginでGAE/Jさんと戯れてみようかなと思った訳なのですよ。

sbt-appengine-pluginの導入手順について

ネタとしては超定番とも言える(と、個人的には重っている)ため、当然のごとく先駆者の方々が沢山いらっしゃいます。
プロジェクトの作成には以下のサイトを参考にさせていただきました。
scala - How to use sbt with Google App Engine? - Stack Overflow
http://kaitenn.blogspot.com/2010/10/sbt-sbtgae.html
specs で GAE/J データストアのユニットテスト - LocalServiceTestHelper使用 - なんとなくな Developer のメモ

サンプルを動かしてみる

やったぜ環境ができたぜーってことで、取り敢えずappengine-java-sdkのdemosにあるサンプルをScalaに書き換えて動かしてやれば満足できるかなとか思いました。
テンプレートがあったので、それを叩き込むことにしました。

HelloAppEngineServlet.java -> HelloAppEngineServlet.scalaに書き換え
package org.example

import java.io.IOException
import javax.servlet.http._

class HelloAppEngineServlet extends HttpServlet {
  override def doGet(req: HttpServletRequest, resp: HttpServletResponse) = {
    resp.setContentType("text/plain")
    resp.getWriter.println("Hello, world")
  }
}

ファイルの配置先など

やったね簡単だね(当然)って感じなんですが、テンプレートのディレクトリ構成とsbtのディレクトリ構成が異なるので、これどうしたもんだと思ったんですが、色々試行錯誤した結果以下のような感じでうまいこといってるみたいです。
src/main以下の構成です。

$ tree
.
|-- resources
|   |-- log4j.properties
|   `-- logging.properties
|-- scala
|   `-- org
|       `-- example
|           `-- HelloAppEngineServlet.scala
`-- webapp
    |-- META-INF
    |   `-- jdoconfig.xml
    |-- WEB-INF
    |   |-- appengine-web.xml
    |   `-- web.xml
    `-- index.html