お気に入り | 日本語 | ログイン

webapp フレームワークの使用

CGI 標準はシンプルですが、コードをすべて手で記述するのは面倒です。Web アプリケーション フレームワークは瑣末な作業を処理してくれるため、ユーザーはアプリケーション機能の開発に集中することができます。Google App Engine では、Python のみで書かれ、かつ CGI を使用するフレームワーク(または CGI アダプタを使用した WSGI 準拠のフレームワーク)であれば、どのフレームワークでも使用できます。たとえば、DjangoCherryPyPylonsweb.py などをサポートしています。任意のフレームワークをアプリケーション コードとバンドルするには、フレームワークのコードをアプリケーションのディレクトリにコピーします。

App Engine には、シンプルな独自の Web アプリケーション フレームワークが用意されています。これが webapp です。webapp フレームワークは App Engine 環境と SDK にインストール済みであるため、アプリケーション コードとバンドルしなくても使用できます。このチュートリアルでは以降、webapp を使用します。

Hello, webapp!

webapp には、次の 3 つのパーツがあります。

  • 1 つまたは複数の RequestHandler クラス。リクエストを処理し、レスポンスを作成します。
  • WSGIApplication インスタンス。着信したリクエストを、URL と関連付けられたハンドラへルーティングします。
  • メイン ルーチン。CGI アダプタを使用して WSGIApplication を実行します。

グリーティング メッセージを webapp アプリケーションに書き換えてみましょう。helloworld/helloworld.py を編集し、コンテンツを次のように置き換えます。

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, webapp World!')

application = webapp.WSGIApplication(
                                     [('/', MainPage)],
                                     debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

ブラウザで http://localhost:8080/ をリロードし、新しいアクションになっているのを確認します(Web サーバーを停止している場合、Hello, World! で説明したコマンドを実行して再起動します)。

webapp の機能

webapp モジュールは google.appengine.ext パッケージに含まれています。このモジュールは、プロダクション ランタイム環境だけでなく、SDK でも提供されています。

このコードは、ルート URL(/)に対する 1 つのリクエスト ハンドラ MainPage のマッピングを定義しています。webapp はこの URL / への HTTP GET リクエストを受信すると、MainPage クラスをインスタンス化し、インスタンスの get メソッドを呼び出します。メソッド内では、self.request を使用して、リクエストに関する情報を利用できます。一般にメソッドは、self.response でプロパティを設定し、レスポンスの準備をしてから終了します。webapp は、MainPage インスタンスの最終状態に基づいてレスポンスを送信します。

アプリケーション自体は、webapp.WSGIApplication インタンスで表現されます。コンストラクタに渡されるパラメータ debug=true は、ハンドラにエラーが発生したり、捕捉されなかった例外が返された場合に、スタック トレースをブラウザに出力するよう webapp に指示するものです。このオプションは、アプリケーションの最終バージョンから削除しても構いません。

関数 run_wsgi_app() は WSGIApplication インスタンス(または他の WSGI に準拠したアプリケーション オブジェクト)を使用し、それを App Engine の CGI 環境で実行します。run_wsgi_app() は、Python 標準ライブラリの wsgiref モジュールで提供される WSGI-CGI アダプタとほぼ同じですが、いくつかの機能が追加されています。たとえば、アプリケーションが開発用サーバーと App Engine のどちらで実行されているかを自動的に検出し、開発用サーバーで実行されているときは、ブラウザにエラーを表示する機能があります。

このチュートリアルの残りの部分では、さらにいくつかの webapp 機能を使用します。webapp に関する詳しい情報は、webapp リファレンスをご覧ください。

次のステップ

フレームワークを使うと、Web アプリケーションの開発が容易で迅速になるだけでなく、エラーを防ぐ効果もあります。webapp は、Python で利用できるさまざまなフレームワークの 1 つにすぎません。フレームワークを使うからには、もう少し機能を追加してみましょう。

ユーザー サービスの使用に進みます。