@t2y から Python Web フレームワークアドベントカレンダー の担当がパスされてきました。
僕は Python を使い始めて 1年ぐらいになるのですが、主にコマンドラインのアプリを作っていて
Web アプリには手をつけていなかったので、アドベントカレンダーに合わせて触ってみることにしました。
Web アプリの題材には、以前 Rails + Google Maps API で作った地図投稿アプリを使うことにしました。
以前 Rails 1.1 の練習題材として作ったのですが、バージョンアップの影響で
いつの間にか動かなくなってしまった残念なアプリです。
フレームワークには python のマイクロフレームワークの一つである Flask を、
実行環境には Google App Engine (以下、appengine)を使うことにしました。
appengine の環境作りは非常に簡単です。アカウントを取って、buildout を走らせるだけです。
アカウントを取るところは割愛します。google で調べるといくつも記事が出てくると思います。
buildout は環境構築を行う際に用いるプログラムで、
設定ファイル(buildout.cfg)に書かれた手順に基づいて自動的に環境をセットアップしてくれます。
ここに私が作った設定があるので、ここではそれを利用します。
buildout の実行は以下のように行います。
% mkdir gmappers
% cd gmappers
% wget 'http://svn.zope.org/*checkout*/zc.buildout/trunk/bootstrap/bootstrap.py'
% wget http://labs.timedia.co.jp/2010/12/15/buildout.cfg
% python bootstrap.py
% bin/buildout
たったこれだけで flask + appengine の開発環境ができあがりです。
buildout の内部では buildout.cfg で定義された
を実行しています。
さて、早速プログラムを動かしてみましょう。
何もプログラムを書いていない状態ですが、先ほどの buildout.cfg は
Flask アプリの雛型を生成しているためいきなり実行することができます。
dev_appserver コマンドで appengine を開発するためのテストサーバが起動します。
% bin/dev_appserver -p 8080 app/
そして、ブラウザで localhost:8080 を開いてみて下さい。
hello world の表示が確認できると思います。
では、実際のプログラム(app/main.py)を確認してみましょう。
@app.route('/')
def index():
return 'hello world'
先ほどの表示に関わるコードはたったこれだけです。
@app.route() というデコレータで URL を定義して、後に続く関数でページの内容を指定します。
ここで return している部分を変更したり、HTML に変えたりして試してみて下さい。
さて、アプリケーションができあがったところで実際の appengine 環境にアップロードしてみましょう。
appcfg というコマンドで簡単にアップロード出来ます。
% vi app/app.yaml # application: という行にアプリケーション ID を設定して下さい(初回のみ)
% bin/appcfg update app/
途中で ID, パスワードを入力すると開発したアプリケーションが appengine 環境にリリースされます。
実際に http://hogehoge.appspot.com/ にアクセスすると、同じ結果が得られると思います。
Flask + appengine を触ってみた感想です。(まだ 2?3日しか触っていませんが…)
Flask + appengine はぱぱっとアプリケーションを作るには非常に手頃なフレームワークだと思います。
環境構築も最小限の手間でできるので準備?開発までに時間を必要としません。
実際、今回のアプリのデータ表示部分を移植するには 2日程度しかかかりませんでした。
勉強に要する時間も含めて、かなり早くできたんじゃないでしょうか。
さて次のアドベントカレンダーですが、普段 sphinx などでお世話になっている
@shibukawa さんにお願いします。