YAMLアンカーとエイリアス:設定ブロックの再利用

YAMLアンカー(&)とエイリアス(*)を使用して設定ブロックの繰り返しを避ける方法を学びます。マージキー(<<)、オーバーライドパターン、フォーマッターによるアンカー参照の処理を理解します。

YAML Features

詳細な説明

YAMLアンカーとエイリアス

YAMLはドキュメント内でコンテンツを再利用するための組み込みメカニズムを提供しています:アンカー&)は再利用可能なブロックを定義し、エイリアス*)はそのブロックを他の場所で参照します。この機能により設定ファイルの重複を排除できます。

基本的なアンカーとエイリアス

# アンカーを定義
defaults: &default_settings
  timeout: 30
  retries: 3
  log_level: info

# エイリアスで再利用
production:
  <<: *default_settings
  log_level: warn

staging:
  <<: *default_settings
  timeout: 60

&default_settings アンカーはブロックを再利用可能としてマークします。*default_settings エイリアスはそのブロックへの参照を挿入します。<< マージキーはアンカーされたマッピングを現在のマッピングにマージします。

マージの仕組み

<<: *alias を使用すると、エイリアスされたキーが現在のマッピングにマージされます。ローカルキーはマージされたキーより優先されます:

# 解決後:
production:
  timeout: 30      # アンカーから
  retries: 3       # アンカーから
  log_level: warn  # ローカルでオーバーライド

シーケンスアンカー

アンカーはシーケンス(リスト)でも機能します:

common_ports: &web_ports
  - 80
  - 443

service_a:
  ports: *web_ports

service_b:
  ports: *web_ports

複数マージ

1つのマッピングに複数のアンカーをマージできます:

base: &base
  timeout: 30

logging: &logging
  log_level: info
  log_format: json

service:
  <<: [*base, *logging]
  name: my-service

フォーマッターの考慮事項

アンカーとエイリアスを含むYAMLをフォーマットする際:

  • アンカー名は書かれた通りに正確に保持されるべき
  • アンカーされたブロックのインデントは一貫性を保つ必要がある
  • 順序が重要 — アンカーはそれを参照するエイリアスより前に出現しなければならない
  • 一部のフォーマッターはエイリアスを展開(完全なコンテンツに解決)するオプションを提供する。デバッグに便利だがファイルサイズが増加する

ユースケース

アンカーとエイリアスはDocker Composeファイルでサービス間の設定共有、CI/CDパイプラインでジョブテンプレートの再利用、Ansibleでプレイブック間の変数共有に広く使用されています。フォーマッターがアンカーをどのように処理するかを理解することで、フォーマット後も共有設定ブロックが正しく保たれることが保証されます。

試してみる — YAML Formatter & Validator

フルツールを開く