Google App Engine 1.1.3 の zipserve で静的ファイルをまとめてアップロード
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 も併用すると、デプロイ時のファイル数をかなり削減することが可能だ。