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件)
- 昨日のトップ記事
- 2日前
- 3日前
- 4日前
- 5日前
- ホワイトペーパー
- 話題のタグ
より多くのコスト削減に向けて、BEAの効果的なアプローチをご紹介いたします。詳しくはホワイトペーパーをご覧ください。
動画再生耐久レース―フル充電からどれだけ耐えた?
心当たりありませんか--あなたの上司がイヤがる5つの話し方
フォームデザイン虎の巻:複数の選択肢を提供する
フォトレポート:技術サポートの悪夢
無料の「Oracle Database XE」で高速バッチ処理:実装のポイント
Firefoxで情報をカンタン・ベンリに整理する
iPhone Safari、Acidテストでは高得点でも…… Firefoxは載らないの?:WebサイトのiPhone 3G対応問題を考える(ソフト編)
WebサイトのiPhone 3G対応問題を考える(ハード編)
フォトレポート:時代を振り返る--「MS-DOS 4」のインストール
SOAと仮想化の関係は?--常に進化を続けるBEAのミドルウェア戦略
ウェブ開発の生産性はどうしたら上がる?--MODIPHI Appsで半日で作るマッシュアップサイト(1)
JailBreakついに:PwnageTool公開
プロジェクトの進行でよくある4つのトラブル
ZDNet Japan Green IT
DELLが掲げる「新・仮想化アセスメントサービス」
Techno Exchange
ZDNet Japan ホスティング特集