2011年02月03日

HTML5 から offline application を作るための強力な機能として application cache が追加されています。
これのキャッシュを制御する方法としては、専用の manifest ファイルを書かなければいけないんですが、手で書くのもだるいし専用コマンド作るのも打つのもだるいので

 $ make html5manifest
ってコマンド叩いたら htdocs 以下を勝手に探索して manifest ファイルを作ってくれる物をこしらえました。

http://frepan.org/~yappo/HTML5-Manifest-0.02/
http://frepan.org/~yappo/Module-Install-HTML5Manifest-0.01/ そのうちCPANにも登録されます。

ディレクトリの中から対象となるファイルを集めて来て manifest ファイルを作るための HTML5::Manifest というモジュールと、 HTML5::Manifest と Makefile の繋ぎ込みをしてくれる Module::Install::HTML5Manifest というモジュールの二本立てにしました。

HTML5::Manifest 単体の使い方は、きっとだれかが PSGI な middleware 書くだろうから今回は省略しておいて Makefile.PL での使い方をさらっと説明します。

POD に書いてあるのであんまり言う事ないですが

    html5_manifest
        make_target   => 'hoge',
        htdocs_from   => 'htdocs',
        manifest_skip => 'html5manifest.skip',
        generate_to   => 'example.manifest',
        with_gzfile   => 1, # create .gz file
        network_list  => [qw( /api /foo/bar.cgi )],
        use_digest    => 1,
        ;
とかして使います。

make_target は Makefile のターゲットを変更します。この例だと

 $ make hoge
で manifest ファイルを作るって事。
デフォルト以外の物をしていする事によって、複数種類の manifest ファイルを管理したい需要に応えます。

htdocs_from は、どのパスを起点にしてキャッシュするファイルのリストを作成するかを指定します。
普通に document root を指定するべきですね。

manifest_skip は、 htdocs_from で指定したパスをトラバースする時に、無視するファイルパターンを記述してあるファイルを指定します。
MANIFEST.SKIP と同じ役割です。

generate_to は、実際に作られた manifest ファイルを保存する先です。

with_gzfile は、真の値を渡すと generate_to と共に .gz ファイルも作成します。
manifest ファイルが、そこそこの大きさになったときに .gz 化してサーブする事を想定しています。

network_list は、 manifest ファイルの NETWORK セクションにそのまま書き出されるリストです。 NETWORK セクションについてはググれ。

use_digest は、キャッシュ対象のファイル全部の MD5 チェックサムを manifest ファイルの中に書き込みます。
ファイル構成がかわらなくても、どれかのファイルの内容が変更になったらチェックサムが変わるので「manifestファイルが更新されたら、キャッシュを更新する」という application cache の仕様を満たす事が出来ます。
手で、一々バージョン番号ふったり make html5manifest した日時を自動的にいれるとか面倒ですよね。

HTML5 っていう名前空間は、仕様の名前を使ってるから問題無いという判断。だれだって HTML::HTML5 とかタイプしたいと思う人なんかいないし。

ということで Perl で HTML5 をやっている方はお試しください。

Posted by Yappo at 2011年02月03日 21:54 | TrackBack | Perl
Comments
Post a comment









Remember personal info?






コメントを投稿する前に↓の場所にnospamと入力してください。