Twitterもどきを作りながらGoogle App Engineの肝データストアを理解する

白石俊平
2008/04/14 17:00

今回はTwitter(もどき)を作りながらGoogle App Engineを利用する最大の目的ともいえる「データストア」について説明しよう。

Queryクラスを使用した問い合わせ

 文字列としてGQLを組み立てる以外にも、google.appengine.ext.db.Queryを用いた問い合わせを行うこともできる。Queryのインスタンスを得るには、エンティティが持つall()メソッドを使用するのが簡単だ。

q = Message.all()

 このクエリをこのまま使用すると、すべてのエンティティを取得することになる。フィルタを用いた絞り込みや、プロパティを指定して並べ替えを行うこともできる。

q.filter("author=", user)
q.order("-date") # マイナスをつけると降順に

 また、filter()やorder()の戻り値はQueryオブジェクト自身(self)となっているので、次のようにコードを書くこともできる。

q = Message.all().filter("author=",user).order("-date")

問い合わせ結果の利用

 さて、クエリの組み立て方としてGqlQueryかQueryを使用するという方法を学んだわけであるが、問い合わせを行った結果を利用するにはどうしたら良いのだろうか。

方法は以下の二通りだ。

  1. for文などでイテレートする
  2. fetch()メソッドを使用する

1の方法を用いると、「結果をフェッチする」という処理を書くことなく、いきなり繰り返し処理を行える。以下のコードを見てほしい。

# 全メッセージをループ処理
for message in GqlQuery("SELECT * FROM Message"):
    ...(略)...

2の方法では、fetch()した結果をエンティティのリストとして扱うことができる。

# fetch()の引数は、取得件数のリミット
messages = Message.all().fetch(20)
for message in messages:
    ...(略)...

どちらの方法を利用するかは、完全にお好み次第だ。

まとめ

 以上、データストアに関する基本的なプログラミングに関して、駆け足でお伝えしてきたが、いかがだっただろうか。O/Rマッピング技術などに精通した技術者であれば、何の苦もなく操ることができ、非常に開発効率も良い。たったこれだけの開発工数で、Googleのスケーラビリティを享受できると言うのは驚愕に値する、と言えるだろう。

 では、次ページに今回使用したサンプルコードを全文掲載する。興味のある方は、これらのコードを「builder-example3」というディレクトリにコピペして保存し、「dev_appserver.py builder-example3/」というコマンドで実行してみていただきたい。

記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 新着記事
  • 人気記事
  • 特集
  • ブログ
  • 読者投票
    いよいよ7月11日に売り出される「iPhone 3G」。今のところの購入予定は?

    投票受付期間:2008年7月7日 〜 2008年7月11日
  • » 投票しないで結果だけ見る