Jekyllのpost_urlテンプレートについて日本語の情報が見つからず苦労したので書く。

どうもGitHub Pages(Jekyll)のURL生成規則が変わったらしく、このサイトの一部投稿のURLが変わってしまっている。 その結果、post_urlテンプレートを使わずにURLを直打ちしていた内部リンクが切れてしまった。 一番悪いのはURLが変わってしまったことなのだが、 すでにGoogleにも新しいURLでインデックスが始まっているし変わってしまったものは仕方がないとする。 この機会に内部リンクの直打ちをやめ、 ちゃんとpost_urlを使おうと思ったところエラーが出ないようにするのにかなり手間取った。 ここに現在のpost_urlの使い方について具体例を記す。

例として_posts/2017/06/2017-06-26-life-in-the-fast-lane.mdへのリンクを貼る。

うまくいかない例

まず日本語ドキュメントには2つの例が載っている。

{% post_url 2010-07-21-name-of-post %}
{% post_url /subdir/2010-07-21-name-of-post %}

これを真似してリンクを貼ってみる。

{% post_url 2017-06-26-life-in-the-fast-lane %}
Deprecation: A call to '{{ post_url 2017-06-26-life-in-the-fast-lane }}' did not match a post using the new matching method of checking name (path-date-slug) equality. Please make sure that you change this tag to match the post's name exactly.

ファイル名だけを指定しても一応動作するようだが、_posts直下でなくサブディレクトリ内の記事を指定するとDeprecationエラーが出る。 _posts直下にファイルがある場合はこれでも大丈夫。

{% post_url /_posts/2017/06/2017-06-26-life-in-the-fast-lane %}
Deprecation: A call to '{{ post_url /_posts/2017/06/2017-06-26-life-in-the-fast-lane }}' did not match a post using the new matching method of checking name (path-date-slug) equality. Please make sure that you change this tag to match the post's name exactly.

こちらも動作はするもののエラーが出てしまう。

正しいっぽい書き方

[test]({% post_url 2017/06/2017-06-26-life-in-the-fast-lane %})

test

このテンプレートでは/2017/06/26/life-in-the-fast-lane.htmlという文字列が生成される。 {{ site.baseurl }}と組み合わせて

{{ site.baseurl }}{% post_url 2017/06/2017-06-26-life-in-the-fast-lane %}

とすると確実である。 わかれば簡単なことなのに、結構な時間迷っていた。