前回エントリの通り、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を使うことに決定。参考にさせて頂いたサイトは以下の通り。
作成した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",
},
}