発生した問題

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)

VSCodeのTraefik v2スキーマ表示

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"
}

fileMatchtraefik.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.jsonyaml.schemasでスキーマを明示的に指定する必要がある。