爬虫類嫌いのPython日記

爬虫類が大の苦手の筆者が、Pythonに挑戦。他にも、RubyやObjective-C、Google Appengine、Herokuなど色々とチャレンジしています。

GoogleAppEngineでHelloWorld

今回は、Google App Engineの使い方の練習もかねて、ちゃんと「Hello World」をやります。
PythonでHelloWorldを表示の時のように、半分ネタでやる訳ではありません。

GAEプロジェクトの作成

GAEプロジェクトとは、プログラムに必要とされる各種のファイルなどをひとまとめにしたものです。GAEサイトに登録したアプリケーションは、このプロジェクト単位で作成されます。


GAEがインストールされているフォルダ(デフォルトは\C:Program Files\Google\google_appengine)を開くと、以下のファイルが用意されています。

  • demos……デモプログラム
  • google……Googleから提供されているプログラム類
  • lib……ライブラリファイル類
  • new_project_template……新規プロジェクトのテンプレート
  • templates……Webアプリケーション用のテンプレート
  • tools……ツールプログラム類


新規にプロジェクトを作成する場合、「new_project_template」をコピーして使います。フォルダ名は、プロジェクトが区別できるように別名をつけてください。
コピーして作成したプロジェクトファイルを開くと、3つのファイルがあるはずです。

  • index.yaml……プロジェクトをWebサーバーで起動するスクリプトによって自動更新されるファイル
  • app.yaml……アプリケーションの設定ファイル
  • main.py……アプリケーションのメインファイル

app.yamlの修正

app.yaml

application: new-project-template
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
  script: main.py

application:アプリケーション名
version:バージョン
runtime:ランタイム名(Pythonの場合はPython
api_version:アプリケーションのバージョン番号。
handlers:リクエストされたURLと実行するプログラムをハンドリングするハンドラ。「-url:」として追記していく。
script:そのURLにアクセスされた時に実行するスクリプト。


ここでは、まず「application:」に自分のアプリケーション名を設定します。

main.pyについて

main.py(コメント分は省略)

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


class MainHandler(webapp.RequestHandler):

  def get(self):
    self.response.out.write('Hello world!')


def main():
  application = webapp.WSGIApplication([('/', MainHandler)],
                                       debug=True)
  util.run_wsgi_app(application)


if __name__ == '__main__':
  main()

main.pyについては、少し説明しておきます。

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

最初の2行「from 〜 import 〜」で、指定したモジュールをインポートしています。
インポートしているモジュールの内容については、ここでの説明は割愛します。

class MainHandler(webapp.RequestHandler):

  def get(self):
    self.response.out.write('Hello world!')

MainHandlerクラスの定義です。このクラスは、RequestHandlerクラスを継承して作られています。
「get」メソッドが定義されていますが、HTTPのGETメソッドで呼び出された時の処理を記述します。

def main():
  application = webapp.WSGIApplication([('/', MainHandler)],
                                       debug=True)
  util.run_wsgi_app(application)

Pythonから直接実行された場合のmain関数を定義しています。
webappフレームワークを使って、MainHandlerクラスの内容を実行しています。

if __name__ == '__main__':
  main()

これは、実行しているモジュールが'__main__'だった場合にmain関数を実行すると言う構文です。

プロジェクトの実行

GAEには簡易サーバー機能が用意されています。
コマンドプロンプトを起動し、プロジェクトフォルダがある場所へ移動します。
そこで、以下のコマンドを実行します。

dev_appserver.py プロジェクトフォルダ名

これで、簡易サーバーが起動します。
ブラウザから、「http://localhost:8080」と言うアドレスにアクセスしてください。

Googleサイトへのデプロイ

作成したプロジェクトを、Googleサイトへデプロイし、公開します。
コマンドプロンプトから、以下のコマンドを実行します。

appcfg.py update プロジェクトフォルダ名

コマンドを実行すると、登録してあるGmailアドレスのパスワードを聞いてくるので、入力してください。
GAEのサイトにデプロイしたアプリケーションは、以下のようなアドレスで公開されます。
 http://アプリケーション名.appspot.com/