Q.

hugoの設定ファイルやmdファイルのフロントマターで使われるyml形式の文法について教えてください。““または’‘でくくる必要がある時、[” “,” “]を行でわけるときの - までの空白数、かならずUTF-8にしなければならないのかなどの項目についても入れてください。


A.

了解です!
まとめると、次のような内容を求めている感じですよね?

  • Hugoの設定ファイル(config.yml)やMarkdownのフロントマターで使われるYAML形式の基本文法
  • ““や’‘でくくる必要があるケース
  • リスト(配列)を書くときの行頭の「-」までの空白数ルール
  • ファイルの文字コード(UTF-8必須か?)

きっちり体系的に整理してお答えします!


Hugoで使われるYAML形式(yml)の文法まとめ

1. 基本的な書き方

  • キーと値をコロン(:)で区切る
  • インデント(字下げ)はスペースで行うタブ不可
  • インデントは通常半角スペース2個(4個でもOKだが統一すべき)
  • # はコメント

title: "私のブログ"
author: "山田太郎"

2. ““または’‘で囲む必要がある場合

【囲まなくてもよいケース】

  • 英数字だけの単語や普通の文章
  • 特別な記号を含まない場合
title: 私のブログ

【囲むべきケース】

ケース理由・例
先頭に @, :, {} など特殊記号があるとき例:url: "@example.com"
コロン : を含むとき(キーと区別できないから)例:description: "Good: Great site"
改行を含む長文にしたいとき後述の方法あり
空白だけの値や、空白で始まる文字列例:note: " この行は空白から始まる"
数字だけだけど文字列扱いにしたいとき例:zipcode: "00123"(数値計算させたくない)
yes, no, on, off, true, false を文字列として使いたいとき例:status: "on"

3. 配列(リスト)の書き方と空白ルール

配列は行頭に**「-」(ハイフンと半角スペース)**で表現します。

基本形

tags:
  - 音楽
  - 旅行
  - プログラミング

ポイント

  • 親キーからインデント2文字分スペースをあける
  • 「-」の後ろにも1つ半角スペースを入れる

つまり、

(親キー)<改行>
(スペース2個)- 項目
(スペース2個)- 項目
(スペース2個)- 項目

となります!


長い配列項目を [” “, " “, " “] で書く場合は1行でまとめる。

例(短縮版)

tags: ["音楽", "旅行", "プログラミング"]
  • この場合、改行せずに1行で書く。
  • 改行したいなら「-」を使う方法(前述)をとる。

4. ファイルの文字コード

  • UTF-8(BOMなし)推奨
    • HugoもYAML仕様もUTF-8前提
    • BOM付きUTF-8だと読み取りエラーになるテーマやパーサーもある

だから:

  • ファイル(config.ymlも各mdファイルも)は
    • 保存形式:UTF-8(BOMなし)
    • 改行コード:LF(Unix形式)

がベストです。


まとめ表

項目ルール
インデントスペース2個(または4個だが統一)
"” / ‘‘の必要性特殊記号、コロン、空白、true/falseを文字列扱いなど
リストの「-」親キーからスペース2個、-の後ろにスペース1個
文字コードUTF-8(BOMなし)
改行コードLF(Unix形式)

もしよければ、さらに

  • 改行を含む長文をうまく書く方法
  • 複雑な入れ子構造(オブジェクトの中にリスト、そのリストの中にオブジェクト)
  • 安全なエスケープ(クオートの中にクオートを入れたい時)

なども、もう少し深掘りして紹介できます!

続きも見たいですか?✨(簡単な実例もセットでできます)


Q.

○○:
○○: 〇〇
○○: 〇〇
というのはどういう場合ですか?


A.

いい質問ですね!
その形(つまり、親キーの下にさらにキーと値が並んでいる)は、

「マップ(辞書型オブジェクト)」 を表現している場合です!


説明します

YAMLでは

親キー:
  子キー1: 値1
  子キー2: 値2
  子キー3: 値3

という形は、

「親キーに紐づくオブジェクト」(マップ、辞書、連想配列)がある
という意味になります。

つまり、
「親の下に"子キー: 子バリュー"が並んでいる」状態ですね。


実例で見てみましょう

たとえば:

author:
  name: 山田太郎
  email: yamada@example.com
  twitter: yamadataro

これは、

  • author という親キーの下に
    • name → “山田太郎”
    • email → “yamada@example.com
    • twitter → “yamada taro”

という情報のセットがくっついている、という意味です。

この場合、Hugoなどで呼び出すときは、

{{ .Params.author.name }}

みたいに「ドットでつないで」取り出せます。


もう少しイメージしやすくまとめると…

見た目意味
○○:(親)これからグループが始まるよ
○○: ○○(子たち、スペース2個)この親に属する設定項目だよ

さらに応用例

たとえば 複数のマップのリスト にするとこうなります。

authors:
  - name: 山田太郎
    role: ライター
  - name: 佐藤花子
    role: イラストレーター

これは:

  • authors という親に
  • 複数の人物情報(nameとrole) が入っている

という意味になります。


まとめると

あなたが書いた形

○○:
  ○○: 〇〇
  ○○: 〇〇

は、

親子関係を持つデータ(=オブジェクト)を表す時に使います!


すごく良いところに気づきましたね。
もしよければ、さらに

  • 「リストとオブジェクトが混ざった複雑な例」
  • 「これをHugoのテンプレートからどう呼び出すか」

まで、詳しく解説することもできます!

興味ありますか?✨


Q.

こういった空白インデントによるリスト化は、空白の改行によってどうなりますか?


A.

いい質問ですね!
とても大事なポイントなので、丁寧に整理して答えますね。


空白インデントによるリスト化と、空白の「改行(空行)」の関係

基本ルール

  • YAMLでは**インデント(スペース)**が、**構造(リスト、オブジェクト、ネスト)**を決めます
  • **空白の改行(空行)**は、構造には影響しません
    • つまり、空行があってもリストやオブジェクトのまとまりは壊れない
  • ただし、見やすさ・書きやすさのために空行を使うのはアリです

具体例で説明

たとえばこう書いたとします:

tags:
  - 音楽
  - 旅行

  - プログラミング

これはOKです。
ちゃんと「tags」というリストに、“音楽”・“旅行”・“プログラミング"が入っています。

  • - 音楽
  • - 旅行
  • (空行が1行)
  • - プログラミング

→ 空行は無視されるので問題なし。


同じく、オブジェクトでも:

author:
  name: 山田太郎

  email: yamada@example.com
  twitter: yamadataro

これもOK。

  • authorの中に、nameemailtwitterがちゃんとセットされます。
  • 空行はスルーされるだけ。

逆に、空白インデントが間違っている場合

問題になるのは空行じゃなくて、「インデントミス」です。

たとえば:

tags:
  - 音楽
   - 旅行
  - プログラミング

みたいに、

  • 旅行のところだけスペースがズレている
    (ここでは- 旅行の前にスペースが3個になってしまっている)

→ これはエラー(パースできない)になります!


ポイントまとめ

要素影響備考
空白インデント絶対に統一するべきリスト・オブジェクトの構造決定
空白改行影響しない(無視される)読みやすくするために使ってOK

【注意すべき例外】

  • インデントレベルが変わる空行のあとに、突然違うレベルから書き始めるとエラーになることがあります
    • でもこれは普通に正しいインデントを守っていれば心配ありません

まとめイメージ

✅ 空白改行 → 無視される(安全)
✅ 空白インデント → 命(ズレるとアウト)


もしもっと具体的に、

  • 空白行を意図的に使った「見やすいYAML設計」
  • Hugoの設定(例:メニュー定義)での空白行の使い方

みたいな「実戦パターン」も知りたいなら、続き教えますね!

興味ありますか?🌟