「Google App Engine」は,米Googleが提供しているWebアプリケーション開発/実行環境です。2008年4月に先着1万人限定でプレビュー版を公開,同年5月末からは人数制限を撤廃して,無料のユーザー登録をすれば誰でも使えるようになりました。ここでは,2008年末時点のGoogle App Engineの使い方を紹介します。
※ 記事は執筆時の情報に基づいており,現在では異なる場合があります。

 「Part1 Google App Engineの基礎知識」で説明したように,GoogleはGoogle App Engine(以下GAE)のために8種類のライブラリを用意しました。これらの8種類のライブラリの中には,特殊な用途に対応するものや,上級者向けのものもあります。

 このPart2では,GAEアプリケーションの作り方をこれから覚えようという方のために,最初に使い方を覚えておきたいライブラリを2種類に絞って,それぞれの使い方を説明します。具体的には,「webapp Framework」と「Datastore API」です。

Webアプリケーション・フレームワークの
webapp Framework

 最初に紹介するのは,webapp Frameworkです。これは,簡易的な「Webアプリケーション・フレームワーク」です。Webアプリケーション・フレームワークのごく基本的な機能を提供します。

 webapp Frameworkは,CGI(Common Gateway Interface)とのやり取りを肩代わりしてくれます。CGIは,Webサーバーがクライアントからリクエストを受けたときに,適切なプログラムを呼び出す機能などを備えています。

 webapp Frameworkは,PythonのWebアプリケーション向けの共通規格「WSGI(Web Server Gateway Interface)」に準拠しています。WSGIは,Webサーバーが備えるCGIの仕組みとWebアプリケーションのやり取りの方法を定めたものです。

 Pythonの世界には「Django」や「TurboGears」など,様々なWebアプリケーション・フレームワークが存在し,その多くがWSGIに準拠しています。そして,GAEのサーバー側もWSGIに対応しており,今のところ,GoogleはGAE上でDjangoを利用できるとしています。実際にGAE環境にはDjango 0.96が準備してあり,特別な作業をすることなく,そのまま利用できます。

URLに書き込んだ数字を加算する

 webapp Frameworkを利用したアプリケーションの実例がリスト1*1です。リスト1は,二つの値を単純に足して,その結果を表示するアプリケーションです。app.yamlはPart1でお見せしたような単純なものを使います。リスト2のようなapp.yamlを用意して,アプリケーション名と同名のフォルダにPythonプログラムと一緒に入れてください。

リスト1●二つの値を足して,その結果をWebブラウザに表示するプログラム
リスト1●二つの値を足して,その結果をWebブラウザに表示するプログラム
[画像のクリックで拡大表示]
application: アプリケーション名
version: 1
runtime: python
api _ version: 1

handlers:
- url: /.*
  script: pythonプログラムのファイル名
リスト2●Part2で紹介するサンプル・プログラムで使用するapp.yamlの形式

 このアプリケーションでは,足し算に使う値はURLに書き込むことにします。例えば,テスト用サーバー(dev_appserver.py)で動かすなら,Webブラウザから「http://localhost:8080/?first=1&second=5」というURLを指定してアクセスしてください。

 URLの中の「first」は計算に使う一つ目の値,「second」は二つ目の値を示します。つまり,上記のURLは1と5を足し算させるためのURLとなります。実行すると,図1のように,数式と計算結果を表示します。

図1●リスト1のプログラムを実行し,Webブラウザでアクセスしたところ。足し算の式と結果が見える
図1●リスト1のプログラムを実行し,Webブラウザでアクセスしたところ。足し算の式と結果が見える

 webapp Frameworkを使ったアプリケーションは三つの要素から成り立っています。一つ目は,「RequestHandler」というクラスを継承したクラス(一つ以上)です。RequestHandlerとは,Googleが提供するクラスで,GET,POST,HEADなどのHTTPのメソッド呼び出しに対応するメソッドを提供します。

 RequestHandlerを継承したクラスには,ユーザーがURLを指定してアクセスしてきたときの処理を記述します。ユーザーのリクエストを扱う(Handle)ことから,リクエスト・ハンドラとも呼びます。

 RequestHandlerクラスは「google.appengine.ext.webapp」というモジュール(Javaでのパッケージ,.NET Frameworkでの名前空間)に存在します。利用するときは,プログラムの冒頭でimport文を書いて,このモジュールの使用を宣言する必要があります。

 アプリケーションを構成する二つ目の要素は,「WSGIApplication」というクラスのオブジェクトです。このクラスをオブジェクト化するときは,引数としてURLとリクエスト・ハンドラのペア(タプル)をリストの形式で列挙します。リスト1ではタプルは一つしかありませんが,複数のタプルを並べることも可能です。

 リクエスト・ハンドラに引数を取らせて,その値次第で異なるURLにユーザーを誘導することもできます。この場合,WSGIApplicationをオブジェクト化するときに正規表現が使えます。

 アプリケーションを構成する最後の要素がmain関数です。main関数では,WSGIApplicationのオブジェクトを引数に取って,「run_wsgi_app」という関数を実行しています。これで,プログラムは動き出し,HTTPリクエストに応じて適切なリクエスト・ハンドラが動作するようになります。この関数は「google.appengine.ext.webapp.util」というモジュールに存在します。使用前にimport文で宣言しておきましょう。