よくあるYAML構文エラーとその修正方法
インデントミス、タブ文字、無効な文字、クォートされていない特殊値、重複キーなど、最も一般的なYAML構文エラーを特定して修正します。例と解決策を含みます。
詳細な説明
よくある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をバリデーターに通すことでこれらの問題を早期にキャッチし、デバッグ時間を節約します。