3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CircleCI ダイナミックコンフィグと ytt で実現する柔軟な CI ワークフロー構築

Last updated at Posted at 2026-01-06

株式会社ブレインパッド プロダクトユニットの岡です。

弊社は「データ活用の促進を通じて持続可能な未来をつくる」をミッションに、
データ分析支援やSaaSプロダクトの提供を通じて、企業の「データ活用の日常化」を推進しております。

私は、SaaSプロダクトを開発・提供する「プロダクト・サービス」部門に所属し、
企業のマーケティング活動をデータで支援する「Rtoaster GenAI」の開発を担当しております。

はじめに

CircleCI を利用していて、「サービスごとにビルド・デプロイ手順や実行条件が異なり、
共通設定では管理しづらい」「パラメータに応じてワークフローを動的に生成したい」といった場面に遭遇したことはないでしょうか。標準の config.yml だけでは、冗長な記述が増えたり、複雑な条件分岐の管理が困難になることがあります。

本記事では、CircleCI の ダイナミックコンフィグ と YAML テンプレートエンジンである ytt を組み合わせ、柔軟でメンテナンス性の高い CI ワークフローを構築する方法を解説します。

対象読者

  • CircleCI の設定ファイルをより柔軟に管理したい
  • モノレポ構成での CI 最適化を検討している
  • YAML の重複記述を減らし、テンプレート化したい

ダイナミックコンフィグとは

CircleCI のダイナミックコンフィグ(Dynamic Configuration)は、CI の実行中に動的に設定ファイル(config.yml)を生成し、その設定に基づいて後続のジョブを継続実行する機能です。
これにより、Git の差分に応じたジョブの出し分けや、外部ファイルからのパラメータ注入によるワークフローの動的生成が可能になります。
https://circleci.com/docs/guides/orchestrate/dynamic-config/

ytt とは

ytt (YAML Templating Tool) は、Carvel プロジェクトが提供する YAML 専用のテンプレートエンジンです。
YAML 内でループ、条件分岐、関数の定義などが記述できます。
https://carvel.dev/ytt/

実装

今回の実装では、以下の 3 つのファイルを使用します。

  1. config.yml: セットアップ用の設定(ダイナミックコンフィグの起点)
  2. template.yml: ytt を用いたワークフローのテンプレート
  3. values.yml: 各ジョブに注入するパラメータ定義

1. セットアップ設定 (config.yml)

まず、setup: true を指定してダイナミックコンフィグを有効化します。このジョブの中で ytt を実行し、生成された設定ファイルでワークフローを継続(continuation)させます。

version: 2.1

setup: true

orbs:
  continuation: circleci/continuation@2.0.1

jobs:
  setup:
    docker:
      - image: alpine:3.18
    steps:
      - checkout
      - run:
          name: Install ytt
          command: |
            wget -qO- https://github.com/carvel-dev/ytt/releases/latest/download/ytt-linux-amd64 > /usr/local/bin/ytt
            chmod +x /usr/local/bin/ytt
      - run:
          name: Generate and continue config
          command: |
            ytt -f .circleci/template.yml -f .circleci/values.yml > .circleci/generated_config.yml
      - continuation/continue:
          configuration_path: .circleci/generated_config.yml

2. パラメータ定義 (values.yml)

#@data/values
---
jobs:
  - app_name: "app"
    file_name: "app_1.yml"
  - app_name: "app1"
    file_name: "app_2.yml"

3. テンプレートの設定 (template.yml)

#@ load("@ytt:data", "data")
version: 2.1

# ... エグゼキューターやジョブの定義 ...

workflows:
  build-and-deploy-dev:
    jobs:
      #@ for i, job in enumerate(data.values.jobs):
      -  #@ {"build-" + job.app_name: {"environment": "dev", "deploy_name": job.app_name, "file_name": job.file_name}}
      #@ end# ワークフローの動作

この構成で CI を実行すると、以下のプロセスが走ります。

  1. Setup Job: config.yml が読み込まれ、ytt がインストールされる
  2. Generation: ytttemplate.ymlvalues.yml をマージし、appapp1 の両方のビルドジョブを含む .circleci/generated_config.yml を出力する
  3. Continuation: circleci/continuation Orb によって、生成された設定ファイルに基づいた新しいワークフローが開始される

まとめ

CircleCI のダイナミックコンフィグと ytt を組み合わせることで、静的な YAML では難しかった柔軟な設定管理が可能になります。

ポイントは以下の通りです。

  • ダイナミックコンフィグ: 実行時に設定を生成し、後続に引き継ぐ
  • ytt: YAML 構造を保ったままループや条件分岐でテンプレート化する
  • 設定の分離: ロジック(template)とデータ(values)を分けることで、メンテナンス性が向上する
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?