Boot.scalaによる設定とレイアウト、CSSの配置
Topページと登録画面を実装しましたので、最後にBoot.scalaに設定を行いましょう。
class Boot {
def boot {
...中略...
// Build SiteMap
val entries = Menu(Loc("Home", List("index"), "Topページ")) ::
Menu(Loc("Save", List("save"), "イベントを作る")) :: Nil // *1
LiftRules.setSiteMap(SiteMap(entries:_*))
// /save/1のようにURLからIDへパラメータを設定する
LiftRules.rewrite.append {
case RewriteRequest(ParsePath( List("save", id), _ , _ ,_ ), _, _) =>
RewriteResponse("save"::Nil , Map("id" -> id))
} // *2
LiftRules.early.append{ _.setCharacterEncoding("UTF-8") } // *3
}
}
太字が修正部分です。*1は、登録画面をメニューに追加しています。
*2は、"/save/1"のようなRESTFulなURLでidをパラメータとして受け取るための設定です。*3は、フォームから送信されたデータをUTF-8で扱うために設定しています。
デフォルトのレイアウトも修正します。"src/main/webapp/templates-hidden/default.html"を、ダウンロードサンプルに含まれる同名のファイルと同じ内容に置き換えます。
最後に、CSSファイルを用意して画面の見た目を整えます。"src/main/webapp"に"eventengine.css"というファイル名で、ダウンロードサンプルに含まれる同名のファイルと同じ内容のものを用意します。
これで、登録できるようになるまでの基本的な実装が終わりました。
動作確認
では、ローカル環境で動作確認してみましょう。
ローカル環境での動作確認
まずは、mavenコマンドでコンパイルを行います。リスト10のようにmvn packageコマンドを実行することで、targetディレクトリにアプリケーションがコンパイルされ、warファイルとして出力されます。
mvn package
ローカルでの開発サーバの起動は、Google App EngineのSDkを利用します。リスト11のようにGoogle App EngineのSDkに含まれているdev_appserverコマンドで、mvn packageで出力されたwebアプリケーションディレクトリ("target/czeventengine-1.0-SNAPSHOT")を引数に指定することで、開発サーバが起動します。
dev_appserver.sh ./target/czeventengine-1.0-SNAPSHOT
開発サーバが起動したら"http://localhost:8080"にアクセスして、イベントを登録してみましょう。 また、今回作成したアプリケーションは、実際にGoogle App Engine上で動作しています。http://czeventengine.appspot.com/で、筆者が作成したアプリケーションに実際にアクセスすることができます。
まとめ
今回は、LiftアプリケーションをGoogle App Engine上で動作させる方法と、Low Level APIを利用したデータアクセスについて解説しました。
Google App Engineというクラウドサービスと、Scala/Liftを組み合わせることで、スケーラビリティの不安がないサービスを柔軟でシンプルなプログラムで実装できる可能性が開けてきました。また、Google App Engineでは、Googleアカウントによるユーザー認証やTaskQueueによる非同期処理などGoogleが提供するサービスを利用したサービスを提供することができます。
ここまでの内容では、まだイベントへの参加登録ができない中途半端な状態ですが、次回は、Googleが提供するユーザーアカウント認証を利用して参加登録を行い、TaskQueueを利用した非同期処理で参加者へリマインダメールを送信する機能を追加する方法を解説します。
参考資料
- The Scala Programing Language
- Lift
- 『Programming in Scala』 Martin Odersky・Lex Spoon・Bill Venners 著、Artima Inc、2008年11月
- 『The Definitive Guide to Lift: A Scala-based Web Framework』 Derek Chen-Becker・Tyler Weir・Marius Danciu 著、Apress、2009年5月
- Google App Engine デベロッパーガイド
- TOPGATE Google関連技術サイト
