WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

Google のインフラで Web アプリを公開できる!「Google App Engine」

こ、これは・・・ Web 開発に革命が起きようとしているのかもしれません。 Google がその膨大なサーバーリソースを全世界の Web 開発者に開放するべく、 Google App Engine を公開しました! Google のサーバーファームで透過的に負荷分散される Python ベースの Web アプリケーションサーバーに、 Google が誇る分散データベースシステム Bigtable ベースのストレージを組み合わせた、フルスタックの Web アプリケーションプラットフォームです。

この App Engine 上で動作する Web アプリケーションは、ストレージ容量 500Mbyte と月間 500 万ページビューまでは無料で公開できます。そしてさらに素晴らしいのは、トラフィックが増加してもコードをまったく書き換えることなしに負荷分散が行われることです。コストをまったくかけずに Web アプリケーションを公開し、人気が出てきたらリソースを消費した分の料金を支払う。しかもメンテナンスフリー。そんな環境がすぐそこまで来ています。

現在は無料版のみのプレビューリリースですが、将来的には追加料金さえ払えば無尽蔵のサーバーリソースが利用できるようになるはずです。本日はそんな画期的なプラットフォームである Google App Engine のファーストインプレッションをお届けします!

使ってみる

さて、 Google App Engine とはいったい如何なるものなのか。とにかく使ってみましょう。残念ながら現在はプレビューリリースなので、最初にサインアップした 10,000 人にのみ App Engine が利用可能になっているようです。すでに定員に達していた場合、こちらのページで申請して順番を待たなくてはなりません。しかし、ローカル環境での開発と動作確認までは自由に行えますので、まだ App Engine が有効になっていない方も、ぜひ試してみてください。

開発環境のセットアップ

まずは App Engine 用のアプリケーションを開発するための環境をローカル PC に構築します。具体的には、 Python 2.5 の実行環境と App Engine SDK をインストールする必要があります。以下、 Windows を前提にして手順をご紹介します。基本的には、それぞれのインストーラをダウンロードしてインストールするだけです。

  1. まずは Python のインストールです。 python.org のダウンロードページで Python 2.5 の Windows 用インストーラをダウンロードします。
  2. インストーラを実行し、 Python 2.5 をインストールします。インストーラに従うだけで簡単にインストールできます。
  3. 環境変数 PATH に Python のインストールディレクトリを追加します。これで Python のインストールは完了です。
  4. 次は App Engine SDK のインストールです。ダウンロードページから Windows 用のインストーラをダウンロードします。
  5. インストーラを実行し、 App Engine SDK をインストールします。こちらもインストーラの指示に従うだけです。

これで、 App Engine 用のアプリケーションが開発できるようになります。簡単ですよね。 Mac OS X や Linux など、もともと Python 2.5 が使える環境なら、 App Engine SDK をインストールするだけなので、さらに簡単です。

Hello World を作ってみる

それでは、早速アプリケーションを作ってみましょう。とはいえ、恥ずかしながら Python はほとんどわからないので(^^ゞ、公式チュートリアルの受け売りで Hello World を作ることにします。

まずは、適当な場所にアプリケーション用のディレクトリを作成してください。そして、そこに以下の内容のファイルを "helloworld.py" という名前で作成します。

print 'Content-Type: text/plain'
print ''
print 'Hello, world!'

これが Hello World のアプリケーション本体になります。 CGI の作成経験がある方なら、なにをやっているかは一目瞭然ですよね。さらにもうひとつ、 "app.yaml" という名前で以下の内容のファイルを作ります。

application: wg-hello
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: helloworld.py

こちらはアプリケーションのコンフィギュレーションファイルです。詳細はこちらのページ参照。先頭行の "wg-hello" という部分はアプリケーション固有の ID になるので、ユニークなものに置き換えてください。これでアプリケーションの完成です。

ローカルで実行する

それでは、ローカル環境で動作確認してみましょう。 App Engine SDK には専用の簡易 Web サーバーである "dev_appserver.py" が同梱されているので、それを実行するだけです。コマンドプロンプトを立ち上げて Hello World のディレクトリをカレントにし、以下のコマンドを実行してください。

dev_appserver.py .

すると、以下のメッセージが表示されます。起動時になにかのアップデートをチェックするかと聞いているみたいですが、詳細不明です。とりあえず Y でいいのではないでしょうか(笑)。

Allow dev_appserver to check for updates on startup? (Y/n):

これで Web サーバーが起動しましたので、ブラウザで "http://localhost:8080/" を表示してみてください。単純にテキストで "Hello, world!" と表示されるだけですが、とにかく最初の App Engine アプリケーション完成です!

App Engine にデプロイ

ローカルでの動作が確認できたら、いよいよ App Engine にデプロイしましょう。前述のとおり、ここからは App Engine が利用可能になっていないと試せませんので、ご注意ください。

アプリケーションをデプロイするには、最初に App Engine 側で受け皿となるアプリケーションを登録しておかなくてはなりません。そのためには、まずブラウザで App Engine のページに行きます。

「Create an Application」ボタンをクリックすると、以下のようなフォームが表示されます。

「Application Identifier」には、先ほど作成した "app.yaml" の "application" の値と同じ文字列を入力してください。小文字の英数字とハイフンしか使えないので注意してください。「Application Title」は任意の文字列でかまいません。「Save」をクリックして、アプリケーションの作成に成功すると、以下の画面になります。

もしエラーが出るなら、 Application Identifier に不正な文字が使われているか、もしくは先に使われているかのいずれかだと思います。他の ID で試してみてください。

これで App Engine 側の準備が整いましたので、アプリケーションをアップロードできます。先ほどと同様にコマンドプロンプトを起動し、 Hello World のディレクトリをカレントにして以下のコマンドを実行します。

appcfg.py update .

Email (Google アカウント名)とパスワードを尋ねてくるので、入力してください。あとは全自動でアップロードが終了します。もしエラーが出るようなら、カレントディレクトリが正しいか、 "app.yaml" の "application" の値が正しいかなどを確認してください。

アップロードが完了したら、以下の URL でアプリケーションにアクセスできる。「アプリケーションID」は "app.yaml" の "application" に指定した文字列です。

http://アプリケーションID.appspot.com/

先ほどと同じく結果は味気ないですが、自分で作ったアプリケーションが Google のサーバーファームで動いていわけですよ!なんだか感動です。

充実の管理機能

以上のように Google のサーバーファームでアプリケーションが公開できるだけでもエキサイティングなわけですが、アプリケーションの管理画面も意外なほど充実しています。それらを簡単にご紹介しましょう。

まずは管理画面の表示方法ですが、アプリケーションを作成した後にトップページを表示すると、アプリケーションのリストが表示されます。ここで、各アプリケーションの ID をクリックすれば管理画面になります。

管理画面のトップページはアプリケーションのアクセス解析になっています。おそらく有料アカウントで料金の目安とするためのものだと思いますが、通常のアクセス解析としても使えそうですね。

そして、以下はアプリケーションのログ表示画面です。まだなにも表示されていませんが、表示するログの種類や期間を限定したりできるようです。

こちらは Datastore の閲覧画面です。こちらも空っぽで意味がありませんね。申し訳ありません(^^ゞ

当然のように多人数開発もサポートしています。以下の画面で他の開発者にアクセス権を与える事ができます。なんだか Heroku を彷彿とさせますね。やはり今後は Web 経由での共同開発が当たり前になっていくのでしょうか。

そしてなんと、アプリケーションはアップロードするごとにバージョン管理されるようです。これもバージョン管理機能を組み込みで装備しているという BigTable の威力なんですかね?以下の画面で各バージョンにアクセスしたり、削除したりができます。また、 Google Apps のアカウントがあれば、そちらのドメインを使ってアプリケーションを公開することもできるようです。

以上、なかなか考えられた管理画面ではないでしょうか。とくにバージョン管理機能は画期的ですね。公開するバージョンも自由に指定できるので、公開バージョンとは別に開発バージョンをアップロードし、実際のサーバー環境で動作確認ができます。素晴らしい。

Amazon EC2 と比べてどうなのよ

ご存知の方も多いと思いますが、今までこういったユーティリティーコンピューティングの分野をリードしてきたのは、書籍販売でお馴染みの Amazon です。 EC2, S3, Simple DB といったサービスを展開し、多数のスタートアップ企業で利用されています。先日ご紹介した Heroku も、実は EC2 で動いているようです。

App Engine も Amazon の一連のサービスと同じく、使ったリソースの分だけ料金を請求することで、 Web アプリケーション開発の初期投資を抑えることを狙っています。それでは、 Amazon のサービスと比較したときの App Engine の利点はどこにあるのでしょうか。私見ですが、それは以下のような感じかと思います。

  • セットアップの手間がなく、すぐに利用できる。
  • サーバー管理がほとんど必要なく、メンテナンスフリー。
  • 負荷分散も自動で行われる。
  • 共同開発やバージョン管理、 Google アカウントによるユーザー認証など、ある程度の開発サポート機能がある。
  • 無料アカウントがある。
  • (たぶん)日本からでもアクセスが速い。 Amazon EC2 は日本にサーバーがないので、日本からのアクセスはあまり速くないというのをよく聞きます。

ということで、主な利点は(金銭的にも人的にも)コストがかからないことでしょうか。 Amazon EC2 は最小構成を 30 日間連続稼動させるだけでも $72 ほど必要ですし、実体は Linux サーバーですから、管理にもそれなりの手間がかかります。それと、透過的に負荷分散されるのも大きいですね。開発者がほとんど意識しなくてもアプリケーションがサーバーファームに溶け込んでいくというのは、非常に画期的です。

それでは欠点はどうかというと・・・

  • 開発言語が Python に限定される。
  • データ保存は Datastore のみで、通常のファイルシステムは利用できない。
  • Pure Python なライブラリを除き、一般のサーバーソフトウェアは利用できない。とくに RDBMS が使えないのは痛い。
  • cron のように定期的にバッチ処理を動かすような機能がない。
  • FTP など Web 以外のサービスは提供できない。ただしメール送信は可能。
  • まだ有料アカウントの価格設定・制限などがわからない。

つまり融通が利かないわけです。条件を決め打ちすることによって効率を上げるという考え方は、 Ruby on Rails に似ているかもしれません。でも、 Python しか使えないのはやっぱりきつい・・・orz

このあたりをふまえると、「Web アプリケーションを App Engine の仕様に合わせて設計することを厭わない」かどうかが、 App Engine を利用する際の判断基準になりそうです。非常に癖のあるサービスなので、それに合わせれば大きな効果が期待できますが、そうでなければサービスの構築自体が難しくなります。

ただ、 App Engine と Amazon のサービスは排他的ではないという考え方もあります。最初は App Engine を使ってコストを抑え、余裕が出てきたら Amazon の各種サービスで App Engine の欠点を補う、ということは可能だと思います。要は使いようということですね。うまく活用して、便利なアプリケーションを開発していきたいものです。

以上、本日は Google が公開した強力な Web アプリケーションプラットフォーム App Engine をご紹介しました。個人でも簡単に利用できる手軽さと、大規模サイトにも対応できるスケーラビリティーを併せ持つ(予定 ^^;)の素晴らしいサービスです。とくに日本では安価で強力なレンタルサーバーがなかったので、これを利用した素晴らしいスタートアップがどんどん出てくるのを期待したいですね。

お・ま・け

トップページで Over Quota はないだろ・・・サーバー落ちた?(^^;;;;;

すぐに復帰したけど。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles