SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

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

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

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

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

 本稿の前編では、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属性など)。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ユーザーデータ取得処理

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Google App Engineで開発するスケールするアプリケーション連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5023 2010/04/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング