1
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?

無料ユーザも使える!GitLab 18.6 の CI/CD 新機能 ─ parallel:matrix でジョブ依存関係が劇的にスッキリ

1
Posted at

無料ユーザも使える!GitLab 18.6 の CI/CD 新機能 ─ parallel:matrix でジョブ依存関係が劇的にスッキリ

はじめに

2025年11月20日にリリースされた GitLab 18.6 には、無料プランのユーザもすぐに使える CI/CD 機能の強化が含まれています。

今回は、その中でも特に嬉しいアップデートである needs:parallel:matrix における動的ジョブ依存関係のサポート にフォーカスして解説します。複数プラットフォーム・複数環境向けのビルドやデプロイパイプラインを書いている方には、ぜひ知っておいてほしい機能です。


対象バージョンとプラン

項目 内容
対象バージョン GitLab 18.6(2025年11月20日リリース)
対象プラン Free / Premium / Ultimate(無料ユーザも使えます!)
利用環境 GitLab.com / GitLab Self-Managed / GitLab Dedicated
ステータス GitLab 18.6 で導入

これまでの課題

parallel:matrix を使うと、複数の変数の組み合わせで並列ジョブを簡単に生成できます。しかし、後続ジョブが前のジョブに needs で依存しようとすると、全組み合わせを手動で列挙しなければなりませんでした。

たとえば、PROVIDER: [aws, gcp]STACK: [monitoring, app1, app2] の組み合わせ(6通り)すべてについて、個別に依存関係を記述する必要があったのです。

組み合わせが増えるほど設定は複雑化し、ミスが起きやすくなっていました。


GitLab 18.6 の新機能: マトリクス式 $[[ matrix.VARIABLE ]]

GitLab 18.6 では、マトリクス式 と呼ばれる新しい構文 $[[ matrix.VARIABLE ]] が導入されました。

これにより、「自分自身が持つ parallel:matrix の変数値を、依存先の指定にそのまま使う」という 1対1のダイナミックなジョブ依存関係 を宣言的に書けるようになりました。

構文

needs:
  - job: some-job
    parallel:
      matrix:
        - VARIABLE: ['$[[ matrix.VARIABLE ]]']

具体例: ビルドとテストを 1対1 で対応させる

linux:build:
  stage: build
  script: echo "Building..."
  parallel:
    matrix:
      - PROVIDER: [aws, gcp]
        STACK: [monitoring, app1, app2]

linux:test:
  stage: test
  script: echo "Testing..."
  parallel:
    matrix:
      - PROVIDER: [aws, gcp]
        STACK: [monitoring, app1, app2]
  needs:
    - job: linux:build
      parallel:
        matrix:
          - PROVIDER: ['$[[ matrix.PROVIDER ]]']
            STACK: ['$[[ matrix.STACK ]]']

このように書くだけで、GitLab が自動的に以下の依存関係を解決してくれます。

  • linux:test: [aws, monitoring]linux:build: [aws, monitoring] に依存
  • linux:test: [aws, app1]linux:build: [aws, app1] に依存
  • linux:test: [gcp, app2]linux:build: [gcp, app2] に依存
  • ...(全6通り自動解決)

全組み合わせを手書きする必要がなくなります。


YAML アンカーと組み合わせてさらにスッキリ

YAML アンカー(& / *)を使えば、parallel:matrix の定義を使い回すことができます。

stages:
  - compile
  - test
  - deploy

.build_matrix: &build_matrix
  parallel:
    matrix:
      - OS: ["ubuntu", "alpine"]
        ARCH: ["amd64", "arm64"]
        VARIANT: ["slim", "full"]

compile_binary:
  stage: compile
  script:
    - echo "Compiling for $OS-$ARCH-$VARIANT"
  <<: *build_matrix

integration_test:
  stage: test
  script:
    - echo "Testing $OS-$ARCH-$VARIANT"
  <<: *build_matrix
  needs:
    - job: compile_binary
      parallel:
        matrix:
          - OS: ['$[[ matrix.OS ]]']
            ARCH: ['$[[ matrix.ARCH ]]']
            VARIANT: ['$[[ matrix.VARIANT ]]']

deploy_artifact:
  stage: deploy
  script:
    - echo "Deploying $OS-$ARCH-$VARIANT"
  <<: *build_matrix
  needs:
    - job: integration_test
      parallel:
        matrix:
          - OS: ['$[[ matrix.OS ]]']
            ARCH: ['$[[ matrix.ARCH ]]']
            VARIANT: ['$[[ matrix.VARIANT ]]']

この設定では、2 OS × 2 ARCH × 2 VARIANT = 8通り × 3ステージ = 計24ジョブ が生成され、それぞれのステージ間で 1対1 の依存関係が自動的に設定されます。


一部の値のみに絞った依存関係も可能

マトリクス式は、固定値と組み合わせることもできます。

stages:
  - prepare
  - build

.full_matrix: &full_matrix
  parallel:
    matrix:
      - PLATFORM: ["linux", "windows", "macos"]
        VERSION: ["16", "18", "20"]

.platform_only: &platform_only
  parallel:
    matrix:
      - PLATFORM: ["linux", "windows", "macos"]

prepare_env:
  stage: prepare
  script:
    - echo "Preparing $PLATFORM with Node.js $VERSION"
  <<: *full_matrix

build_project:
  stage: build
  script:
    - echo "Building on $PLATFORM"
  <<: *platform_only
  needs:
    - job: prepare_env
      parallel:
        matrix:
          - PLATFORM: ['$[[ matrix.PLATFORM ]]']
            VERSION: ["18"]  # Node.js 18 の準備ジョブにだけ依存

この例では:

  • prepare_envPLATFORM × VERSION = 3 × 3 = 9ジョブ 生成されます
  • build_projectPLATFORM のみ = 3ジョブ 生成されます
  • build_project ジョブは、自分と同じ PLATFORM かつ VERSION: "18"prepare_env ジョブにだけ依存します

こうすることで、プラットフォームは動的に対応させながら、バージョンは特定のものだけに絞るといった柔軟な依存関係が組めます。


注意点(現時点での制約)

現時点での制約として、以下の点に注意してください。

  • コンパイル時のみ解決: 変数の展開はパイプライン生成時に行われます。ジョブの実行中には解決されません。
  • 文字列置換のみ: 複雑なロジックや変換はできません。
  • マトリクス識別子のみ参照可能: CI/CD 変数や inputs は参照できません。
  • 自ジョブのマトリクスのみ参照可能: $[[ matrix.VARIABLE ]] で参照できるのは、その式を書いたジョブ自身の parallel:matrix 設定の変数だけです。他のジョブのマトリクス変数は参照できません。
  • 将来の仕様変更に注意: 新しい機能のため、今後のバージョンで仕様が変わる可能性があります。実装の詳細や議論は issue 423553 で確認できます。

まとめ

GitLab 18.6 の $[[ matrix.VARIABLE ]] 構文により、parallel:matrix を使ったパイプラインの記述が大幅にシンプルになりました。

  • 組み合わせの全列挙が不要になる
  • YAML アンカーと組み合わせて DRY な設定が書ける
  • 無料プランのユーザも今すぐ使える

マルチプラットフォームビルドやマルチ環境デプロイを行っているチームは、ぜひ試してみてください。GitLab CI/CD にはまだまだ便利な機能がたくさんあります。ぜひ公式ドキュメントも合わせてチェックして、パイプラインをさらに磨いていきましょう。


参考リンク

1
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
1
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?