Google App Engine 1.1.3 の zipserve で静的ファイルをまとめてアップロード

2008/10/03 5:48am

Google App Engine SDK 1.1.3 で追加された zipserve を使うと、静的ファイルを zip にまとめてアップロードできるらしい。ただ、Developer’s Guide 内を検索してもドキュメントが見つからない。しかたがないので、ソースコードのコメントを頼りに zipserve を試してみる。

zipserve するもの

今回は、このブログのレイアウトに使っている CSS フレームワークの YAML を zipserve したいと思う。ファイル数もそれなりにあり、しかも、まず変更することはないので、zipserve するにはうってつけなのだ。

app.yaml

YAML の CSS ファイルは /stylesheets/yaml/ 以下に置いてあるので、まずは app.yaml で以下のように設定する。

- url: /stylesheets/yaml/.*
  script: $PYTHON_LIB/google/appengine/ext/zipserve

$PYTHON_LIB/google/appengine/ext/zipserve というのが、さきほどソースコードをみた zipserve モジュールなのが分かるだろう。

zip ファイルの作成と設置

アプリケーション側の設定もすんだし、zip ファイルをつくるわけだが、そのまえに実際に配置されるファイルと zip ファイルの対応関係を確認しておこう。

URL で指定されたパスの最初のディレクトリが zip ファイル名、それ以降が zip 内のファイルパスになる。

つまり、今回の例でいうと、/stylesheets/yaml/core/base.css というリクエストに対して、stylesheets.zip から yaml/core/base.css が返されるわけだ。また、zip ファイルはアプリケーションのルートディレクトリに置くようだ。

それでは早速、zip コマンドで zip ファイルをつくってみよう。

% zip -r -9 stylesheets.zip yaml

yaml ディレクトリを含む stylesheets.zip を作成した。あとはこの zip ファイルをアプリケーションのルートディレクトリに置けばよい。

zipserve, zipimport

仕様に場当たり的な印象は受けるものの、現実にデプロイできるファイル数に限度がある以上、zipserve が有用なことは間違いないだろう。また、同様に SDK 1.1.3 からサポートされた zipimport も併用すると、デプロイ時のファイル数をかなり削減することが可能だ。