著者:関 勝寿
公開日:2015年11月18日
キーワード: jekyll

記事のヘッダーに最終更新日と更新履歴へのリンクを表示することを可能にした。

たとえば、この記事では、ヘッダーにこのように表示されている。

公開日:2015年11月12日 - 最終更新日:2015年11月17日

そのために、YAML フロントマターにこのように書いてある。

date: 2015-11-12 03:01:50 +0000
update: 2015-11-17 06:38:29 +0000

そして、レイアウトで公開日 page.date と最終更新日 page.update を取得して表示している。

公開日:{{ page.date | date: "%Y年%-m月%-d日" }}{% if page.update %} - <a href="{{ % site.repository }}/commits/master/{{ page.path }}">最終更新日</a>:{{ page.update | date: "%Y年%-m月%-d日" }}{% endif %}<br />

YAML フロントマターに update: がなければ、最終更新日は表示されない。最終更新日を表示したいときにだけ表示するようにした。

ここで、時刻を手入力するのは面倒なので自動的に挿入している。公開日の date:下書きを公開するスクリプトで挿入している。最終更新日の update: については、YAML フロントマターに

update:

と書くことで、コミット時に自動的に更新時刻を挿入するようにした。そのために、How to show the modification date of a file in Jekyll? に書かれている krlmlr さんのpre-commit フック を書き直して使った。すなわち、.git/hooks/pre-commitこのスクリプトを置いた。

#!/bin/sh
# Contents of .git/hooks/pre-commit

# Read YAML front matter in all the modified files for committing,
# and replace "update:" line to "update: current date and time"

git diff --cached --name-status | grep "^M" | while read a b; do
  cat $b | sed "/---.*/,/---.*/s/^update:.*$/update: $(date -u "+%Y-%m-%d %T") +0000/" > tmp
  mv tmp $b
  git add $b
done

このスクリプトは、git diff --cached --name-status で更新のあったファイルを調べて、更新のあったファイルの YAML フロントマターの中で、update: で始まる行に対して、現在時刻を追加する。