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でプレイブック間の変数共有に広く使用されています。フォーマッターがアンカーをどのように処理するかを理解することで、フォーマット後も共有設定ブロックが正しく保たれることが保証されます。