www.masahiko.info
IT+
www.masahiko.info
デベロッパー、ITプロ向けの技術情報Webマガジン。アイティプラス(IT Plus)。
IT+
▼個別記事ページ

2008/05/07 03:01 【カテゴリ:Google App Engine入門】 (更新:2008/05/07 04:35)

Google App Engine の webapp Frameworkの利用 このエントリーを含むはてなブックマーク

先ほど紹介した「Hello World!」アプリケーションは最も単純なもので、Python言語の基本機能のみを使って作成しました。しかし、Google App Engine には効率的にWebアプリケーションを作成するための「webapp Framework」があらかじめ搭載されています。この入門編の最後では、このwebapp Frameworkを使った基本的な開発方法を紹介しましょう。

ここでは、「初めてのGoogle App Engineアプリケーション『Hello World!』の開発」で示したアプリケーションをwebapp Frameworkを使って作ります。

まずアプリケーションの起動を担うmain関数を作成、実行します。main関数の実行は次のように記述します。

if __name__ == "__main__":
  main()

肝心のmain関数(function)の定義は次のように記述します。
def main():
  application = webapp.WSGIApplication(
                                       [('/', MainPage)],
                                       debug=True)
  wsgiref.handlers.CGIHandler().run(application)

「def main():」はmain関数を定義することを示しています。webappオブジェクトは、具体的には、次のような記述で(webapp Frameworkの)google.appengine.extパッケージのwebappモジュールを事前にインポートしたものです。
from google.appengine.ext import webapp

webappオブジェクトのWSGIApplicationメソッド(method)を呼び出してapplicationオブジェクトを取得します(WSGIApplicationメソッドについては後述)。そして、そのapplicationオブジェクトを引数に渡してwsgiref.handlers.CGIHandler().runメソッドを呼び出します(=wsgiref.handlersモジュールのCGIHandlerクラスをインスタンス化してそのrunメソッドを呼び出します)。これにより、プログラムが実行されます。(Python標準ライブラリのWSGI:Web Server Gateway Interfaceの)wsgiref.handlersモジュールは、次のような記述で、事前にインポートしたものです。
import wsgiref.handlers

WSGIApplicationメソッドの説明に戻りましょう。その第1引数は、あるURLがリクエストされたときにどのハンドラ クラス(詳細後述)を実行するかを指定するもので、第2引数は「debug=<FalseもしくはTrue>」という形式でデバッグしないかするかを指定します。第1引数についてもう少し詳しく説明すると、次のような形式で指定します。
[
  (<リクエストされたURL>, <ハンドラ クラス>)
]

つまりURLとハンドラ クラスのマッピングを行います。もちろん複数のマッピングも可能で、例えば「/」というURLのときはMainPageハンドラ クラスにマッピング、「/sign」というURLのときにはGuestbookハンドラ クラスにマッピングしたいなら、次のように記述します。
[
  ('/', MainPage),
  ('/sign', Guestbook)
]

先ほど説明を保留したハンドラ クラスを説明しましょう。ハンドラ クラスとは、google.appengine.ext.webappモジュールで提供されているRequestHandlerクラスの派生クラスとして作成されたクラスで、あるURLへのリクエストを処理(=ハンドル)するためのものです。ハンドラ クラスには、いくつかのメソッドや属性(attribute)が定義されています(詳しくはコードの説明の中で紹介していきます)。

ここでは、先ほどのWSGIApplicationメソッドに指定したMainPageハンドラ クラスを作成して、基底クラスからgetメソッドをオーバーライドします。具体的には次のようなコードになります。

class MainPage(webapp.RequestHandler):
  def get(self):
    <処理を記述>

そしてgetメソッドの<処理内容を記述>していきます。「初めてのGoogle App Engineアプリケーション『Hello World!』の開発」で示したアプリケーションでは、HTTPリクエストへの応答として、標準出力ストリームに「Content-Type」などのHTTPヘッダ情報とコンテンツを書き込む処理を実装しましたが、ここでもこれと同じ処理になるようにしましょう。getメソッドの引数として渡されたself変数は、MainPageオブジェクト自身です。そのself変数のresponse属性から得られるResponseオブジェクトで応答を設定できます。Responseオブジェクトは次の2つのプロパティを持っていますので、これらを使います。
headersプロパティ(HTTPヘッダ情報を設定します)
outプロパティ(標準出力ストリーム。outプロパティのwriteメソッドでコンテンツを書き込めます)

具体的なコードは次のとおりです。
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, Google App Engine アプリケーション World!')

ちなみにself変数のrequest属性から得られるRequestオブジェクトからリクエスト データを取得できます。Requestオブジェクトには次のようなプロパティがあります。
uriプロパティ(ユーザーから要求された完全なURI)
schemeプロパティ('http' もしくは 'https')
hostプロパティ(ポート番号を含むホスト名)
pathプロパティ(URLで ';' もしくは '?' までのパス)
parametersプロパティ(URLの ';' と '?' の間にある複数の部分文字列。ある場合)
queryプロパティ(URLで '?' 以降の部分)

以上のすべてのコードをまとめると次のようになります。

import wsgiref.handlers

from google.appengine.ext import webapp

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, Google App Engine アプリケーション World!')

def main():
  application = webapp.WSGIApplication(
                                       [('/', MainPage)],
                                       debug=True)
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
  main()


これを実行すると、「初めてのGoogle App Engineアプリケーション『Hello World!』の開発」と同じ内容が実行されます。

googleappengine03.gif

実はここで作成したプログラムは、Google App Engine SDKをインストールしたフォルダ(筆者の場合は「C:\Program Files\Google\google_appengine\」)内の「new_project_template」の内容と同じです。従って、今後、webapp Frameworkを利用したアプリケーションを作成したい場合は、ここからアプリケーションのひな形としてフォルダ全体を任意の場所にコピーして、その内容を編集、拡張していけばよいでしょう。

【目次】「Google App Engineアプリケーション開発入門」―――
Google App Engine環境の準備
Google App Engine SDKの内容
初めてのGoogle App Engine アプリケーションの実行
Google App Engine アプリケーションの実行の仕組み
初めてのGoogle App Engineアプリケーション「Hello World!」の開発
Google App Engine アプリケーションのデバッグ
■Google App Engine の webapp Frameworkの利用

| 個別記事ページ表示中 | コメント書込↓ | トラックバック作成↓ |
コメント[0 items] & トラックバック[0 items]
コメントを書き込む














トラックバックを作成する
以下のURLにトラックバックpingを送信してください。
トラックバックURL:
http://www.masahiko.info/blog/mt-tb.cgi/854

|| Top | Profile | Works | Diary || IT+ | #BLOG | MyView ||
【リンクについて】→詳細を見る
リンク・フリーです。事前、事後のご連絡は必要ありません。
【著作権について】→詳細を見る
Copyright © 2003-2008 Masahiko Isshiki. All rights reserved.
(引用と私的使用以外の記事・画像及び情報の無断転載を禁じます)