Scala で Google App Engine
Scalaのプログラムは,かなりそのままJavaのクラスファイルとなるので,Google App EngineのサーブレットをScalaで書けるんじゃないかと思っていたが,やってみたら,すごく簡単に書けた.
方法は,こちらのサイトを参考.Eclipseのプラグインを使う.
準備
下記の手順で環境をセットアップする.
- Google App Engine のプラグインをEclipseに導入する.
- ScalaのプラグインをEclipseに導入する.方法は,こちら.
- App Engineのプロジェクトを作成する.
- パッケージエクスプローラのプロジェクト名上で,右クリックでコンテクストメニューを出し,Scala-> Add Scala Natureを選択.これによって,作成したプロジェクトでScalaが使えるようになる.
ここまでで,App Engine開発サーバでScalaが実行できるようになる.が,クラウドにデプロイしてもScalaのライブラリがクラウドにコピーされないため動作しない.ライブラリがコピーされるようにするには,下記が必要.
- Scalaのライブラリjarを war/WEB-INF/lib にコピー(後述)
サーブレット
準備ができたら,あとは,JavaのServletクラスを継承して,Scalaでサーブレットを書いてやればよい.このとき,右クリック,new->class ではなく,new -> other で出てくるウィザードのなかから,Scala classを選択すれば,Scalaのクラスを作成できる.
import java.io.IOException import javax.servlet.http._ class HelloServlet extends HttpServlet { override def doGet(req: HttpServletRequest, resp: HttpServletResponse) { resp.setContentType("text/plain") resp.getWriter().println("Hello world, from Scala!") } }
簡単だ.この例だと簡単すぎて,Scalaで書く意味がない:).
あとは,特に何もする必要は無く,普通に開発サーバを使うことができる.
ライブラリのコピー
前述したように,war/WEB-INF/lib 以下にScalaのライブラリjarをコピーする必要がある.どこから持ってきてもよいと思うが,pluginに含まれているjarのパスが,パッケージエクスプローラのScala Library の下に見えているので,それをコピーする.私のMac OSでの環境の場合は,こんな感じ.
> cp /Applications/eclipse/configuration/org.eclipse.osgi\ /bundles/354/1/.cp/lib/scala-{dbc,library,swing}.jar \ workspace/scalagae/war/WEB-INF/lib
これで,クラウドにデプロイして実行することができた.