よくあるYAML構文エラーとその修正方法

インデントミス、タブ文字、無効な文字、クォートされていない特殊値、重複キーなど、最も一般的なYAML構文エラーを特定して修正します。例と解決策を含みます。

Validation

詳細な説明

よくあるYAML構文エラー

YAMLは空白への依存と柔軟な型システムにより、微妙なエラーが発生しやすくなっています。最も一般的な間違いを理解することで、YAMLファイルを素早くデバッグできます。

1. タブ文字

YAMLはインデントにタブ文字を禁止しています。これが最も一般的なエラーです:

# エラー:インデントにタブを使用
server:
	host: localhost    # タブ文字!

修正: すべてのタブをスペースに置き換えます。ほとんどのエディタはTabキーを押すとスペースを挿入するように設定できます。

2. 一貫しないインデント

同じレベルのキーは同じインデントレベルでなければなりません:

# エラー:一貫しないインデント
server:
  host: localhost
   port: 8080        # 2スペースではなく3スペース

修正: 同じネストレベルのすべてのキーが同一のインデントを使用していることを確認します。

3. クォートされていない特殊値

YAMLは特定の文字列を非文字列型として自動解釈します:

# これらは文字列ではありません!
country: NO          # ブールfalseとしてパースされる
version: 1.0        # floatとしてパースされ、文字列"1.0"ではない
port: 0800          # 8進数としてパースされる
time: 12:30         # 60進法(base-60)の数値としてパースされる

修正: 文字列のままにすべき値をクォートします:country: "NO"version: "1.0"

4. コロン後のスペース欠落

YAMLはキーバリューペアでコロンの後にスペースを要求します:

# エラー:コロンの後にスペースなし
host:localhost

修正: 常にスペースを含めます:host: localhost

5. 値内のエスケープされていない特殊文字

値内のコロン、ハッシュ記号、ブラケットにはクォートが必要です:

# エラー:値内のコロン
message: Error: file not found
url: http://example.com    # これは実際には動作するが...
regex: [a-z]+              # シーケンスとしてパースされる!

修正: 特殊文字を含む値をクォートします:message: "Error: file not found"

6. 不正確なリストインデント

リスト項目は一貫してインデントされなければなりません:

# エラー:間違ったレベルのリスト項目
items:
- first          # 'items'の下にインデントされるべき
  - second       # 最初の項目と一貫していない

7. 重複キー

YAML仕様では技術的には有効ですが、重複キーは予測不能な動作を引き起こします:

# 悪い例:重複キー
database:
  host: db1.example.com
  host: db2.example.com    # 最初のものを静かに上書きする

良いYAMLバリデーターはパーサーが受け入れる場合でも重複キーについて警告します。

ユースケース

YAML構文エラー検出は設定駆動型ワークフローにとって重要です。Kubernetesマニフェストの1つのインデントエラーがデプロイメントを妨げ、CI設定のクォートされていないブール値が予期しない動作を引き起こす可能性があります。コミット前にYAMLをバリデーターに通すことでこれらの問題を早期にキャッチし、デバッグ時間を節約します。

試してみる — YAML Formatter & Validator

フルツールを開く