発生した問題
VSCodeのYAML
拡張機能を利用してTraefikの設定ファイルtraefik.ymlを編集していると、以下の設定に対してエラーが表示された。
log:
noColor: true
Property noColor is not allowed.yaml-schema: Traefik v2(513)

noColorはログ出力時の色付けを無効化する設定である。Traefikの公式ドキュメントには存在する設定であるにもかかわらず、エラーとして表示されてしまう。
原因
エディタ上部に表示されるスキーマ名を確認すると、以下のように表示されている。
Traefik v2 - Traefik v2 YAML configuration file (traefik-v2.json)

YAML拡張機能はSchemaStore
のカタログを参照し、ファイル名からスキーマを自動判定する。SchemaStoreのカタログではtraefik.ymlというファイル名に対して以下のように登録されている。
{
"name": "Traefik v2",
"description": "Traefik v2 YAML configuration file",
"fileMatch": ["traefik.yml", "traefik.yaml"],
"url": "https://www.schemastore.org/traefik-v2.json"
}
fileMatchにtraefik.ymlが登録されているのはTraefik v2のスキーマのみで、Traefik v3のスキーマにはfileMatchが設定されていない。そのためtraefik.ymlというファイル名からは自動的にTraefik v2のスキーマが選択されてしまう。
noColorはTraefik v3から追加された設定であり、v2のスキーマには定義されていないため、存在しないプロパティとしてエラーになっていた。
対応方法
YAML拡張機能はファイル名とスキーマの対応をVSCodeのsettings.jsonで上書きできる。yaml.schemasに対象ファイルとスキーマのURLを指定する。プロジェクト単位で設定したい場合は.vscode/settings.jsonに記述する。
{
"yaml.schemas": {
"https://www.schemastore.org/traefik-v3.json": "traefik.yml"
}
}
設定後、traefik.ymlを開き直すとエディタ上部のスキーマ表示が以下のように変わり、noColorのエラーが解消される。
Traefik v3 - Traefik v3 YAML configuration file (traefik-v3.json)
まとめ
traefik.ymlはファイル名だけではTraefik v2のスキーマが選択されるため、v3の設定を使う場合はsettings.jsonのyaml.schemasでスキーマを明示的に指定する必要がある。
