Google App Engine を使ってみたよ。

今日はお仕事の話。
昨晩、Google App Engine を試用してみました。
…といっても、チュートリアルをやってみただけですが。(^ ^;
とりあえずの感想は、思ったよりず〜っと簡単!でした。


まずは、ローカルのテスト環境の構築です。
最初に、Python をダウンロードし、手元の Windows XP へインストール。
Python のバージョンは 2.5.2 です。本当は 3 が使いたかったんですが、GAE の今のところの環境仕様ということで仕方ないですね。
次に、Google App Engine SDK をダウンロードして、インストール。
で、これで準備 OK です。
もっといっぱい設定とかいるのかなーと思ったら、終わりでした。
これで、環境変数とかも全部設定されています。


で、定番の「Hello, World!」ですね。
とりあえず、チュートリアルの Hello, World! の解説の通りに
コードを入力(コピペ)して保存してみました。


開発用 Web サーバー(dev_appserver.py)をコマンドプロンプトから起動します。

google_appengine/dev_appserver.py helloworld/

チュートリアルでは、↑上のようになってましたが僕の環境ではエラーでした。なんでも、コマンドが見つからないとのこと。で、環境変数を確認すると、C:\Program Files\Google\google_appengine\ となってたので、頭の "google_appengine/" を端折ってみたら起動できました。あと念のためですが、ちゃんと "helloworld" フォルダがあるところに移動(cd)してくださいね。

dev_appserver.py helloworld/

起動時に幾つか WARNING が出たのですが、普通に起動したみたい。ググってみますと、皆さん同様の警告が出ているものの無視して進めているようなので、僕もとりあえず気にしない。 (*'ω'*)


これで準備できたはずなので、ブラウザで http://localhost:8080/ を開いてみると、ちゃーんと Hello, World! 出来ました。
いやん♪ 簡単〜。


§


その後もチュートリアルを進めて、Datastore までざっと見てみましたが、いずれもチュートリアルどおりにサッパリと動作してくれたので何も迷うこともなく、簡単でした。


で、何故 Google App Engine + Python に気が向いたかと言いますと…、GAE の利用については、やっぱり無料で秀逸な環境が利用できること、これが大きいですね! そして、Python については、やっぱりデフォルトで使える一番シンプルな環境だったからです。…ちなみに、前回の記事で、Python に対する個人的な抵抗感を書いていましたが、YAML は好き!という僕ですから、まあ、単純な思い込みだったのかも知れません。すぐに慣れました(…とは言え、チュートリアルのコードを弄っている時にインデントエラーを2度ほどヤッちまいましたが〜(*'д`*))。Rails on GAE という選択もあったし、調べてみると比較的簡単に組み込める手段もあるようでしたが、なるべくデフォルトの環境でサッパリと実装するのが好みなので、Python がデフォルトなら、それでも良いかな?と思っています。んで、やっぱり Java は今さらメンドクサイです。


今のところの悩みどころは、webapp と Django のどちらを使うか?です。
Django も GAE 環境に組み込まれているようなので使いやすいですね。ただ、Django を使えばより便利だとは思うのですが、習得コストはやや余分に掛かりそう…(どうだろ?)。あと、やっぱり GAE の Datastore が RDB ベースじゃないこと等から幾つか問題もあるみたい。何かわからないことが出てきた時、慣れないフレームワークで環境依存の問題が絡んできたら、問題の特定や切り分けが難しくなりそうです(心配性な僕…)。その点、webapp は超シンプル!で、かつ、GAE 専用?ですから、そういった問題は無いでしょう。チュートリアルをやってみた結果、やりたい事への道筋も概ね見えて来ましたし、そもそも、その「やりたいこと」自体が、大したことではないので、全く問題無いでしょうね。…う〜ん、これはもう webapp かな? という感じではありますが、Django 関連の情報も調べてみてから決めたいと思います。


最後に、多くの人が気になっているであろう、データベースがいわゆる RDB じゃないことについてコメントしておきます。で、僕も例にもれず、最初はすご〜〜〜く抵抗を感じたのですが、今は上手く使いこなせたら面白いかも…、と思っています。理由は、次の2つ。

  1. Rails にあるようなデータの遅延取得 (例えば class.students のような) を利用するには支障無いし、自分自身も分かりやすさなどから最近はそれを多用するようになっている。
  2. いわゆる JOIN に類する要求があれば、永続化のスキームを冗長化して対応できそう。つまり、あえて正規化しなかったり、など。

…もちろん、色々と問題もあるだろうけれど、そういうのを探索するのも楽しいかも知れない、てね♪