Hugoをやってみた

まずインストールから。aptでインストールされるのは古いHugoだったりするのでsnapでインストール。他のSSGと違って単体で動作するのは強み。
インストール
サイトを作成する
テーマをgit submoduleでインストール
テーマがページネーションやポストのレイアウトをしてくれるので自作しなくても済むもののテーマに合わせないといけないのでなにか変えようとすると大変(後述)
しかしながら一から作るよりは絶対にラクではある。
hugoの設定は/hugo.tomlや/config.tomlなどのファイルに記述する。
mdxファイルがAstroの記事には混ざっているので暫定的にmdとして扱う。
11tyと同じようにblog以下の記事はサイトのルートに配置されるのでpermalinksで変更する。
hugo.toml に設定を書く
= "http://ubanis.com/" = "ja" = "Japanese" = "ja" = true = "へび右曲がり" = "ananke"[] = "dark-gray" = "bg-navy" = "/images/hebi.png" = false [] = "ubanis.com(Web)" = "https://ubanis.com" = "/img/nyan4.jpg"# タグの URLパスは /tags/ になる[] = "tags"# mdxもmdファイルとして扱う[] [] = ["md", "markdown", "mdx"]# blog はルート直下に配置[] = "/:sections[1:]/:filename/"[[]] = "about" = "about" = "/profile/" = 20[[]] = "blog" = "blog" = "/blog/" = 30[[]] = "tags" = "tags" = "/tags/" = 40サイトのコンテンツは/content以下に配置する。_index.mdだとテーマが記事のリストを下に追加する。
blogのセクションにはセクションごとの_index.mdを置く。これにテーマのテンプレートが適用される。以下のページはこの下にテーマのlist.htmlがテンプレートになり記事一覧が入ることになる。
サブディレクトリもある場合はサブディレクトリにもとりあえず_index.mdを置かないとhugo.yamlにあったsection配列のスライスが正しく動作しなかった。理由はよくわからないがとりあえず設置。
レイアウトの修正
Astroでいうpublicフォルダは/staticにあたるのでここに画像などを配置する。画像最適化をする場合は変更が必要。
テーマのレイアウトを変更する必要がある場合は /_layouts/_default以下に修正したhtmlや変更箇所の記述が必要。
以下のlist.htmlはテーマのlist.htmlをコピーしたものを改変したもの。記事の一覧表示の部分をサブディレクトリまで探索するように変更したもの。セクションのディレクトリごとに_index.mdがあるとサブディレクトリ以下の記事は一覧に表示されないため。(テーマの挙動)
{{ define "main" }} {{- .Content -}} {{ $pages := where site.RegularPages "Section" .Section }} {{ $paginator := .Paginate $pages }} {{ range $paginator.Pages }} {{ .Render "summary" }} {{ end }} {{- template "_internal/pagination.html" . -}}{{ end }}記事ページのテンプレート bridgy-fedのためにテンプレートの変更が必要。テーマからsingle.htmlを持ってきて改変して設置。
{{ define "main" }} {{ with .Params.tags }} {{ $taxonomyName := "tags" }} {{ $taxonomyMap := index $.Site.Taxonomies $taxonomyName }} {{ if $taxonomyMap }} {{ range . }} {{ $tagName := . }} {{ $tagPageData := index $taxonomyMap $tagName }} {{ if $tagPageData }} {{ $tagName }} {{ else }} {{ $tagName }} (Link not found for '{{ $tagName }}') {{ end }} {{ end }} {{ else }} Taxonomy '{{ $taxonomyName }}' not found. Check config.toml. {{ end }} {{ end }} {{ if .Params.isPname }} {{ .Title }} {{ end }} {{ .Content }} {{ with .Params.replyTo }} リプライ先 {{ end }} {{ with .Site.Params.author }} {{ .name }} {{ with .photo }} {{ end }} {{ end }} 固定リンク {{ with .Date }} {{ .Format "2006-01-02T15:04:05Z07:00" }} {{ end }} {{ with .Params.tags }} {{ $taxonomyName := "tags" }} {{ $taxonomyMap := index $.Site.Taxonomies $taxonomyName }} {{ if $taxonomyMap }} {{ range . }} {{ $tagName := . }} {{ $tagPageData := index $taxonomyMap $tagName }} {{ if $tagPageData }} {{ $tagName }} {{ else }} {{ $tagName }} (Link not found for '{{ $tagName }}') {{ end }} {{ end }} {{ else }} Taxonomy '{{ $taxonomyName }}' not found. Check config.toml. {{ end }} {{ end }} {{ end }}partials で head タグの内容を追加
<head>にタグを追加するために/layouts/partialsディレクトリを作成してhead-additions.htmlを作成する。これをテンプレートが読み込み<head>内に挿入する。
<!-- 省略 -->/layouts/_default/以下に_markupディレクトリを作成してrender-image.htmlを配置。記事内のimgタグにu-photoクラスを付けるよう
記事をビルドして表示してみる。(必ずhugo.yamlなどの設定ファイルがあるルートディレクトリで行わないと設定ファイルが見つからずエラーとなる)

Hugoの結論
11tyよりはなんとなくやりやすいもののそれはテーマのおかげなため自分でいろいろ変えようとするとこちらのほうが大変そうではある。
画像最適化やカスタマイズは後からやってみたものの厄介に感じた。もっと調べればベストな方法は見つかるかもしれない。