#ajn7 へ行ってきた

今回で6回目の参加。
この勉強会は、ATNDをチェックしていないと応募者多数で参加できないので、かなりの幸運に恵まれてる。
#今回は無線LANがつながらなかった。同じ会場で前回は繋がってたのでなんでだろう

今回もメモ程度だけど、一応まとめておく。

appengineでのテストに関して

@shin1ogawaさんのお話。appengineテストに関してご本人のblogを参考にさせてもらっている。
で、今回の目玉はライブコーディングだった。eclipseのショートカットを駆使し、ショートカットの質問が出るほどw

サンプルとなるアプリはサーバーがslim + json、クライアントがhtm5 + jQueryの構成。
appengineでこの構成のメリットは以下のとおり。

  • spin upにかかる時間が目立ちにくい
  • 1回のリクエストにかかる処理がちいさくなる
  • サーバー側のエラーをハンドルしやすい
  • サーバー側のテストがしやすい
  • jspを使わないメリット

この中で、spin upや30秒制限があるので、1リクエストでhtmlの要素を組み立てるのではなく、Ajaxの活用が必要だと感じた。
また、jspを使わないメリットは、jasperの起動が重い!とのこと。
#twitterでは速度的な意味合いでスクリプトレットが良いという話が出てたりしたけど、これは普段webアプリを作っていて気にしない部分だった

一通りの説明の後、神のようなライブコーディングがスタートした。
#普段はJUnit3を使うので、assertThatとisを利用したテストケースの書き方を初めて知ったw

自分がslim3を使い始めたとき、appengineでdatastore関連のテストを書くときラクだと思った。それまでは入門本を参考にテストを書いていたのだが、slim3のテストケースを利用すると、かなりラクができる。
なお、テストに使われるAppEngineTesterはslim3に依存していないとのこと。なので、slim3以外でJDOを使う場合などでも利用できる。これは大きいと思う。

mavenラク

最近勉強を始めたので、今度slim3プロジェクトを作成するときは使おう。blank持ってきてもaptの設定を忘れると悲しい思いをするので!

メンテなどでread onlyの場合のテスト

Delegatを実装し入れ替えることで、Datastoreがread onlyになった場合のテストが可能。そのほか、細かな制御が可能らしい。
実際にサービスを行う場合はApiProxy.CapabilityExceptionのテストが必要とのこと。ここらへんは全く考えていなかった。。。

気になった点

メソッドがstaticなサービスクラスを作ってたけど、普段はどうしてるのだろう。普段の仕事ではSpring FrameworkのDIコンテナを使っているのでappengineでもDIコンテナを利用したいのだけど、spin upにやはり不利なのだろう。

QAタイム

Google Modelatorで受け付けていた中からピックアップされたものをappengineの重鎮に方々に話してもらう形式だった。

appengineに向くもの・向かないものは?

@higayasuoさんは「ユーザーのマインド」が大事とのこと。appengineを使うことに説得が必要なら今までどおりの方法で行うのが良い。appengineを使う事が目的ではなく、手段の一つということ。
他には、受託開発には向かないという意見があった。用件定義で決まったことが実現困難になった場合や、sdkのバージョンアップなど状況の変化によるメンテの必要性が指摘されていた。
逆に言えば、これらの部分に柔軟に対処できるなら、appengineの導入に向かないということは無いはず。

ランキング問題

DatastoreではRDBMSのような集計関数が無い。なので、ランキングの実装が難しい。RDBMSでは当たり前のようにできていたことが難しいことがある。
たとえば「上位10人分は正確にするがそれ以降は正確性を求めない」ような割り切りを行うことが必勝パターンではないか?との事。
他にも、ページ送りのような処理も苦手な分野らしい。「次へ」「前へ」のような処理はカーソルを使うことで可能だが、「4ページ目」のような処理は難しいらしい。興味深い話として、twitterAPIはカーソルのサポートへ変更されたらしい。

BT

@knj77さんのお話が興味深かった。検索のために専用entityを作る処理は、Datastoreならではの設計だと思った。
また、インデックス爆発やDatastoreの分間制限に悩まされるなど、実案件で使っていないので想像もできない話が聞けた。
「Select頑張らない+Insert超頑張る」という言葉を出していたが、これは集計関数が使えないDatastoreでは正にそのとおりだと思う。


今回は、Global Transactionの話のような技術面だけではなく、実案件で使うためのテスト方法、実案件で使っての話が聞けて、収穫が大きかった。
次回も参加できいるよう、ATNDをチェックせねば!

皆さんありがとうございました。