静的サイトジェネレーターのMiddlemanでサイトをビルドすると、ビルドされたファイル名が「変更なし」「作成した」「削除した」「変更した」といった状態変化とともに並びますよね。
ビルドしたファイルをS3に上げてウェブサイトとしてホストさせてたりすると、余計な通信を減らすためにもこの情報を有効活用したいものです。
公式サイトのドキュメントを見ていてもその方法は載っていないのですが、カスタム拡張を作ることで簡単にこれを取得できます。
この状態変化の情報は、ビルダーのon_build_event
というタイミングのコールバックで取得できます。このコールバックはカスタム拡張のbefore_build
メソッド内で設定できます。
class CatchChange < ::Middleman::Extension
def before_build(builder)
@mode = mode = Hash.new {|mode, event_type| mode[event_type] = []}
builder.on_build_event do |event_type, target, extra|
p event_type # => :identicalなど
p target # => #<Pathname:build/2015/11/06.amp.html>など、出力先のパス
p extra # => nil 「on_build_event」では常にnil
case event_type
when :identical
# 変更なし
when :created
# 新規作成
when :deleted
# 削除
when :updated
# 内容の変更
end
# こうしておくとafter_buildなんかで@modeを参照することでこの情報を使える
mode[event_type] << target
end
end
end
検索エンジンに情報を入れるために、更新したか否かを知りたくて調べてました。でも使わないことにしたので、コードに残らず、忘れてしまいそうなので残しておきます。ただ、アンドキュメンテドなので、予告なく変わったり無くなったりするかも知れません。