カテゴリ/タグに日本語を使う・他 〜Hugo Templateのカスタマイズ #1〜

HUGO – A Fast & Modern Static Website Engine

先日リリースされたv0.16からはHugo(のテンプレート)でも、findREとかreplaceREとか、これまでと同様に怠惰な運用ができそうなregexっぽい機能が使えるようになったみたいなので、いま使ってるNanoBloggerと同じHTMLが吐けるところまで(とりあえず)カスタマイズしておくことにしたんだけれど、なまじっかNanoBloggerに慣れちゃってるものだから、正直なところやっぱりちょっとメンドクサイ。

たとえばこのウェブログのようにトップ・ページのみ9記事、2ページ目以降はその倍の18記事を表示っていう構成にするにも、サクッとafter+firstで!ってわけにはいかないんだね(ムチャぶり)

{{ $page := .Paginator.PageNumber }}
{{ $size := .Site.Params.pagination }}
{{ $range := mul $size 2 }}
{{ $after := sub (mul $range (sub $page 1)) $size }}

<main>
  {{ if eq $page 1 }}
    {{ range $index, $element := .Data.Pages }}
      {{ if lt $index $size }}
        {{ .Render "summary" }}
      {{ end }}
    {{ end }}
  {{ else }}
    {{ range $index, $element := after $after .Data.Pages }}
      {{ if lt $index $range }}
        {{ .Render "summary" }}
      {{ end }}
    {{ end }}
  {{ end }}
</main>

設定ファイルは以下のとおり。

# config.toml
+++
paginate = 13

[params]
  pagination = 9
+++

えっと、paginateの値が13なのは単に{{ div (add 9 (mul 9 2)) 2 }}ってだけのこと。他にもっといい方法がありそうな気がしないでもないでもない。


それとあと、このウェブログにはMisc.なんていうカテゴリがあるんだけれど、じっちゃの遺言でディレクトリ名にドットが使えないので、これもなんとかしなきゃなんない(Hugoのurlizeは当然ドットは取り除かないし、そもそも宗教上の理由から使えそうにない)。まぁ、いまのところ問題なのはこのMisc.だけだから、単にreplaceしてやればいいだけのことなんだろうけれど、最近「後々のことを考える」っていう知恵がボクにもついてきたので、ここはメンテナンスがしやすいように、datadirに以下のようなデータファイルを作って、それぞれのカテゴリ(.Params.categories)に対応させることにした。

# taxonomies.toml

misc     = "Misc."
reviews  = "Reviews"
software = "Software"
www      = "WWW"

こうしておけば、後々タクソノミー(≒カテゴリ|タグ)に日本語を使うことがあっても(たとえば「japan = "日本"」とか書きたせば)パーセントエンコーディングなURLを見なくてすむしね。

あ、テンプレートの方はこんな感じ。もちろんタグ(.Params.tags)にも適用可。

<ul>
  {{ range sort .Params.categories }}
    {{ $taxo := index $.Site.Data.taxonomies (printf "%s" .) }}
    <li><a href="/categories/{{ . }}/">{{ $taxo }}</a></li>
  {{ end }}
</ul>

他にも{{ template "_internal/opengraph.html" . }}とか{{ template "_internal/twitter_cards.html" . }}とか{{ .Hugo.Generator }}とか、あるいは{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}なんかの吐くコードがイヤンな感じだったり、上にも挙げたurlizeの挙動がウソンな感じだったり(+が&#43;に変換されるとか&#43;に変換された+がデコードされないっていうべきかな?)手を加えなきゃいけないトコがいっぱいある……んだけれど、そのあたりはまた別の機会に。なにしろNanoBlogger powered by Bash on Ubuntu on Windowsを試した環境のままHugoをいじりはじめちゃったものだからひどく重くて、go build -o hugo main.goするだけでも2分とかヘーキでかかっちゃう。ぜんぜんgoしてくんないの。


そういえば、Hugoっててっきり“You Go”の謂だと思ってたのに、さっきQuick Startの動画を見たらヒューゴって発音してた。なぁんだ。でもPokémon GOがあれだけキテルんだ。PSP goの復権も、これはあるでぇ!(なんのはなしだ