Google App Engineを使ってみた

会社の業務で利用できないかいろいろ試してみた。もうケータイの公式サイトで利用している人はいるのかな?
データの整合性はそこまで重要ではないので、トランザクションとかにかんしては問題ないのはうれしいところ。


利用したフレームワーク
slim3

  • 生のServletを利用するつもりはないので。SAStrutsでの開発がかなりよかったので、当然の選択。
  • BigTableへのアクセスも考えられている。JDOのキャストの嵐はさけたい。
  • 前に使ったときはJDOベースだったけど、ごっそり変わってたので驚いた。


mobylet

  • 社内ライブラリやフレームワークはあるけど、今後のメンテを考えると使ってみたかった。
  • iモードブラウザ1.0向けに外部スタイルシートをインラインに展開するのがかなりよい。ついでにclass属性も消せたらうれしいなと。
  • 最初、mobylet.xmlの記述ではまった…。こんな感じで書くっぽい。


  org.mobylet.core.initializer.impl.MobyletInitializerImpl
  org.mobylet.gae.initializer.GaeMobyletInitializer

MobyletInitializerImplは両方書くのか。ソース読めばすぐにわかったけど、チェックアウトの手間を惜しんだのがよくなかった。


guice

  • 会社の業務ではDIコンテナは必須。導入してよかったと思う。Springを選んだことはおいておいて。
  • 初めて使ってみたけど、設定をすべてJavaで行えるのでコードアシストやらが使えてラク。実行時にクラスが見つからないよExceptionに出会うことも無いはず。
  • 案件ごとにAbstractModuleの実装を切り替えたいので、そこはプロパティファイルで実装クラスを指定できる感じにしてみるかな。


そのほか

  • URLをリライトするフィルタを作った。ユーザーIDの取得に必須。他にfunctionで実装してもよいかもしれない。
  • 会員認証を行うFrontControllerも作ってみた。StrutsのActionServletで実装済みのものを、ほぼそのまま。


感想

  • 試した限りでは特に問題なし。
  • 初回アクセスは少し待たされることもあるけど、起動してしまうとレスポンスもよい。
  • なにより、移植したSQLが単純なのが要因な気がする。ショッピングカートを実装したりするならトランザクションは必須だろうけど、そこはあまり気にしない。
  • 最初、URLパラメータはpublicフィールドにマッピングされると思ってたので、Controller#paramに気づかなかった。
  • Controllerを継承したクラスのテストケースを書くと思うと、パラメータの値は引数に指定したほうがラクかなと思う。
  • いままでカスタムタグばかり使っていたので、慣れる必要があるな。
  • 作ってる途中で気づいたのだけど、RequestHandler#handleで、URLパラメータの値がattributeにセットされていた。formのf:hiddenとかではラクだけど、なんかはまることがありそう。どこかでフレームワークが利用しているのだろうか。
  • mobyletでHTTPリクエストの内容がThreadLocalで保持されていて驚いた。ThreadLocalってこーやって使うのか。


まだまだ発展中なので熱い議論が交わされている。
いままでの開発とは違って苦労するところもあるけど、GAE/Jは面白い。