ブログをオレオレCMSからHugoに移行した
移行の経緯
前回の記事から半年経っていますね。何でこんなに間が空いたかを説明できるような納得感のある理由があるかといえば、ないです。
しいて言えば(やっぱりある)、3年前に作って使っていたシェルスクリプトなCMS、site.shでブログを管理していましたが、
- データと処理がごちゃごちゃでつらい
- 記事執筆用のオレオレフォーマットを拡張したくても面倒くさい
- シェルスクリプトで全部やろうとするのが良くないのでは?
- 他の言語だとかなり良さげなのが既にあるので作り直すのもな…
という堂々巡りを2年くらい前からやっており、微妙なsite.shの使い勝手の悪さで、記事を書くモチベーションが下がっていました。それで、この度ようやくHugoに移行する決心がついたというわけです。
Hugoを選んだ理由
- site.shが完成しようかという時に初めて知った静的サイトジェネレータがHugoだった
- 生成が早そう
という2点がメインです。Go言語が好きと言えるほど使ったことはないです。が、テンプレート処理が標準パッケージなところとか、ありものを組み合わせている感じがして好きです。1
Hugoでサイトを組んでみた印象としては、色々なやり方があって、ベストプラクティスっぽいものはなさそうだなあということです。それだけ作り方に幅があるのは良いことだと思いますが、どこから手を付けたら良いか迷いましたので、ポイントかなというのをいくつか紹介したいと思います。
Hugoでサイトを組んでいた時の気づき
ArchetypesとSection Templatesの関係性
- contentディレクトリ下の構成でSectionが定まる
archetypes/<section>.md
を作るとhugo newでSectionにあわせた雛形を作ってくれる- mdに
type: <section>
で明示的に指定することもできる。(省略しても良い)
Base(Block)/Partial/Internal TemplatesとShortcodesの関係性
- Base Templatesは
{{ block }}
にしたところを{{ define }}
で書き換えられる - Partial Templatesは
layouts/partials/**.html
を{{ partial }}
で使いまわせる - Internal Templatesはあらかじめ用意されたPartial Templatesみたいなもん
- Internal Templatesをカスタムする場合はここをみてPartial Templatesにすればいい
- 個人的には
{{ block }}
と{{ define }}
と{{ partial }}
はPugのextendsとblockとincludesに似ていると思った - Shortcodesは記事の中で凝ったマークアップ構造を使いたい時に使う
- 画像とか動画とか
- あらかじめ用意されたShortcodesもある
- Lookup Orderを見ながらテンプレートを配置すると良い
configの細かいところ
- preserveTaxonomyNamesを
true
にしとかないと、タグの文字列がurlizeされる - hasCJKLanguageを
true
にしとかないと、.Summary
がスペース区切りの単語数でカウントされて、RSSフィードのdescription
とかめちゃ長くなる2 - BlackfridayのplainIDAnchorsを
false
にしとかないと、同じ文字列の見出しが2つあるとidが重複する
最近のHugo(0.32〜)は便利
Hugoに移行した結果
Markdownで記事が書けるようになったのは、前と比較したら良くなったかなと思います。勘違いしてほしくないのは、私はそんなにMarkdownが好きではないということです(面倒くさい人だ)。それでも、リストのネストが簡単に書けるようになったのは良かったですね。
それと同じくらい、Shortcodeが使えるようになったのも良かったです。site.shで記法を拡張したかったのは、任意のHTMLコードを使いまわせるようなところだったので。
今回移行するに当たってHugoのテーマも作成したので、参考になればさいわいです。
https://github.com/knokmki612/hugo-pencil-and-ruler
これで記事を書くペースが上がるといいなぁ…
-
シェルスクリプトで頑張っていたからそう感じるのかねぇ…いや、シェルスクリプト的にはコマンドを活用すれば良くて、自分がそういう風にうまく書けなかっただけだな… ↩︎