このエントリー
をはてなブックマークに追加
published on in Hugo
tags: Hugo

Hugo の post テンプレートのカスタマイズ

Hugo の記事テンプレート

hugo new を実行すると Markdown ファイルが作られます。

$ hugo new 2016/01/03/hugo.md
/yoya/yoya/git/blog.awm.jp/content/2016/01/03/hugo.md created

しかしデフォルトの記事テンプレートが

date = "2016-01-03T22:12:24+09:00"
title = "test"

のように date と title だけで、出来ればもう少し欲しい所です。

何となく、この ContentTypes の archetype が使えそうです。

archetypes

archetypes/post.md に追加したいテンプレートを書いて、hugo new -k post を実行します。

archetypes/default.md に追加したいテンプレートを入れます。

$ cat archetypes/default.md
+++
categories = []
tags = []
draft = false
+++

#
$ hugo new test.md

結果

元々の date, title に加えて post.md の中身が追加されました。

$ cat content/test.md
+++
categories = []
date = "2016-01-03T22:14:22+09:00"
draft = false
tags = []
title = "test3"

+++

#

これで少し書き始める手間が減りますね。

思う所

メタデータの並びは、出来れば

title = "Hugo の post テンプレートのカスタマイズ"
date = "2016-01-03T22:03:24+09:00"
categories = ["Hugo"]
tags = ["Hugo"]
draft = false

のようにしたいのですが、abc 順で並び直されてしまうようです。ここは出来れば改造したいです。

ソース巡り

英語のドキュメントが苦手なので、ソースコードを追って見つけました。

  • github.com/spf13/hugo
$ cd github.com/spf13/hugo
$ grep -r "title =" . | head -3
./commands/import_jekyll.go:	       	 title = str
./create/content.go:			       by = []byte("+++\n title = \"title\"\n draft = true \n+++\n")
./docs/config.toml:title = "Hugo: A Fast and Flexible Website Generator"
  • create/content.go
func NewContent(kind, name string) (err error) {
	location := FindArchetype(kind)
	if location == "" || err != nil {
		by = []byte("+++\n title = \"title\"\n draft = true \n+++\n")
	}
	psr, err := parser.ReadFrom(bytes.NewReader(by))
	metadata, err := psr.Metadata()

archetype にファイルを置いてカスタムするのが分かります。kind で指定しているようです。

  • command/new.go
newCmd.Flags().StringVarP(&contentType, "kind", "k", "", "Content type to create")

if contentType != "" {
	kind = contentType
}
return create.NewContent(kind, createpath)

これで、-k オプションで指定する事が分かります。

あとはドキュメントを検索すると、

が出てきて、hugo new は post と呼ばれるので、-k post だなと推測できる訳です。