Twitterもどきを作りながらGoogle App Engineの肝データストアを理解する
今回はTwitter(もどき)を作りながらGoogle App Engineを利用する最大の目的ともいえる「データストア」について説明しよう。
モデルオブジェクト
今回の説明のために用意したサンプルは、複数人でメッセージをポストし、共有できるだけのアプリだ。まあ「Twitterもどき」といえなくもない(Twitterに失礼だが)。
メッセージが一覧表示されている部分を見ると、このアプリが保存する必要のあるデータは「投稿した人」「メッセージ本文」「投稿日時」の3つだとわかる。
RDBであれば、これらのデータを格納するためのテーブルを作成するところだ。App Engineのデータストアでは、どのようにしてデータのスキーマを表現するのか?
App Engineのデータストアでは、「モデルオブジェクト」もしくは「エンティティ」と呼ばれるPythonクラスによってスキーマが表される。エンティティは、単にdb.Modelクラスを継承し、プロパティ(リレーショナルモデルでいうところの「カラム」)を定義しただけのクラスだ。上のデータを格納するためのエンティティ「Message」の定義を以下に示す。
class Message(db.Model):
author = db.UserProperty()
content = db.StringProperty()
date = db.DateTimeProperty(auto_now_add=True)
author、content、dateと言ったプロパティが定義されていることに注目。その値は「db.XXXProperty」となっている。これらが、エンティティで保持されるデータの実体となる。
「db.XXXProperty」は、プロパティのデータ型を表すものだ。UserPropertyは「google.appengine.api.User」クラスのインスタンスを格納するための型、StringPropertyは文字列、DateTimePropertyはdatetime.datetime型にそれぞれ対応している。
プロパティの型には他にも、BooleanやIntegerなどの基本型、複数データを格納できるListProperty、他のエンティティを格納するためのReferencePropertyなど、様々なものを利用できる。完全なリファレンスはこちらを参照していただきたい。
エンティティのput()メソッドを呼び出せば、エンティティをデータストアに保存することができる。メッセージの保存を行っているコードを見てみよう。
# リクエストからメッセージ本文を取得
content = self.request.get("content")
# エンティティのインスタンスを作成
message = Message(author=user, content=content)
# データストアに保存
message.put()
あっけないほど簡単に、データストアに対してデータの保存を行えてしまった。すばらしい開発効率だ。
エンティティには、他にも様々なメソッドが定義されている。以下に挙げるのはその一部だ。完全なリストはリファレンスを参照していただきたい。
- put()・・・モデルの保存
- delete()・・・モデルの削除
- to_xml()・・・XML形式(Atom/GDataに準拠)の文字列を返す。
開発用コンソールを用いたデータの確認
データストアに保存されたデータは、開発用コンソールから確認することができる。開発用コンソールのURLは「http://localhost:8080/_ah/admin/」(ポート番号はデフォルト)だ。アクセスすると、「Datastore Viewer」と言うメニューがあるので、エンティティの種別(クラス名)を入力すればデータの一覧を取得できる。
- 特集: Google App Engine詳解 (3件)
- ホワイトペーパー
- 話題のタグ
グーグル、JavaScriptプログラミングツールをリリース
Windowsの歴史 Windows Server 2008編:同じカーネルを持つ「Vista」とは対照的に早くから支持を得たサーバOS
Windowsの歴史 Windows Server 2003 R2編:安定性と先進性の両立目指す「R2」の先駆けとなったOS
モジラ、「Firefox 3.6」の第1ベータ版をリリース
―エン・ジャパン厳選求人☆毎週更新―
【最終警告】パンデミック対策特集
100万円で実現!中小企業の情報漏えい対策
企業ITシステムの企画、構築、運用のイロハ
進むストレージ環境の見直し
最大32個のセンサーが電力を徹底管理!
大丈夫?あなたの会社のセキュリティ対策