2013年12月20日金曜日

Google App Engine + SBTで始めました

Google App EngineをSBTで使ってみました!

GAE用のSBTのプラグインsbt-appengineがあるようなので、これを使ってもいいのですが、GAE初心者の僕としては、GAEを理解する為に、sbt-appengineを使わずにやってみました。


Google App Engine SDK for Javaのダウンロード

ここからGoogle App Engine SDK for Javaをダウンロードします。

Google App Engine SDK for Javaの解凍

ダウンロードしたGoogle App Engine SDK for Javaを好きな場所に解凍します。

SBTのダウンロード

ここからZIPまたはTGZ版をダウンロードします。

SBTの解凍

ダウンロードしたSBTを好きな場所に解凍します。

xsbt-web-plugin

GAEはWARファイルを使ってデプロイするようなので、sbt-appengineは使いませんが、WARファイルを作る為のプラグインxsbt-web-pluginは使います。

plugins.sbtの設定

解凍したSBTディレクトリの中にsbt/project/plugins.sbtを作成します。

addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "0.5.0")

build.sbtの作成

解凍したSBTディレクトリの中にsbt/build.sbtを作成します。

10 
11 
12 
13 
name := "****"

organization := "****"

version := "0.1.0"

scalaVersion := "2.10.3"

seq(webSettings :_*)

libraryDependencies += "org.eclipse.jetty" % "jetty-webapp" % "9.1.0.v20131115" % "container"

libraryDependencies += "org.eclipse.jetty" % "jetty-plus" % "9.1.0.v20131115" % "container"

WARファイルに組み込むライブラリ

xsbt-web-pluginで作るWARファイルに入れるライブラリをsbt/libに置きます。必要なライブラリは、appengine-java-sdk-***/lib/userの中のjar全てです。サブディレクトリの中のjarもです。だだし、sbt/libにコピーするときに、全てのjarファイルをsbt/lib直下に置く必要があります。ディレクトリ構造をそのままコピーしなように注意が必要です。

外部ライブラリ参照

WARファイルに組み込まないライブラリも使用するので、それらのライブラリを参照するようにクラスパスの設定をする必要があります。

必要な外部ライブラリは、appengine-java-sdk-***/lib/sharedの中のライブラリです。

sbt/build.sbtに次の記述を追加します。

unmanagedJars in Compile ++= {
  val base = baseDirectory.value
  val gae = base / ".." / "appengine-java-sdk-1.8.8" / "lib" / "shared"
  val jars = (gae ** "*.jar") +++ (gae / "jsp" / "*.jar")
  jars.classpath
}

web.xmlの作成

sbt/src/main/webapp/WEB-INFweb.xmlを作成します。とりあえず、空のやつを作ります。

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
</web-app>

appengine-web.xmlの作成

sbt/src/main/webapp/WEB-INFappengine-web.xmlを作成します。とりあえず、最小限の項目を記述します。

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>application-id</application>
  <version>1</version>
  <threadsafe>true</threadsafe>
</appengine-web-app>

<application>タグに、アプリケーションIDを指定するのを忘れずに。アプリケーションIDは、ここから取得できます。

<threadsafe>タグは、アプリケーションが同時に複数のリクエストを受け付けられるようになっているかを指定する項目です。1つづしかリクエスト受け付けられなければfalse、同時に複数のリクエストを処理できる場合にはtrueを指定します。

静的ファイルでHello World

sbt/src/main/webappindex.htmlを作成ます。とりあえず、Hello Worldです。

<html>
  <head>
    <title>Title</title>
  </head>
  <body>
    Hello World
  </body>
</html>

WARファイルの作成

SBTのインタープリタに入り、packageと入力します。

> sbt
sbt> package

すると、sbt/targetにWARファイル化する前のwebappディレクトリが現れます。GAEの開発用ウェブサーバを起動するときには、このディレクトリを指定するといいでしょう。さらに、sbt/target/scala-***には、(project name)_(scala version)-(project version).warが作成されています。

開発用ウェブサーバの起動

開発用に使用するウェブサーバもGAE SDKについてきます。appengine-java-sdk-***/bin/dev_appserver.cmd(Windows)です。

起動
appengine-java-sdk-***/bin/dev_appserver.cmd sbt/target/webapp

起動したら、ブラウザでhttp://localhost:8080にアクセスしてみましょう。Hello Worldと表示されていれば成功です。

アプリケーションのアップロード

次のコマンドでアップロードができます。

appengine-java-sdk-***/bin/appcfg.cmd update sbt/target/webapp

途中でemailとpasswordを聞かれるので、入力します。しばらくすると完了します。

管理画面に行って、デプロイされている確認しましょう。

関連記事

0 件のコメント:

コメントを投稿