notes.kagcc

Theme なしで Hugo を使いはじめる

普段コードをあまり書かない人とも共同で扱うかもしれないことから,(jekyll に比べて環境構築が楽かもしれない) hugo の利用を検討して,このブログもその一環で作成している. 公式の quick start 通り theme を使うとむしろ機能がわかりにくいので,素の状態から使い始めてみる的なやつを,随時更新しながらメモ書きとする.

本当の quick start

構造

hugo new theme my-theme でできるのはこんな構造だ

./
├── archetypes/
│   └── default.md
├── assets/
│   ├── css/
│   │   └── main.css
│   └── js/
│       └── main.js
├── content/
│   ├── _index.md
│   └── posts/
│       ├── _index.md
│       ├── post-1.md
│       ├── post-2.md
│       └── post-3/
│           ├── bryce-canyon.jpg
│           └── index.md
├── data/
├── hugo.toml
├── i18n/
├── layouts/
│   ├── _default/
│   │   ├── baseof.html
│   │   ├── home.html
│   │   ├── list.html
│   │   └── single.html
│   └── partials/
│       ├── footer.html
│       ├── head/
│       │   ├── css.html
│       │   └── js.html
│       ├── header.html
│       ├── head.html
│       ├── menu.html
│       └── terms.html
├── LICENSE
├── README.md
├── static/
│   └── favicon.ico
└── theme.toml

documentation の Directory structure にある通りだがざっくり,

みたいな構造になっている.

このうち archetypes/default.md は書きながら適宜便利そうなやつを追加していけば良さそうで,サイトの機能という意味では主に layouts/ を触っていくことになる.

layouts

layouts/_default/home.html

{{ define "main" }}
	{{ .Content }}
	<div class="the-posts">
		<ul class="post-list">
		{{ range site.RegularPages }}
			<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a> &mdash; {{ .Date | time.Format "02 January 2006"  }}</li>
			<!-- {{ .Summary }} -->
		{{ end }}
		</ul>
	</div>

	<div class="links">
		See <a href="/posts">all posts</a> or <a href="/tags">tags</a>.
	</div>
{{ end }}

を今は採用している.

テンプレートのややこしい所はあるがまあ最終的には見たままの動きではある

layouts/_default/list.html

デフォルトではこんなふうになっている.

{{ define "main" }}
  <h1>{{ .Title }}</h1>
  {{ .Content }}
  {{ range .Pages }}
    <h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
    {{ .Summary }}
  {{ end }}
{{ end }}

最初の時点からなんか色々思ったより表示されるな…?となるのはこいつの力,というのも…

layouts/tags/tag.terms.html.html

あんまりそれっぽいテンプレートがないのに色々表示される,とか,なぜかここの更新がこっちに反映されないとか,ここの更新がこっちにも影響してしまう…とかが色々出てくる. 見るべきは lookup order のドキュメンテーション.例えば,タグの一覧を示すページはここ を見て,layouts/tags/tag.terms.html.html というファイルを作ると,専用のテンプレートとして設定できる.

そんなファイルが存在しないうちからなんとなくそれっぽいものが表示されていたのは,lookup order の下の方に layouts/_default/list.html があるから.リスト化するやつはだいたいこれね,という感じでよしなに作られていたわけだ.

同様に個別のタグのページは例えば,layouts/tags/term.html.html

{{ define "main" }}
	<h2>Posts tagged with: {{ .Title }}</h2>
	{{ .Content }}
	<div>
		<ul class="article-list">
			{{ range .Pages }}
			{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
			{{ $dateHuman := .Date | time.Format "02 January 2006" }}
			<li>
				<a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a>
				<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
			</li>
			{{ end }}
		</ul>
	</div>
{{ end }}

のようにする.

Taxonomy

[taxonomies]
  tag = 'tags'

こんな感じで紐解きながらちょっとずついじりながら,が良さそう. しばらくは随時構造を少しずつ調整していくので,その都度ここに追記するかより細かい記事を投げていくかしていきたい.

tags: