【入門編】Slim3で始める!GAE/JでWebアプリケーション開発 (第3回)
管理コンソールについて
アプリケーションのデプロイが完了したところで管理コンソールを見てみましょう。管理コンソールでは、アプリケーションの利用状況やログの確認などさまざまなな機能が提供されています。 ここでは良く使うダッシュボード、ログ、データストアビューアについて紹介します。
以下へアクセスして管理コンソールにログインして下さい。
アプリケーション一覧から先ほどデプロイしたアプリケーション名リンクをクリックします。
するとアプリケーションのダッシュボードが表示されます。
- Dashboard
管理コンソールの中でもこのダッシュボードは一番よく確認することになります。各項目の見方は以下の通りです。- ①Chartsシステム使用量を表すグラフを表示しています。デフォルトでは「Requests/Second(秒間リクエスト数)」をグラフに表示しています。プルダウンメニューによりグラフの種類の変更、その右のボタンで直近6時間~30日の間で表示することができます。
- ②Instancesアプリケーションに割り当てられている現在のインスタンス数、平均QPS(Queries Per Second)、平均レイテンシ、平均使用メモリを表しています。Details リンクをクリックすることでもう少し詳細に各インスタンスの負荷状況を確認できます。
- ③Billing Status「Billing Status: Free」は無料枠で利用中であることを表しています。ResourceとUsageは各リソースの消費状況を表しています。リソースの消費(Usage)が100%になってしまうとそれ以上利用できなくなってしまうので消費が多い場合は注意が必要です。もし、Usageが100%になってしまった場合は、課金設定を有効にしてリソースの上限を増やすか、消費したリソースがリセットされる(※)まで利用できなくなります。とは言え、中小規模のほとんどのアプリケーションであれば無料枠のリソース容量で十分運用が可能です。
※リソースの消費は24時間おきに自動的にリセットされます。 - ④Current Loadリクエストの負荷状況をリクエスト合計の多い順に表示しています。各リクエストURIごとの分間リクエスト、リクエスト合計、平均CPU消費量(API消費量)、CPU消費量の割合を表しています。CPU消費の高いリクエストはそのままコストに跳ね返ってくるので、これらの情報も興味深いものです。これらの集計も24時間おきにリセットされます。
- ⑤Errorsリクエストのエラー状況をエラー発生回数の多い順に表示しています。404(NotFound)もエラーとしてカウントするので、例えばfavicon.icoファイル(Webページのアイコンファイル)がない場合にもエラーとしてカウントされます。想定外のエラーがある場合は、そのURIリンクをクリックすることですぐにエラーログを確認することができます。Errosの集計は直近24時間分が対象です。
ざっと説明しましたが、それぞれの項目の「?」アイコンをクリックするとより詳細な説明があります。
- Logsアプリケーションのログを確認できます。アプリケーションで仕掛けたデバッグログや、エラーログと一緒に、そのリクエストで消費したCPUやAPIリソースも出力されます。
Optionsをクリックすると、フィルター条件などの詳細条件を指定してログを絞り込むことができます。
但し、ログのダウンロード機能はなく、また一定期間より古いログは消失(未検証ですが90日程度との報告あり)してしまうという残念な点もあります。 - Datastore Viewer本番環境のデータストアの内容を確認することができます。データの参照に加えて、追加、更新、削除などが行えます。
但し、データ追加の操作は面倒かつリスク(※)を伴うので、あくまで参照と削除、ちょっとした更新用と割り切った方が無難です。
※データストアのスキーマレスな性質上、データ追加時にはカラムの型を指定しつつ値の入力を行う必要があり、対応するModelのプロパティの型と相違する危険性があります。
CNMVについて
上でDatastore Viewerを紹介しましたが、Slim3を使うならもっと便利なデータビューアがあるので紹介します。CNMVというツールですが、これをSlim3で作成したアプリケーションに組み込むことで、簡単にプロジェクト内のモデルを使ったデータの操作を行うことができます。主に以下のような機能があります。
- Slim3のModelクラスのCRUD操作
- CSVダウンロード&アップロード
- 指定したエンティティの全件削除
以下からダウンロードすることができます。
デモも用意されていて試すこともできます。ダウンロード後は readme.txt に従ってセットアップして下さい。
CNMVを使ってSimpleBBSのHeadのデータを見てみると以下のようなイメージになります。
こちらは編集画面のイメージです。
GAEの制約について
ここまで特に触れませんでしたが、GAEでアプリケーション開発する上で忘れてはならない『制約』というのが存在します。これはGoogleインフラのリソースを平等に、効率的に利用するため各アプリケーションに課せられた制限です。
代表的なものをいくつかピックアップすると、
- リクエストの処理は30秒以内で済ませるリクエストを受け取ってから30秒以内にレスポンスを返す必要がある。これを超えると処理は強制的に中断されクライアントには500エラーが返る。
- ディスクへの書き込みは行えない例えばアップロードファイルなどをファイルとして保存することはできない。永続化するデータはすべてデータストア、またはBlobストアへ保存する。
- スレッド生成が行えないスレッドを用いた並列処理は行えない。代わりにタスクキューAPIを用いることで非同期処理の実行が可能。
- 外部サーバへのソケット接続ネットワークにTCP/IPソケットの利用ができない。代わりにメールAPIや外部リソースへのアクセスにはURLフェッチAPIを利用可能。
- User Interface Toolkits APIの利用制限例えばJava 2D API、Image I/O API を使った画像処理などが行えない。代わりに専用のImagesAPIを使うことでリサイズやトリミング、回転や合成などを行うことが可能。
このような制約があります。アプリで使用する外部ライブラリにも注意が必要です。SimpleBBSのような単純なアプリの場合はこれらを意識せずに済みましたが、少し手の込んだアプリでこれらの制約を知らずに設計した場合、実装時に詰まる可能性があります。最低限上記の制約については覚えておくとよいでしょう。
あとがき
今回でSlim3を使ったGAEアプリケーション開発の入門編は終了となります。Slim3でサクサク開発&テストが行え、簡単にアプリケーションをリリース可能だということを体験頂けたでしょうか。
今回作成したSimpleBBSは単純ながらもデータストアへのCRUD処理、入力値のバリデーション、多国語に拡張可能なリソースバンドルに対応したメッセージの利用など基本的な部分は抑えたつもりです。ただし、あくまでサンプルアプリなのでいくつか課題が残っています。実際にカスタマー向けに公開するのであれば以下のような対応も検討した方がよいでしょう。
- CSRF(クロスサイトリクエストフォージェリ)への対応
- パスワードをリクエストパラメータで持ち回している箇所(記事編集ページ)の修正
- ”次のページ”などのページング対応
前の2点はSlim3やGAEとは関係のない別のレイヤの話です。CSRF対策は例えばSessionを使った遷移チェックトークンを実装するなどの対応があります。パスワードについてはユーザが入力した内容を平文でHTMLソース上に出力するのは、hiddenパラメータであってもセキュリティ上よくないです。これもSessionを使えばパスワードを持ち回さなくて済むでしょう。ページングは記事一覧のように1ページに表示する件数が多くなる場合、GAEではCursorを使ってページング機能を実装するのが好ましいです。これについては機会があれば紹介したいと思います。
今ではGAEやSlim3に関するノウハウも溜まってきていますので、大抵のことは検索すれば見つかると思います。もし調べても分からなことがあればTwitterやGoogleグループで質問すると先駆者の方々からアドバイスを貰うこともできます。例えばTwitterであれば #appengine や #slim3 のハッシュタグをつけて質問してみたり、もっと詳細な内容の場合は Google-App-Engine-JapanのML 、Slim3のことなら Slim3 User JapanのML に質問してみるのもよいでしょう。
本記事を読んで、少しでもスタートの手助けになれば、あるいはこれを機チャレンジしてみようという方がいれば嬉しい限りです。