|
米Googleは2008年5月,Google App Engineというサービスを一般公開しました。このサービスを利用すると,PythonによるWebアプリケーションを手軽に公開して運用することができます。今回は,このGoogle App Engineでのアプリケーション作成にチャレンジしてみましょう。
本記事は,執筆時に公開されていたGoogle App Engineプレビュー版に基づいて記述しています。正式版とは異なる可能性があります。 |
Google App Engineとは
Google App Engineは,2008年4月7日に米国で開催されたCampfire Oneというイベントで発表されたWebアプリケーション開発環境です。
(編集注:この時点で発表されたプレビュー版は,限られた数の開発者に対して無料でサービスを提供していました。そして5月28日から本格的にサービスを開始し,料金体系を発表しました。基本的に従量課金制ですが,500Mバイトまでのストレージ利用または月間500万ページ・ビューまでのWebアプリケーションの利用に関しては,無料でサービスを提供するようです) |
同種のサービスに,Amazon EC2があります。大きな違いとして,Amazonの場合は,あくまでLinuxサーバー・インフラの仮想環境を提供するものであり,開発者がアプリケーションの実行環境を用意しなければなりません。
これに対して,Google App Engineは,PythonのランタイムやGoogleのAPIが用意されているため,開発者はプログラミングに専念できる環境になっています。利用者はアプリケーションを開発するだけで,あとはそれをアップロードすれば,Googleのインフラで自動的にスケーリングまで面倒を見てくれるというのが強みです。
Google App Engineの特徴
Googleで,Pythonが広く使われていることはよく知られていますが,このGoogle App EngineでもPythonを利用できます。将来的には,他の言語をサポートすることも計画されています。
さてGoogle App Engineのプレビュー版では,開発者は三つまでアプリケーションを作成することができ,一つのアプリケーションに割り当てられるリソースは最大で以下のようになっていました。一般的なアプリケーションを作成して試すには,十分なリソースと言えるでしょう。
- 500MBのストレージ
- 10GBの上/下帯域
- 200万MHzのCPU
- 65万回のHTTPリクエスト
- 16万回のURLフェッチAPI呼び出し
Google App Engineでは,アプリケーションはサンドボックスと呼ばれる実行環境で動きます。この環境では,標準ライブラリを含み最初からPythonを実行できます。また,Googleユーザーアカウント,データストア(Datastore)アクセス,URLフェッチ,Emailサービスに関するAPIが提供されています。逆に,これ以外の方法を使用した外部アクセスはできません。
アプリケーションへのアクセスも,標準ポートで待ち受けるHTTP/HTTPSしか使用できません。使用できるPythonのバージョンは2.5.2のみで,C言語での拡張などはサポートされず,利用できる標準ライブラリにも一部制限があります。サンドボックスでは,Python標準ライブラリやとGoogleのライブラリ,そしてアプリケーション・ディレクトリからPythonモジュールをインポートできます。
APIの利用方法
Google App Engineで利用できる代表的なAPIに関して,簡単なサンプルを使って説明しましょう。
◆ユーザーAPI
ユーザーAPIを利用すれば,Googleアカウントでユーザーを認証できます。ユーザーのニックネーム,Emailアドレスを取得することも可能です。サインインしているユーザー名を取得する,単純なサンプル・コードを以下に記述します。
from google.appengine.api import users
user = users.get_current_user()
if user:
print "Hello, %s!" % user.nickname()
ユーザーAPIの詳細は,Google App Engineのページ「The Users API」に記述されています。
◆データストア
Google App Engineでは,Python向けのデータストアAPIが提供されています。バックエンドには,MySQLやPostgreSQLに代表されるようなRDBMSではなく,GoogleのBigTableが採用されています。このデータストアAPIにより,SQLライクな問い合わせ言語「GQL」でデータの永続化を行うことができます。モデルを定義するには,以下のようにします。
from google.appengine.ext import db
class Diary(db.model):
title = db.StringProperty()
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)
作成したこのモデルに対して,GQLでCRUD(Create,Read,Update,Delete)操作ができます。
diary_today = db.GqlQuery("SELECT * FROM Diary where diary.author = :1",
users.get_current_user())
データストアAPIの詳細に関しては,「The Datastore API」にあります。
◆URLフェッチ
URLフェッチAPIを利用して,外部のURLにアクセスし,その情報を取得したり,情報を送信したりできます。前回紹介したスクレイピングのようなこともできます。大ざっぱなコードは以下の通りです。
from google.appengine.api import urlfetch
result = urlfetch.fetch(url)
if result.status_code == 200:
doSomething(result.content)
HTTPおよびHTTPS経由で外部から情報を取得します。五つのHTTPメソッド(GET/POST/HEAD/PUT/DELETE)をサポートしています。レスポンスとして返ってきた情報の処理,例外の捕捉も可能です。
このようにGoogle App Engineでの開発は,Google環境に特化した開発手法を用いる必要があります。その見返りとして,アプリケーションのスケーラビリティやインフラ・アーキテクチャの設計など,運用に関することをGoogleに任せるわけです。