Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

Google App Engineで開発するスケールするアプリケーション(後編)

Google App EngineとTwitterの連携アプリケーション構築

  • LINEで送る
  • このエントリーをはてなブックマークに追加

 本稿の前編では、Google App Engineの特徴、スケールアウトの基本的な考え方、Google App Engineのインフラ・サーバ構成などについて説明しました。そして中編では、ミニブログサービスのTwitterとGoogle App Engineを連携させたアプリケーションの仕様概要と、設計について説明しました。後編となる本稿では、中編で説明したアプリケーションを実際にプログラミングしていきます。

目次

はじめに

 Google App Engineは、開発したアプリケーションをGoogleのスケーラブルなインフラ環境上で公開できるサービスです。本稿の前編では、Google App Engineの特徴、スケールアウトの基本的な考え方、Google App Engineのインフラ・サーバ構成などについて説明しました。そして中編では、ミニブログサービスのTwitterとGoogle App Engineを連携させたアプリケーションの仕様概要と、設計について説明しました。後編となる本稿では、中編で説明したアプリケーションを実際にプログラミングしていきます。

対象読者

  • Google App Engineに興味がある方
  • Webアプリケーション構築の経験がある方
  • Googleに興味がある方

必要な環境

 本稿のアプリケーションは以下の環境で検証しています(Google App Engineが2010年2月13日現在、サポートしているPythonのバージョンは2.5です)。

  • Windows XP
  • Google App Engine SDK 1.3.1以降
  • Python 2.5

開発言語とWebアプリケーションフレームワーク

 Google App Engineでは開発言語としてPythonとJavaがサポートされていますが、本稿ではPythonを用いて開発します。Webアプリケーションフレームワークは、Google App Engine for Pythonに標準で搭載されているwebappというフレームワークを使用します。

アプリケーション全体の概要

 本稿で紹介するアプリケーションは、Twitterでフォローするユーザを紹介するGoogle App Engine上で動作するレコメンドアプリケーションです。中編の図1「Twitterレコメンドアプリケーションの概要」に示したように本稿のアプリケーションは、大きく「ユーザデータ取得処理」と「オススメユーザ表示処理」の大きく2つの処理から構成されます。

サンプルアプリケーションのディレクトリ・ファイル構成

 まずは、以下の表に本稿で使用するファイルを一覧にまとめました。

表1 サンプルアプリケーションのディレクトリ・ファイル構成
ファイル名 概要
app.yaml アプリケーション全体の定義ファイル
cron.yaml Cron定義ファイル
index.yaml インデックス定義ファイル
main.py リクエストハンドラを記述するPythonファイル
models.py モデル定義を記述するPythonファイル
twitterutil.py TwitterにアクセスするためのUtility処理をまとめたPythonファイル
index.html リクエスト受付用HTMLファイル
recommend_list.html レコメンドユーザ表示用HTML

エンティティ

 本稿のアプリケーションでは、Twitter APIでユーザの情報を取得してDatastoreに保存します。ユーザ情報を格納するクラス(Kind)をmodels.pyファイルに記述します。

TwitterUserクラス

 TwitteUser クラスは、中編の表2「アプリケーションで使用するTwitterユーザーの属性」に示したTwitterユーザの属性を保持するためのクラスです。TwitteUserクラスのソースをリスト1に示します。

リスト1 models.py TwitterUserクラス
from google.appengine.ext import db

class TwitterUser(db.Model):
    key = db.Key()
    seq = db.IntegerProperty()
    twid = db.IntegerProperty(indexed=False)
    name = db.StringProperty(indexed=False)
    screen_name = db.StringProperty(indexed=False)
    url = db.StringProperty(indexed=False)
    profile_image_url = db.StringProperty(indexed=False)
    location = db.StringProperty(multiline=True,indexed=False)
    description = db.TextProperty()
    friend_ids = db.ListProperty(long)

 TwitterUserクラスは、google.appengine.ext.db.Modelクラスを継承します。このクラスを継承することにより、Datastoreにエンティティとして保存することができるようになります。TwitterUserクラスには、中編の表2に示した属性以外にも、key属性とseq属性を持たせています。key属性は、エンティティを取得する際のキーとして使用する属性で、db.Keyクラスのインスタンスとして定義します。EntityをDatastoreから取得する際には、keyを使って取得すると高速に取得することができます。seq属性は、TwitterUserクラスの作成順に数字の連番を格納するための属性です。連番は後述するCounterクラスから取得します。

インデックスの自動作成

 Google App Engineではエンティティの各属性には自動的にインデックスが作成され、検索時に使用することができます(Text属性やBlob属性にはインデックスは作成されません)。デフォルトではアプリケーションが検索に使用しないフィールドにもインデックスが作成されるので、その分datastoreの使用量が増えることになります。そこで検索で使用する予定のない属性には「indexed=False」を定義することで、インデックスを使用しないようにできます(リスト1のtwid属性、name属性など)。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XMLD...

  • WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド)(サトウ ハルオ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2017年5月時点での登録メンバは52名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂き...

バックナンバー

連載: Google App Engineで開発するスケールするアプリケーション
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5