Engineのインフラ・サーバ構成などについて説明しました。Engineを連携させたアプリケーションの仕様概要と、設計について説明しました。後編となる本稿では、中編で説明したアプリケーションを実際にプログラミングしていきます。Engineは、開発したアプリケーションをGoogleのスケーラブルなインフラ環境上で公開できるサービスです。Engineのインフラ・サーバ構成などについて説明しました。Engineを連携させたアプリケーションの仕様概要と、設計について説明しました。後編となる本稿では、中編で説明したアプリケーションを実際にプログラミングしていきます。Engineが2010年2月13日現在、サポートしているPythonのバージョンは2.5です)。Engineでは開発言語としてPythonとJavaがサポートされていますが、本稿ではPythonを用いて開発します。Pythonに標準で搭載されているwebappというフレームワークを使用します。Engine上で動作するレコメンドアプリケーションです。中編の図1「Twitterレコメンドアプリケーションの概要」に示したように本稿のアプリケーションは、大きく「ユーザデータ取得処理」と「オススメユーザ表示処理」の大きく2つの処理から構成されます。サンプルアプリケーションのディレクトリ・ファイル構成まずは、以下の表に本稿で使用するファイルを一覧にまとめました。APIでユーザの情報を取得してDatastoreに保存します。ユーザ情報を格納するクラス(Kind)をmodels.pyファイルに記述します。クラスは、中編の表2「アプリケーションで使用するTwitterユーザーの属性」に示したTwitterユーザの属性を保持するためのクラスです。TwitteUserクラスのソースをリスト1に示します。db.ListProperty(long)TwitterUserクラスは、google.appengine.ext.db.Modelクラスを継承します。このクラスを継承することにより、Datastoreにエンティティとして保存することができるようになります。TwitterUserクラスには、中編の表2に示した属性以外にも、key属性とseq属性を持たせています。key属性は、エンティティを取得する際のキーとして使用する属性で、db.Keyクラスのインスタンスとして定義します。EntityをDatastoreから取得する際には、keyを使って取得すると高速に取得することができます。seq属性は、TwitterUserクラスの作成順に数字の連番を格納するための属性です。連番は後述するCounterクラスから取得します。Engineではエンティティの各属性には自動的にインデックスが作成され、検索時に使用することができます(Text属性やBlob属性にはインデックスは作成されません)。デフォルトではアプリケーションが検索に使用しないフィールドにもインデックスが作成されるので、その分datastoreの使用量が増えることになります。そこで検索で使用する予定のない属性には「indexed=False」を定義することで、インデックスを使用しないようにできます(リスト1のtwid属性、name属性など)。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。