2010年3月8日月曜日

Google App Engine(GAE)の調査 その1

今回は、Google App Engine(GAE)を調査してみようとおもう。

調査の動機

長期的にドメインモデルを保守し変化し続けることができる能力がが自分達のコアコンピタンスの1つだと確信しているので、NoSQL にはそれほど興味がない。そして現在のGAEが採用する永続化技術は NoSQL の一種である BigTable とファイルシステムである GFS だ。しかし、以下の理由から GAE を調査してみることにした。
  • ドメインモデルを永続化する用途以外では NoSQL も十分価値があると思えるし、その適用場所を見極めるためにも経験が必要。
  • Google がこれだけ力を注ぎ込んで開発したものだから、GAE 自体がベストプラクティスの固まりだと考えるが妥当。そのため、GAE を使い込んで理解することは今後の自分たちに技術向上に直結する。
  • 将来的に自分達のサービスを提供する場合に、GAE だけで構成することはおそらくないだろうが、部分的にGAE を使うことは十分考えられるので、大いに研究しておきたい。
  • 自動的にスケールするアーキテクチャは魅力。
  • 500MBのストレージと500万PV/月まで無料というのは、スタートアップである自分達にとってはかなり魅力的。(EC2も検討していたが、利益の目処も立たないうちからEC2を使うというのは経済的に好ましくない。)

まずは本家のサイトからチェック

http://code.google.com/intl/en/appengine/
  • まずは blog post をチェック。
    • 環境とかツールに関しての情報が書かれているので一読。
    • Google Plugin for Eclipse はほぼ必須なのかな?
    • Cronとか、DBインポートとか、もうすぐDBのエクスポートができるようになる予定とか。
  • Campfire One announcements を見てみる。
    • 特徴とか、Eclipse環境でGWT使ったデモとか、パートナー企業の事例デモとか。
    • 見なくてもいいけど、そこそこ面白いので見ておいて損はない。
ある程度概要はわかってきたので、そろそろ手を動かすことにする。


Getting Started Guide

Getting Started Guideを読んでみる。


Installing the Java SDK

普通にJava6を入れてみた。


Getting Eclipse

Getting Eclipse

FlushBuiderのplug-inを入れる予定なので、Eclipse3.4(Ganymede)を入れることに。
eclipse-jee-ganymede-SR2-win32.zip をダウンロード。


Installing the Google Plugin for Eclipse

Installing the Google Plugin for Eclipse

Eclipseを展開し、起動し、Google Plugin を Software Update でインストール。
work with に http://dl.google.com/eclipse/plugin/3.4 を指定。
すべてのオプションをインストール。


Creating a Project

Creating a Project

とりあえず、GWTなしバージョンの説明どおりにやってみた。
logging.properties の場所が、上記リンク先では src 内だが、実際は WEB-INF 以下だった。

とりあえず、プロジェクト作った直後の状態では、text/plain で Hello, world 文字列を返す Servlet が作られるので、デバッガで起動してみた。

問題なく起動できました。
こりゃお手軽です。

GuestbookServlet.java を変更して保存してブラウザをリロードしたところ、変更が反映されてました。
こりゃお手軽です。


Uploading to Google App Engine

Uploading to Google App Engine

とりあえず、Application Identifierを適当に設定。
独自ドメインも後で簡単に設定できるっぽい。

appengine-web.xml に作成したIDを書き込んで保存。

デプロイボタンを押してみた。
あっさりデプロイされてました。
こりゃお手軽です。


Using the Users Service

Using the Users Service

言われるがままに GuestbookServlet.java を変更し、ローカルで実行。
エミュレーションされてるっぽい。

デプロイしてサーバにアクセス。
ちゃんとGoogleアカウントのログインページ経由になりました。

以下 doGetメソッドのソース
---
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  // ファクトリから UserService を取得
  UserService userService = UserServiceFactory.getUserService();
  
  // 現在の google アカウントのユーザを取得
  User user = userService.getCurrentUser();
  
  // 既に google アカウントでログインしていた場合
  if (user != null) {
    resp.setContentType("text/plain");
    resp.getWriter().println("Hello, " + user.getNickname());
  }
  
  // まだ google アカウントでログインしていない場合は、google 側で用意されるログインページにリダイレクト
  else {
    resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
  }
}
---

ノートPCのバッテリーが切れそうなので、今日はここまで。

0 件のコメント:

コメントを投稿