5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Middlemanで「変更なし」「作成」「削除」「変更」の状態を取る

Posted at

静的サイトジェネレーターのMiddlemanでサイトをビルドすると、ビルドされたファイル名が「変更なし」「作成した」「削除した」「変更した」といった状態変化とともに並びますよね。
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

検索エンジンに情報を入れるために、更新したか否かを知りたくて調べてました。でも使わないことにしたので、コードに残らず、忘れてしまいそうなので残しておきます。ただ、アンドキュメンテドなので、予告なく変わったり無くなったりするかも知れません。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?