Skip to content
Latchkey

YAML anchorとは? YAMLブロックの再利用の解説

YAML anchorはYAMLのブロックに名前を付け、aliasを介して別の場所で再利用できるようにするもので、同じ設定を繰り返すのを避けられます。

anchorはYAMLの"繰り返すな"への答えです。設定の一部を一度定義し、それに名前を付け、他の場所でその名前を参照できます。繰り返しの多いパイプライン設定 - 共有されるjob設定や繰り返されるstepブロック - に対して、anchorは多くの重複を削減できますが、すべてのツールがサポートしているわけではありません。

anchorとalias

値の上にアンパサンドと名前を付けてanchorを定義し、後でアスタリスクと同じ名前でそれを参照します。YAMLが解析されるとき、aliasはanchorされた値に置き換えられます。これにより、1つの定義が同じファイル内の多くの場所に供給できます。

merge key

merge key(二重の小なり記号の特別なキー)を使うと、anchorされたmapのすべてのフィールドを別のmapに引き込み、フィールドを上書きしたり追加したりできます。これが、設定のベースブロックを構築し、すべてのフィールドをコピー&ペーストせずにそのバリエーションを作る方法です。

anchorはファイルローカル

anchorは、それを定義する単一のドキュメント内にのみ存在します。別々のファイルをまたいでanchorを参照することはできず、parserはロード時にaliasを展開するため、設定を利用するツールはanchorを決して見ません - 完全に展開された結果だけを見ます。

CI設定におけるanchor

GitLab CIとCircleCIは、jobやstepの定義を共有するためにYAML anchorをサポートします。対照的にGitHub Actionsはworkflowファイルでanchorを展開しません - 代わりにcomposite actionやreusable workflowを使います。どのプラットフォームがサポートするかを知っておくと、"anchorが無視された"という混乱する驚きを防げます。

Anchor and merge key in GitLab CI
# GitLab CI reusing a block with an anchor
.default_job: &default_job
  image: node:20
  tags: [docker]

build:
  <<: *default_job
  script: npm run build

いつ使うか

anchorは、サポートするプラットフォーム上で1つのファイル内で本当に繰り返される設定に最適です。ファイルをまたいだ再利用やGitHub Actionsでは、anchorより強力で移植性の高いreusable workflowやcomposite actionを優先してください。

重要なポイント

  • YAML anchorはブロックに名前を付け、別の場所のaliasがそれを再利用できるようにして、重複を減らします。
  • merge keyを使うと、anchorされたmapを継承し、特定のフィールドを上書きできます。
  • GitLab CIとCircleCIはanchorをサポートしますが、GitHub Actionsはサポートしないため、そこではreusable workflowを使います。

関連ガイド