以下では、YAMLの「インデントとスペース(タブ禁止、階層表現)」を、実務でつまずきやすい点に絞って体系的に解説します。
1) 基本原則(ここだけは必ず守る)
-
インデントは半角スペースのみを使います。タブは不可(先頭インデントにタブが混ざると解析エラーになります)。
-
インデントは「親よりも深い」ことが条件です。一般的には2スペースを1段として使うのが定番です(4でも可)。
-
同じレベルではインデント幅を揃える(2と4を混ぜない)。
-
先頭(トップレベル)はインデント無しから始めます。
良い例(2スペース固定):
悪い例(タブ混入・段ずれ):
2) 階層表現(マップとシーケンス)
YAMLの階層はインデントの深さで表現します。
2.1 マップ(辞書)
-
形式:
key: value -
ネストは子要素を1段深くします。
2.2 シーケンス(配列)
-
形式:
- 値(ハイフンの後に半角スペース必須) -
要素がスカラ(単純値)ならその行で完結、要素がオブジェクトなら次行以降を1段深く書きます。
スカラの配列:
オブジェクトの配列(「1要素=1オブジェクト」):
ありがちなミス(同じ要素内のキーがずれている):
同じ要素(同じダッシュの配下)に属するキーは同じ桁に揃えます。
3) コロンとハイフンのスペース規則
-
key:の後ろに半角スペース1つ置いてkey: valueとします(key:valueは避ける)。 -
シーケンスのハイフン
-の直後にも半角スペース1つが必要です(-valueは不可)。 -
コロンを縦に整列させる必要はありません(見た目を揃えても意味は変わりません)。
良い例:
4) ブロック・スカラー(複数行文字列)とインデント
複数行の文字列は |(リテラル:改行を保持)か >(フォールド:行折りたたみ)を使います。
ブロック内の各行は、親より1段深くインデントします。
改行を保持(|):
折りたたみ(>):
高度な指定(必要に応じて):
-
チョンピング(末尾改行の扱い):
|-(末尾改行を削除)、|+(末尾改行を保持) -
インデント指示子:
|2や>4のように数字でブロックのインデント基準を明示可能
5) 空行・コメント・タブの扱い
-
空行は可。階層には影響しません。
-
コメントは
#以降。インデントして書いても意味は変わりません。 -
タブはインデントには使用不可。ただし文字列の中身としては現れ得ます。必要ならダブルクォート内で
\tを使うのが安全です。
6) 実務でのチェックリスト
-
先頭インデントにタブが紛れていないか(エディタ設定で「タブ→スペース」を有効に)。
-
インデント幅を統一(2か4のどちらかに固定、同じレベルで混在しない)。
-
key: valueと- valueのスペースを守る。 -
配列要素内の複数キーは同じ桁に揃える。
-
複数行文字列は親より1段深くし、
|と>の違いを意識する。
7) まとめ(最小パターン集)
マップのネスト:
配列(スカラ):
配列(オブジェクト):
ブロック・スカラー:
この規則を守れば、YAMLの構造は常にインデントで一意に表現でき、パーサに正しく解釈されます。特に「タブ禁止」「同一レベルでのインデント幅統一」「ハイフンとコロン後のスペース」の3点を最優先で意識してください。
ChatGPT5 生成日:2025/09/04