Hugo Archetypes で日付付きファイル名から title を生成する方法
このドキュメントは、Hugo の archetypes で YYYY-MM-DD-title.md 形式のファイル名から 日付を除外した title を自動生成する方法 と、Hugo が提供する case(文字変換)の種類をまとめたものです。
1. 前提
ファイル名の形式
content/posts/2026-01-09-regex-test.md
目的
- frontmatter の
dateには日付を保持する titleからは日付を除外する- 表示用 title の case を制御する
2. 基本となる archetypes 設定
+++
date = '{{ .Date }}'
draft = true
title = '{{ $name := replaceRE `^[0-9]{4}-[0-9]{2}-[0-9]{2}-` `` .File.ContentBaseName }}{{ replace $name `-` ` ` | title }}'
+++
3. 正規表現の解説
使用している正規表現
^[0-9]{4}-[0-9]{2}-[0-9]{2}-
意味
| 部分 | 説明 |
|---|---|
^ | 文字列の先頭 |
[0-9]{4} | 年(4桁) |
- | ハイフン |
[0-9]{2} | 月 |
- | ハイフン |
[0-9]{2} | 日 |
- | 日付直後の区切り |
4. パイプ処理の流れ
.File.ContentBaseName
→ replaceRE(日付を除外)
→ replace(ハイフンをスペースに)
→ case 変換
5. Hugo の case 変換一覧
title(Title Case)
| title
regex test → Regex Test
- 英語圏の見出しで一般的
- 技術記事・ドキュメント向き
humanize
| humanize
regex-test → Regex test
- 先頭のみ大文字
- 日記・メモ向き
lower
| lower
Regex Test → regex test
- 完全に小文字
- 私的メモ向き
upper
| upper
regex test → REGEX TEST
- 強調・分類用途
変換なし
{{ replace $name `-` ` ` }}
regex test
- 入力に忠実
- 最も素朴
6. 設計思想メモ
- date はデータ
- title は表示
- ファイル名は構造
- 表示はあとから何度でも変えられる
この分離により、
- 並び順が安定する
- URL が壊れない
- 表示ルールを一括変更できる
7. まとめ
- Hugo archetypes では正規表現を使うと安全
- TOML + template ではバッククォートが安定
- case 変換は後から簡単に変更可能
- Title Case は「少し公的」で読み返しやすい