ガイド
よくあるYAMLエラー
解析失敗のほぼすべては6つのミスが原因です。それぞれの意味と、正確な修正方法を解説します。
著者 yamltojsonfree · 公開日 · 更新日
YAMLのエラーが読みにくい理由
YAMLはインデントから構造を組み立てるため、何かがおかしくなったときパーサーは何がおかしいのかを判断できないことが多く、構造が意味をなさなくなったことしか分かりません。だから12行目の閉じられていない括弧が、50行目の「不正なインデント」として報告されるのが日常茶飯事なのです。パーサーは来るはずのない閉じ記号を探して行を読み続け、ずっと後になってようやく諦めます。
以下のエラーは、パーサーが表示するメッセージではなく、本当の原因ごとに整理しています。自動で診断してほしい場合は、ドキュメントをYAMLバリデーターかYAML→JSON変換ツールに貼り付けてください — これらのエラーはそれぞれ本来の姿で検出され、行、平易な説明、修正案が表示されます。
6つのエラーの詳細
最もよくある6つのYAML構文エラーは次のとおりです:(1) インデントに使われたタブ、(2) コロンを含む引用符なしの値、(3) 閉じられていない角括弧・波括弧・引用符、(4) 重複キー、(5) 存在しないアンカーへのエイリアス、(6) 揃っていない兄弟キーのインデント。
1. インデントにタブ文字が使われている
原因: タブの幅はエディタによって曖昧なため、YAMLはインデントへのタブの使用を完全に禁止しています。
修正: すべてのタブをスペースに置き換えます — 1階層あたり2つが慣例です。多くのエディタは「インデントをスペースに変換」でこれを行えます。
2. 引用符のない値にコロンが含まれている
原因: title: foo: bar は曖昧です — パーサーはどのコロンがキーと値を区切るのか判断できません。
修正: 値を引用符で囲みます:title: 'foo: bar'。
3. 角括弧、波括弧、引用符が閉じられていない
原因: [80, 443] のようなフローコレクションや引用符付き文字列は、同じ論理行で閉じる必要があります。多くのパーサーはこれを何行も後でインデントエラーとして報告します。
修正: 閉じ記号を追加するか、値を1行1項目のブロックスタイルに書き直します。
4. 同じキーが2回出現する
原因: YAMLのマッピングは一意なキーを要求し、JSONオブジェクトも同様です。黙って最後の値を採用すると本物のバグが隠れてしまいます。
修正: 重複をリネームするか削除します — サブキーのつもりだったなら1階層深くインデントします。
5. 存在しないアンカーをエイリアスが指している
原因: *name は &name で定義されたアンカーを参照します。アンカーはそれを使うエイリアスよりドキュメント内で先に現れる必要があります。
修正: 先にアンカーを定義し、綴りを確認します — アンカー名は大文字と小文字を区別します。
6. 兄弟キーのインデントが揃っていない
原因: 同じブロック内のすべてのキーは同じインデントに置く必要があります。ある行が2スペースで次の行が3スペースだと、ブロックはそこで途切れます。
修正: すべての兄弟キーのインデントを揃えます。
2つの修正例、前と後
最も多く遭遇する2つのエラーを、壊れたYAMLと修正後の形で並べて示します。
値の中の引用符なしコロン
2つ目のコロンが行を曖昧にしています。値全体を引用符で囲めば解決します。
エラー
title: Deploy: production
owner: platform team修正後
title: "Deploy: production"
owner: platform team揃っていない兄弟キーのインデント
「ports」が3スペースで兄弟が2スペースのため、ブロックが途中で終わってしまいます。
エラー
server:
host: localhost
ports:
- 8080修正後
server:
host: localhost
ports:
- 8080YAMLは有効なのに間違っているとき
ドキュメントは完璧に解析できても、意図と違う意味になりうる。典型例が country: NO で、どのバージョンでも有効なYAMLです — しかしYAML 1.2では文字列 "NO"、YAML 1.1では真偽値 false として読まれます。この種の静かな型変化はすべてYAML 1.1と1.2の違いのガイドで扱っています。
参考資料
- YAML 1.2.2仕様 — インデント、フローコレクション、アンカー、一意なキーの規則
- YAML 1.2.2 §6.1 インデントのスペース — タブが許されない理由
- PyYAMLドキュメント — 多くのPythonユーザーが目にするエラーメッセージ
- js-yaml — このサイトのツールの背後にあるパーサー
今すぐYAMLを修正する
このページのすべてのエラーは、このサイトの無料ツールが正確な行と修正案付きで検出します。アップロードは一切なく、すべてブラウザ内で実行されます。