Google App EngineをDeployしてみる

Google App EngineにApplicationを作る
最初にGoogle App EngineにApplicationを作成します。Google App Engine LauncherのDashbordボタンをクリックしてGoogle App EngineのWEBサイトを開きます。
AppEngine1
Preiewの画面からCreate An Applicationをクリックして新規にアプリケーションを作成します。この時に指定するApplication Identifierは、ApplicationのNameと一致している必要があります。このアプリケーションの例ではmikahosi-1となります。Application Titleも必ず入力しなくてはなりませんが、こちらは任意の文字列で構いません。
Google App EngineにDeployする
Google AccountからApplicationを作成したら、Google App Engine LauncherのDeployボタンをクリックします。下図のログオン画面が表示されますので、ログオンアカウントパスワードを入力してログインします。ここで項目名がmailとなっていますが、指定するのはメールアドレスではありません。Googleのアカウント名(Google Mailと@より前の部分)を入力します。メールアドレスを指定するとログインできません。
AppEngine2
初めて使用する場合には、CAPTCHA認証を要求される場合があります。その場合にはDeployment To Googleのコンソール表示にURLを表示します。ブラウザで指定されたURLに接続して、CAPTCHA認証を行ってください。
AppEngine3
以上で無事にGoogle App Engineに作成したアプリケーションをアップロードできたはずです。Google App EngineのWEBサイトにて割り当てられたURLに接続してみてください。
ちなみに作成した掲示板サンプルは下記のURLにアップロードしてあります。
http://mikahosi-1.appspot.com/

DataStoreを使ってみる

オブジェクト指向データベース(ODBMS)
クラウド独特のデータストアを使う前に、オブジェクト指向データベース(ODBMS)について知っていると入りやすい。
ODBMSは1980年代後半から、1990年代前半にかけて、様々なオブジェクト指向開発の試行錯誤と研究の中で生まれ、そして殆ど実用される事無く消えつつあった技術です。要は「オブジェクト指向分析の中で表現したデータクラスを、データクラスのままストレージに格納して扱えば、オブジェクトをそのまま表現できて扱いやすいんじゃね?」という発想でした。それまでのストレージはRDBMSに代表される表形式の物で、そこにデータクラスを格納するには非効率な変換処理(ORマッピング)が必要だったのです。
でもODBMSという試みはあまり上手くいきませんでした。ODBMSはリソースを大量に消費するとか、検索が遅いと言った、実装上の問題を抱えている事が多かったのです。その試みはORDBMSやORマッピングやLINQなどとして現在も続いています。そしてクラウドもODBMSを実現するための一つの答えになるものと私は思っています。
初期のODBMSで問題となっていたリソースの消費は、クラウドが安価なリソースを提供することで解決されました。RDBMSとは全く異なるパラダイムの上に成り立っているので、当初は混乱するかもしれません。ですがODBMSはオブジェクト指向開発の効率を大きく高め得るものです。積極的に取り組んでいく価値は高いと思っています。
DataStoreの定義
データの定義は簡単です。以下のようなクラスを定義するだけです。”text”、”date”がメンバ変数です。この二つの値がDataStoreに保存されます。

class GuestComment(db.Model):
text = db.StringProperty(required=True)
date = db.DateTimeProperty(required=True)

データを保存したいときには、クラスメンバのput()を呼び出します。データを読み出す場合はall()で全データを読み出せます。

class MainPage(webapp.RequestHandler):
def post(self):
text = cgi.escape(self.request.get("content"))
text = text.replace("rn", "<br>")
text = text.replace("r", "<br>")
text = text.replace("n", "<br>")
if len(text) > 0:
com = GuestComment(text=text,date = datetime.datetime.now())
com.put()
self.makeHtml()
def get(self):
self.makeHtml()
def makeHtml(self):
self.response.out.write("""
<html>
<body>
<form action="/" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>""")
comList = GuestComment.all()
for com in comList:
self.response.out.write('Wrote Date : ')
self.response.out.write(com.date)
self.response.out.write("<br>")
self.response.out.write(com.text)
self.response.out.write("<br>")
self.response.out.write('<hr>')
self.response.out.write('</body></html>')

一部のデータだけを読み出したい場合や、並び順を入れ替えて読み出したい場合にはGQLで指定します。RDBMSで使用するSELECT文とほぼ同様の物なので、すぐに理解できると思います。

comList = GuestComment.gql(“ORDER BY date DESC”)

RDBMSのようにリンクを指定するにはどうするのかって?そこがODBMS独特の部分です。例えばユーザーに関するデータを掲示板への書き込みと同時に保存したい場合、そこにはユーザーを表すクラスへの参照を保存する事になります。ReferencePropertyメンバを使って以下のように記述します。

class UserData(db.Model):
name = db.StringProperty()
age  = db.IntegerProperty()
class GuestComment(db.Model):
text = db.StringProperty(required=True)
date = db.DateTimeProperty(required=True)
user = db.ReferenceProperty(UserData)

Google App Engineを始めてみる

取り急ぎ環境を作るよ
PyThonのインストール
Python Japan Users GroupのホームページからWindows用のインストールパッケージをダウンロードしてこよう。とくに何も注意する事はない。インストーラ付きのものをダウンロードして、何も考えずに実行するだけでおkです。
Eclipseのインストール
EclipsePyDevを用意します。Eclipseは言わずと知れた汎用統合開発環境です。Java用、C++用などから適当なパッケージをダウンロードして来てください。私はJavaも使うかもしれないので、Eclipse IDE for Java Developersを選択しました。インストーラなどは付属していません。ダウンロードしたZipファイルを適当なフォルダに回答したら、Eclipse.exeを起動します。
PyDevのインストールは少々独特です。EclipseのメニューからHelp→Install New Softwareを選択します。
appenginesetup1
上図が表示されたら”Add…”を選択して、NameにPyDev、Locationにhttp://pydev.org/updatesと入力してOKしてください。下図のように表示されるので、導入するPluginを選択したら、Nextで先に進んでインストールしてください。
appenginesetup2
AppAngineのインストール
Google App EngineからApp Engineをダウンロードしてきます。インストーラが付属しているので、何も考えずに導入してください。
Hello Worldを作るよ
新規プロジェクトの作成
EclipseのメニューからFile→New→Projectを選択すると、WizardにPyDev Google App Engineが追加されている。それを選択してプロジェクトを新規に作成しよう。
appenginesetup3
Project NameはHelloGoogleとしてみる。
appenginesetup4
Google App Engineのインストール先を入力する必要があるので、入力してあげる。
appenginesetup5
最後にテンプレートを選択しよう。
appenginesetup6
とりあえず動かしてみるよ
index.yamlと言うファイルが必要ですが、何故か自動では作られませんでした。自分で作成しましょう。中身はこれだけです。

indexes:
# AUTOGENERATED

スタートメニューに登録されている”Google App Engine Launcher”を起動しましょう。
最初の一回目は環境設定が必要です。メニューからEdit→Prefrencesを選択してください。下図のようにPythonのインタプリタのパスと、Google App Engine SDKのインストール先パスを指定してください。
appenginesetup7
次にメニューからFile→Add Existing Applicationを選びます。Application Pathに先ほど新規に作成したProjectのパスを指定してOKボタンをクリックします。これでプロジェクトが追加されます。追加したプロジェクトを選択して”Run”ボタンをクリックした後、”Browse”ボタンをクリックしてみましょう。
うん動いたっぽい。
何もしてないから当然だよね。次はデータストアにでもアクセスしてみるよ。