最初に知ったときからだいぶ時間があいてしまったのですが、やっと試す時間が作れました。今日は Google App Engine についてメモです。
インストール
Google App Engine は Python 2.5 以上が必要なのですね。Google App Engine のインストール時に Python 2.5 以上がないと警告が出ましてインストールは途中で終了します。。。
Python はこちらからダウンロードできるようです。
さて、ここからやっと Google App Engine を使う準備が整ったことになりますね。
私の環境は Mac OS X (10.4.11、つまり Tiger) を使っています。
Google App Engine は /usr/local/google_appengine/ にインストールされました。
# find /usr/local/google_appengine/ -type f
としてみると Django が。へー。
スタートガイドでしょ。
さてインストールが完了したら早速触ってみます。まずは日本語版のスタートガイドを最初から順番においかけてみます。こういうときは写経です。
* 概要
* 開発環境
* Hello, World!
* webapp フレームワークの使用
* ユーザー サービスの使用
* webapp を使ったフォームの操作
* データストアの使用
* テンプレートの使用
* 静的ファイルの使用
* アプリケーションのアップロード
このスタートガイドでは最初は文字列 helloworld だけを表示するアプリをゲストブックアプリに成長させていくストーリーになっています。早速、「webapp フレームワークの使用」から「コンテンツを次のように置き換えます。」とどんどん上書きしていく形をとっています。(もし自分の心が写経モードだったときには章単位で新しいファイルを用意して、コピペではなくてちゃんとタイプしていくというのがいいですね。今回私はそのやり方にしました。)
感想
とても簡単にアプリの開発ができる感じですね。Rails や Catalyst のように開発用のミニサーバで小さく作っていくスタイルはモチベーションが高まっていきますね。
Google App Engine はなかなか良さげです。早速自作アプリを作成しようと今コードを書いています。まだ Python をはじめて間もない、というか Google App Engine に触れるまでは Python のコードを書いたことがなかったので、これから一般的に使われるモジュールなどを知りたいな。おそらく Google App Engine で使えるモジュールと使えないモジュールがあると想像しているので、その辺りの違いなんかもこれから勉強したいです。
Python も結構面白いよ。
おまけ
最後にいくつか特記しておきます。
データストアの使用
ここで以下のエラーで詰まりました。
Traceback (most recent call last):
File "/usr/local/google_appengine/google/appengine/ext/webapp/__init__.py", line 484, in __call__
handler.get(*groups)
File "/Users/takatsugu/GAE/helloworld/helloworld5.py", line 17, in get
greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date DESC LIMIT 10")
File "/usr/local/google_appengine/google/appengine/ext/db/__init__.py", line 1496, in __init__
from google.appengine.ext import gql
SystemError: Parent module 'google.appengine.ext.db' not loaded
よく調べてみると、/usr/local/google_appengine/demos/guestbook にこの章と似たようなサンプルがありました。コードを見比べても特に大きな違いは見られなかったので、試しにその demos/guestbook を起動しましたら、期待された動作が出来ました。「やっぱり何か違うのかなー」と思って、dev_appserver.py helloworld/ としたら、今度は上記のエラーを出力せずに起動しました。もしかして db,Model はサーバ起動時に生成されるのかな?これまで、 Hello, World!、 webapp フレームワークの使用、 ユーザー サービスの使用、 webapp を使ったフォームの操作、とずっと dev_appserver.py を Ctrl + C で終了させずにきたのでした。。。
とりあえずこのエラーが出たときには dev_appserver.py が起動していたら Ctrl + C で一旦停止した後、再び dev_appserver.py 起動するというのが対処法っぽいですね。(将来的にはgoogle_appengine か dev_appserver.py などのフレームワーク関係のコードを見てみてることにします。とりあえずは「開発用 Web サーバ」の章が参考になります。)
テンプレートの使用
ここでは以下のようなエラーが出ました。
Traceback (most recent call last):
File "/usr/local/google_appengine/google/appengine/ext/webapp/__init__.py", line 484, in __call__
handler.get(*groups)
File "/Users/takatsugu/GAE/helloworld/helloworld6.py", line 34, in get
self.response.out.write(template.render(path, template_values))
File "/usr/local/google_appengine/google/appengine/ext/webapp/template.py", line 80, in render
t = load(template_path, debug)
File "/usr/local/google_appengine/google/appengine/ext/webapp/template.py", line 125, in load
template = django.template.loader.get_template(file_name)
File "/usr/local/google_appengine/lib/django/django/template/loader.py", line 79, in get_template
source, origin = find_template_source(template_name)
File "/usr/local/google_appengine/lib/django/django/template/loader.py", line 54, in find_template_source
mod = __import__(module, globals(), locals(), [attr])
SystemError: Parent module 'django.template' not loaded
ここでもデータストアの使用のときと同様に dev_appserver.pl を再起動したところエラーが解消されました。テンプレートエンジンには Django テンプレート エンジン を使っているんですねぇ。本家サイトでは記法が詳しく書かれています。
Comments