BLOG2012/02/13キャッシュマニフェストってなんだleonです。ガラケー向けだったDECOLOGも最近どんどんスマートフォン化してます。ガラケーとスマートフォンではブラウザの表現力が雲泥なので、各ページのHTML書き直し必須です。これを機にHTMLを勉強しなきゃ、ということでHTML5を新年の抱負にしました。HTML5ってなんですかってところなんですが、HTML5が示す仕様って範囲広い。HTML5に含まれている仕様には以下のようなものがあるらしいです。セマンティックスオフラインとストレージデバイスアクセス接続性マルチメディアグラフィックパフォーマンスCSS3というのも、HTML5はブラウザプラグインで提供されているFlashなどのリッチインターネットアプリケーションをプラグインレスで利用できるようにするために、ウェブアプリケーションのプラットフォームとしての機能やマルチメディア要素をすべて取り込んだものになってる模様。HTML5を勉強するって決めたもののどこから手を付ければいいのかなと、途方に暮れそうになりましたが、考え方を変えると最近のWEBトレンドを追いかければ大概それはHTML5なんじゃないかと気づきました。いうことで、気にせず好きなところから始めることにしました。最初に手をつけたのがキャッシュマニフェストです。キャッシュマニフェストは、HTML5で実装されたWEBアプリケーションをオフラインで実行できるようにするための仕組みだそうです。ところで、オフラインWEBアプリケーションって自己矛盾した言葉ですよね。WEBアプリケーションはサーバーにリクエストを投げて、レスポンスとしてHTML、Image、CSS、Javascriptといったリソースをダウンロードしてページを表示する仕組みなので、ネットワークに接続して利用することが前提という先入観を持ってました。お勉強ってことでこんな本読んだり、こんなとこを読んだりしました。キャッシュマニフェストって?単純にWEBアプリケーションをオフライン実行するには、必要となるHTML、Image、CSS、Javascriptといったリソースファイルが事前にローカルにキャッシュされている必要があります。キャッシュマニフェストは、オフラインWEBアプリケーションが使用するリソースファイルをページのリクエストとは別契機でダウンロードしておき、リクエストの代わりにキャッシュを返す仕組みです。キャッシュマニフェストを利用するには、マニフェストファイルと呼ばれるリソースファイルのURLをリストにしたファイルを用意し、このマニフェストファイルをhtmlタグのmanifest属性で指定します。manifest="/cache.manifest"><body>...</body></html>するとこのページにアクセスした際、オンラインの間にオフライン実行に必要なリソースをダウンロードしてローカルにキャッシュしてくれます。マニフェストファイルはMIMEタイプtext/cache-manifest使って送信するので、Apacheの設定ファイルにAddTypeディレクティブを追加しく必要があります。.manifestマニフェストファイルのリソースリストは以下のように記述しておきます。MANIFEST/hoge.css/hoge.js/hoge.jpgオフラインWEBアプリケーションでもローカルにキャッシュしたくないリソースもあると思います。マニフェストファイルにはそんなリソースを定義する構文がいくつか用意されてます。マニフェストファイルは3つのセクションヘッダで分けられるようになっています。先のようにセクションヘッダがない場合は全体がCACHEセクションとして扱われます。CACHEセクションこれ以降に記述されたリソースはすべてキャッシュ対象になります。NETWORKセクションこれ以降に記述されたリソースはキャッシュされません。ネットワークに接続してリソースを取得します。FALLBACKセクションキャッシュ対象だが何らかの理由でキャッシュできない場合の代替リソースになります。キャッシュマニフェストはこんな感じです。このキャッシュマニフェストを使えば、DECOLOGでも静的な画像やCSSなどの配信トラフィックを減らせるのではという期待しました。世の中そんなに甘くないですね。いうのはキャッシュマニフェストは、マニフェストファイルを指定したhtmlファイル自身もローカルにキャッシュします。そのhtmlファイルがcgiで動的に生成される場合、キャッシュされると不都合が生じます。マニフェストファイルのNETWORKセクションにhtmlファイルのURLを指定しても回避できないないんです。考えてみたら当然何ですけどね。AJAXを利用するなどして、ページ全体をロードする必要がなくなればキャッシュマニフェストを活かせるかなと思いますが、DECOLOGではもう少し先になりそうです。