初めての Middleman シリーズ初めてのMiddleman:静的サイトのキャッシュとasset_hash拡張を使ったキャッシュのパージ
前回の記事初めてのMiddleman:設定についてでMiddlemanの設定について一通り覚えました。今回は静的サイト運用時のキャッシュとMiddlemanのasset_hash拡張を使ったキャッシュのパージについてメモしておきます。
静的サイトではExpires
ヘッダーやCache-Control
ヘッダーを使うことでユーザーのクライアント環境にアセットファイルをキャッシュさせることで再ダウンロードをさせることなくサイトを閲覧させることができます。パフォーマンスが良くなりAWSのような従量課金のホスティングサービスを利用している場合、コスト削減にもなります。
ただし、アセットファイルを更新した際にキャッシュされたファイルを上手く更新できないと問題を引き起こす可能性があります。Middlemanは1つの方法としてキャッシュをパージするための拡張asset_hashをプリインしています。
asset_hashとは
asset_hashは画像やCSSなどのファイル名にhash値を追加し一意の名前のアセットファイルを生成します。ビルド後のファイルには元のファイル名のファイルは存在せず、このhash値の付いたファイルだけがビルドされます。
sample.png -> sample-32aw43.png
asset_hashを有効にする
asset_hashはconfig.rb
に設定を追記します。
configure :build do
activate :asset_hash
end
これだけでビルドされたファイルのファイル名が変わります。
CSSや画像のリンクにasset_hashを適用するには
CSSや画像のリンクにhash値の付いたリンクを付けるにはアセットヘルパーを使います。ビルド先に元ファイルが作られないため、アセットヘルパーを使わないリンクはすべて403になってしまうため注意が必要です。
<html>
<head>
<%= stylesheet_link_tag 'layout' %>
<%= javascript_include_tag 'application' %>
<%= favicon_tag 'images/favicon.png' %>
</head>
<body>
<p><%= link_to 'Blog', '/blog', :class => 'example' %></p>
<p>Mail me at <%= mail_to 'fake@faker.com', "Fake Email Link", :cc => "test@demo.com" %></p>
<p><%= image_tag 'padrino.png', :width => '35', :class => 'logo' %></p>
</body>
</html>
asset_hashさせたくない場合
asset_hashの対象外にしたいファイルにはignore
オプションを使います。
configure :build do
activate :asset_hash do |options|
options.ignore = [/^assets\/images\/teaser\/eyecatch\.jpg/]
end
end
OGPイメージなどはヘルパーが使えないため、今のところ除外するしかありません。OGP系の拡張機能で対応しているものがあるかもしれませんね。良い対応方法をご存じの方がいればコメントいただけると助かります。
次回:初めてのMiddleman:Middleman::S3Syncで使うアクセスキーの管理方法について
シリーズ
- 初めてのMiddleman:rbenv, bundler 環境でMiddlemanを使ったHello World
- 初めてのMiddleman:レイアウト機能でレイアウトとコンテンツを分離する
- 初めてのMiddleman:パーシャルを使ったコンテンツのモジュール化
- 初めてのMiddleman:SCSSのコンパイルとテンプレートの基礎
- 初めてのMiddleman:Sass MixinライブラリのBourbon, Neatを導入してみる
- 初めてのMiddleman:データファイルとデータファイルを使った動的ページ生成
- 初めてのMiddleman:サイトにブログ機能を追加する
- 初めてのMiddleman:Amazon S3にビルドされたファイルを同期する
- 初めてのMiddleman:HTML/CSS/JS/画像をビルド時に圧縮する
- 初めてのMiddleman:設定について
- 初めてのMiddleman:静的サイトのキャッシュとasset_hash拡張を使ったキャッシュのパージ
- 初めてのMiddleman:Middleman::S3Syncで使うAWS IAMユーザーのアクセスキー管理方法について
- 初めてのMiddleman:Helperを使ってGravatarのアイコンを表示する
- 初めてのMiddleman:アセットパイプラインを使った外部アセットファイルの読み込みと結合
- 初めてのMiddleman:Bowerを使ってjQueryなどのライブラリをロードする
- 初めてのMiddleman:スケルトンを自作する方法
- 初めてのMiddleman:Middleman Blogの記事データを使いやすく管理する方法
- 初めてのMiddleman:Middleman-blogのシングルブログを前提としたSkeletonを作った
- 初めてのMiddleman:Middleman-blogでマルチブログを試してSkeletonを作った
- 初めてのMiddleman:Markdown EngineをkramdownからRedcarpetに切り替える
- 初めてのMiddleman:RedcarpetとMiddleman::Rougeを使ったシンタックスハイライト
- 初めてのMiddleman:Middleman-Syntaxを使ったシンタックスハイライト
- 初めてのMiddleman:Middleman-Blogで記事毎に画像を管理する方法
- 初めてのMiddleman:Gulpを使ってサムネイル画像を生成する
- 初めてのMiddleman:Middleman-OGPのOGP画像指定を相対パスで設定する
- 初めてのMiddleman:Middleman-OGPでMiddleman-BLogにOGPを設定する
- 初めてのMiddleman:Middleman-Titleでタイトルタグを手軽に設定する
- 初めてのMiddleman:多言語化 - 言語ファイルの作成とヘルパーの埋め込み
- 初めてのMiddleman:Middleman-blogにカテゴリやシリーズなどのカスタムコレクションを追加する方法
- 初めてのMiddleman:Bowerで管理されているフォントファイルをインポートする