Google App Engine for Java コードラボ第三回 へ行ってきた

初めてコードラボに参加した

GAE/Jは以前から触ったりajnへ参加したりしているが、チュートリアルを通して始めて利用した機能もあり、なかなかよい経験ができた。
また、チューターの方も言っていたが、特有の「ハマりどころ」への質問もできて時間の有効活用になったのではないか。

@dddaisuke 氏作成のキュメントが素晴らしかった。
blogアプリの作成を通して、GAE/Jの機能を利用するというシナリオで進めた。

Chapter 1 Eclipse Plug-in Deployment

まずはGAE/Jのプロジェクトを作るところ。
事前にEclipseのインストールをしておいたが、JREで動いているとJSPコンパイルできない人など(自分もこれはハマったことがあるw)。
一人だと、こーゆーところで時間を食ったりするんだよなと。

プラグインで作ったプロジェクトをローカル環境とプロダクション環境で動かす。
素のServletは起動が早いなと。

続いてLoggerの使い方。管理コンソール上でどのようにログが書かれるのかを確認。
実際のサービスではログは重要なので、このあたりの説明がうれしい。
懇親会でだれかが言っていたけど、リクエストログとロギングの内容がまとまっているので見やすい。これは確かに思う。
Tomcatアクセスログlog4jのログの二つを見比べるなんてこともない。仕事では二つのログを統合してるけど好評だったし。需要はあるのかもしれない。

個人的にはログはlog4が好きなので、以下を参考に組み込んでいる。

GAE/Jでlog4jの日付を日本時間で出力する。
http://blog.cartn.jp/archives/454

質問し忘れたのだけど、appengineのjarにもlog4jらしきクラスがあるが、ローカル環境でしか動かない。聞いておけばよかった!

Chapter 2 Write in Datastore

Datastoreへの書き込み。PersistenceManagerを扱うヘルパーを作るなど。
エンティティにアノテーションを付けてmakePersistent()を呼び出すという流れになれると、insert/updateのSQLを書くのが苦痛になる。
最近SAStrutsを集中的に使っていたときはJdbcManagerにかなりラクをさせてもらった。

Chapter 3 Read and rewrite Datastore

Datastoreからの読み出し&書き換え。クエリを使う。
ローカル環境での作成はサクっと終わったのだが、プロダクション環境でインデックスが作成されず、なかなか確認できなかった。
@tmatsuo 氏に聞いたところ、インデックスはすぐに作成されるわけではない(!)とのこと。てことは、検索・ソートでヒットしなかったり、最悪エラーが発生し続けることになる。対処としては、アプリのバージョンを変えて、インデックスが作成されたら入れ替えるとのこと。
先日Datastoreが読み取り専用になったりしたけど、このあたりは事前に想定してコーディングするべきなのかも。

Chapter 4 Authentication with Google Account

認証サービスの利用。
初めて利用した。プロダクション環境のDatastoreにアクセスるるにはアプリ上に管理ツールを作る必要があるので、必ず使うと思う。
余談だけど、「/_ah/」以下はセキュリティの設定が必要かなと思う。いきなりセッション消されたりしたら泣けるし。

Chapter 5 Adding Tag to blog / List Property

時間がなくて飛ばしたところ。ソースをチェックアウトした。

Chapter 6 Comment/ SMTP

メールの送信。
ローカル環境ではメールが届きません。ここは以前ハマったところw
個人的にはメールを送るならJavaMailではなくLow Level APIを使うと思う。

Chapter 7 Cache

memcacheサービスを利用する。
これも初の利用。分散環境ではセッションが使えないのでその代わりくらに思ってたけど、データストアのアクセスを高速にするため、キャッシュのように事前に問い合わせるとのことだった。
キャッシュの更新などなど考えることが多くなりそうなので、当面は利用しないかなと。

Chapter 8 URL fetch

Chapter 9 Image Manipulation

この二つは時間が無くて進まなかった。家に帰ってからの個人課題かな。

そのほかのメモ

■ログのダウンロード
時間が余ったので、管理コンソール上で見れるログをダウンロードしてみた。
SDKがインストールされている場所(eclipseのpluginsフォルダにある)の/bin/appcfg.cmdを利用する

/bin/appcfg.cmd request_logs [webアプリのルート] [ダウンロード先]

/WEB-INF/appengine-web.xmlの設定を参照する。

■web.xmlの検証
XMLの検証のためにextra validationを設定するとエラーを出してくれるので、XMLの編集ミスが減らせます。
1.プロジェクト名の上で右クリックをして、Propertiesを選択
2.Validationを選択
3.Enable project specific settingsにチェックを入れる
4.Add validation builder to projectにチェックを入れる
5.[Apply]ボタンをクリック
6.[OK]ボタンをクリック

■ローカルの管理コンソール上でデータストアの内容が文字化けする

■AccessControlExceptionは出力されても問題ない!


組み込み系の方もいたりして、GAEの注目度の高さを再認識した。
とても楽しい一日を過ごせた。みなさまありがとうございました!