ClojureでGoogle App Engine Webアプリケーションの作成

Google App EngineのWebアプリをClojureで簡単に作成できるか試してみた。

appengine-magic

appengine-magicを使うと簡単そうだな。
https://github.com/gcv/appengine-magic/tree/
Getting Startedに従って、作ってみよう。

Google AppEngine SDKのインストール

Python版とJava版があるが、Java版をダウンロードする。
~/optにappengne-java-sdk-1.4.0を解凍する。
~/opt/appengine-java-sdk-1.4.0/binにPATHを通す。

Hello,world!を作る

まずはHello,world!を作ってみるよ。

プロジェクトの作成

helloプロジェクトを作成する。

$ lein new hello

カレントディレクトリを変更する。

$ cd hello

不要ファイルの削除

src/hello/core.cljは後でappengine-magicで生成するので、削除する。

$ rm src/hello/core.clj

依存ライブラリの取得

project.cljを編集し、:dev-dependenciesに次のライブラリを追加する。

:dev-dependencies [ [appengine-magic "0.3.2"] ]

依存ライブラリを取得し、appengine-magicプラグインを有効にする。

$ lein deps

デフォルトファイルの作成

appengine-newタスクを実行し、次のデフォルトファイルを作成する。

  1. src/hello/core.clj
  2. app_servlet.clj
  3. resources/WEB-INF/web.xml
  4. resources/WEB-INF/appengine-web.xml
$ lein appengine-new

動作確認

REPLを起動する。

user=> (use 'hello.core)
nil
user=> (require '[appengine-magic.core :as ae])
nil
user=> (ae/start hello-app)
2011-01-15 10:11:10.314:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
2011-01-15 10:11:10.371:INFO::jetty-6.1.x
2011-01-15 10:11:14.795:INFO::Started SocketConnector@0.0.0.0:8080
#<Server Server@62fb35>
user=> 

ブラウザで http://localhost:8080/ を表示する。
「Hello, world!」が表示されればOK。

サーバ停止は

user=> (ae/stop)

ポート番号を変えるには、

user=> (ae/start foo-app :port 8095)

開発用サーバでのテスト

エントリポイントのサーブレットコンパイルし、アプリケーションのjarファイルを作成する。
このjarファイルと依存ライブラリをresorces/WEB-INF/libへコピーする。

$ lein appengine-prepare

開発用サーバを起動する。

$ dev_appserver.sh resources/
..snip..
情報: Started SelectChannelConnector@127.0.0.1:8080
2011/01/15 1:35:05 com.google.appengine.tools.development.DevAppServerImpl start
情報: The server is running at http://localhost:8080/

ブラウザで http://localhost:8080/ を表示する。
「Hello, world!」が表示されればOK。

Google App Engineへのデプロイ

resouces/WEB-INF/appengine-web.xmlのapplicationに公開するアプリケーションIDを設定する。
hogehoge-appを取得していれば、

  <application>hogehoge-app</application>

を設定する。

アプリケーションをデプロイする。

$ appcfg.sh update resources/
..snip..
Email: メールアドレスを入力
Password for 入力したメールアドレス: パスワードを入力
..snip..
Update completed successfully.
Success.
Cleaning up temporary files...

http://アプリケーションID.appspot.com/ にアクセスしてみる。
「Hello, world!」が表示された。
動いた。\(^▽^)/