GAEpでiPhone向けWebアプリを作る (4)GAEpプロジェクトとそのファイル構成
前回の続きです。
GAEpプロジェクトとそのファイル構成
Google App Engine Pythonプロジェクトの作成
プロジェクト作成方法は、スタートガイドあたりを参考に適当に。ここでは割愛。
プロジェクト内のファイル構成
以下のようなファイル構成にしました。
<project dir>/ +--app.yaml +--index.yaml +--cron.yaml +--main.py +--todo/ +--__init__.py +--handlers.py # RequestHandlerクラス群 +--models.py # DataStoreクラス群 +--tasks.py # cronタスククラス群 | +--staticdir/ # 静的ファイル格納 | +--views.html # メインビュー | +--bye.html | +--todo.manifest # 現在未使用 | +--css/ # css格納 | | +--iphone.css | | +--todo.css | +--js/ # javascript格納 | | +--jquery-1.4.4.min.js | | +--default.js | +--img/ # 画像リソース格納 | +--button.png | +--back_button.png | +--templates/ # テンプレートファイル格納 +--views.tpl@
今回作ってみて、この構成に対して以下の感想を持っています。
- 静的ファイルstaticdir/とテンプレートファイルtemplates/は明確に分けるべき
- staticdir/を設けることでpythonスクリプトと静的ファイルを明確に分離できる
- staticdir/内には実際のサービス時と同一の相対パスで html/css/javascript を配置
- staticdir/の中で html/css/javascript のデバッグがしやすい
- 本当は、静的ファイル群(staticdir/)とスクリプト(*.pyやテンプレートファイル群)は同一のディレクトリ階層に配置するのはあまりよくないかもしれない。が、近いほうが安心するので今回はこのようにした
なお、特に静的ファイルとテンプレートファイルの混同には、充分注意すべきです。同一パスのファイルを静的ファイルとしてもテンプレートファイルとしても利用するのは GAEp 上禁止されています。GAEp アプリは、サーバにアップロードされる際、静的ファイルは StaticFileServer に、テンプレートファイルは ApplicationServer にアップロードされるようです。つまりアップロード先が異なります。
どうしても静的ファイルとテンプレートファイルを同一にしたい場合には、シンボリックリンクを作成します。例えば、上記のファイル構成図で、templates/views.tpl ファイルは、staticdir/views.html ファイルのシンボリックリンクにしてあります。このようにしておくと開発機上では実体ファイルをひとつにしつつ、アップロード時に両方のサーバにアップロードされます。
app.yamlの記述 (ユーザ認証なし)
app.yaml の内容を下に示します。ただし、この段階ではまだユーザ認証は設定していません。
app.yaml内
application: penguinwatcher version: 1 runtime: python api_version: 1 builtins: - remote_api: on handlers: - url: /todo/js static_dir: todo/staticdir/js - url: /todo/css static_dir: todo/staticdir/css - url: /todo/img static_dir: todo/staticdir/img - url: /todo/(.*\.html) static_files: todo/staticdir/\1 upload: todo/staticdir/(.*\.html) - url: /todo/tasks/.* script: main.py login: admin - url: /todo/.* script: main.py
js/, css/, img/, *.htmlは、todo/直下のパスにマッピングすることにします。
つまり、
(URL) http://penguinwatcher.appspot.com/todo/views.html ↓ (ファイルパス) ./todo/staticdir/views.html
また、同様に、todo/直下のパスに リクエストハンドラをマッピングします。
本日はここまで。次回はモデル(models.py)およびリクエストハンドラ(handlers.py)を書いていきます。
参考
Google App Engine については、基本的に Google が公開しているデベロッパーガイドを見ればだいたいのことはわかります。内容もわかりやすいです。
特に、Google App Engine Python については、以下です。
- http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/
- http://code.google.com/intl/ja/appengine/docs/python/overview.html
基本的にはこれらのサイトを見ればほとんどのことはわかりますが、その他に僕は以下の本を参考にしています。
- 作者: Dan Sanderson
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2009/11/15
- メディア: ペーパーバック
- クリック: 29回
- この商品を含むブログ (6件) を見る
和訳も出ているようです。
- 作者: Dan Sanderson,玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/01/24
- メディア: 大型本
- 購入: 5人 クリック: 414回
- この商品を含むブログ (27件) を見る