前回エントリの通り、Hugoの記事作成~プレビュー~ビルドまでは自宅サーバ(FreeBSD)上で行っていますが、記事ファイルは同サーバから提供している共有フォルダ上に配置しています。で、Windows端末から記事を書き溜めて適宜公開するようなスタイルで運用しようかなーと思っていたのですが、記事を作成してもプレビューに反映されないような事象に遭遇しました。もちろんFront Matterは最低限のものを記載済み。

試しに切り分け目的でhugo newして記事作成したら正常に認識されたので、えーこれひょっとして記事作成はいちいちhugoコマンド叩かないといけないの全然お手軽じゃないじゃん!と憤ってみたのですが、よく考えたらWordPressから記事インポートしてる時は全然そういうことなかったなと思い直し色々調べてみた所、Front Matter内のdate項目形式が原因ぽいことが分かりました。

Specifying datetime in your Hugo posts’ front matter · Jamie Tanna | Software Engineer

なんかどうもISO 8601形式(hugo newで自動入力される形式)で入力する必要があるっぽい。Hugoの公式サイトにはそういう話書いてないし、Hugo公式のFront Matter説明ページだと普通にYYYY-MM-DDで表記してるんだけど何でなのだろう。ちなみに一度プレビューorビルドのタイミングで認識されると次回以降はフォーマットを変えても認識されます。

てことで、さすがに同形式のdateを含めたFront Matterを毎回手打ちするのもしんどいのでsnippetを作ることにしました。当初はいつも使ってるサクラエディタでやろうと思ってたのですがマクロ作るのが存外に手間取りそうなので、色々情報のあったVSCodeを使うことに決定。参考にさせて頂いたサイトは以下の通り。

Nobwak's Lair | VSCでHUGOのFrontMatterを書くsnippetsをつくろう

作成したsnippetはこちら。authorとか決め打ちしているあたり完全に個人用なのでご注意ください。他、使用しているテーマ(Mainroad)独自の内容を含みます。

ちなみにdateの部分だけ記事公開時に差し替えるためにhugo_datetimeのsnippetも用意してみましたが、こちらはlastmodとか別属性使った方が良いのかも。というか、展開したhugo_front_matterの中で実行しようとしてもスニペットの候補に現れないのよね。こちらも原因が良く分からず。。

{
	"hugo_front_matter": {
		"prefix": "hugo",
		"body": [
			"---",
			"title: ",
			"author: sight",
			"type: post",
			"date: ${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}T${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}+09:00",
			"categories:",
			"  - ",
			"tags:",
			"  - ",
			"draft: true",
			"# Theme-Defined params",
			"thumbnail: '' # Thumbnail image",
			"lead: '' # Lead text",
			"toc: false # Enable Table of Contents for specific page",
			"---",
			"$0",
		],
		"description": "front matter for hugo",
	},
	"hugo_datetime": {
		"prefix": "sysdate",
		"body": [
			"date: ${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}T${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}+09:00",
		],
		"description": "current datetime for hugo",
	},
}