パイプラインとバージョン 2.1 の設定ファイルを導入して以来、私たちのチームは構成のしやすさ、柔軟性、効率性を向上させる機能の開発に取り組んでおり、その一環として Orbs設定ファイルの再利用パイプライン変数といった機能に加え、ステータスの表示やビルドの修正を効率化する新しい UIをリリースしてきました。そしてこのたび、新たにマトリックス ジョブも追加されました。

マトリックス ジョブとは

マトリックス ジョブは、複雑なソフトウェアを簡単に構成できる開発者の秘密兵器です。数行の設定ファイルを記述するだけで、単一のテストを包括的なテスト スイートに、1 つのタスクを関連作業の並列処理に変更できます。今回、CircleCI のワークフロー構文でマトリックスがサポートされました。CircleCI のマトリックス ジョブは、既にサポートされているパラメーター化ジョブと併用できるため、幅広いユースケースに対応できるという独自のメリットがあります。

たとえば、広く使用されているオープンソースの JavaScript ライブラリを開発しているとしましょう。そして、新しいバージョンのライブラリをビルドしてリリースする前に、複数のバージョンの Node.js (10 ~ 13) でコードをテストし、Linux と macOS の両方で動作することを確認したいとします。この場合、テストケースは 2 次元の「マトリックス」になります。

このケースを CircleCI で表現するには、まず 2 つのオペレーティングシステムを表現する Executor を定義します。次に、test というパラメーター化ジョブを作成して、パラメーターをマトリックスの各次元に対応させる必要があります。

version: 2.1

executors:
  linux:
    docker:
      - image: cimg/base:2020.01
  macos:
    macos:
      xcode: 11.4

orbs:
  node: circleci/node@2.0.0

jobs:
  test:
    parameters:
      os:
        type: executor
      node-version:
        type: string
    executor: << parameters.os >>
    steps:
      - checkout
      - node/install:
          node-version: << parameters.node-version >>
          install-yarn: true
      - run: yarn test

最後に、マトリックスを使用して、このジョブを呼び出すワークフローを作成します。

workflows:
  all-tests:
    jobs:
      - test:
          matrix:
            parameters:
              os: [linux, macos]
              node-version: ["10.9.0", "11.9.0", "12.9.1", "13.9.0"]

この設定ファイルをプッシュしてパイプラインの結果を確認してみると、実際に 8 つのジョブのワークフローが作成され、すべての組み合わせをカバーしています。

マトリックス ジョブのセットアップと実行については、以下の動画も併せてご確認ください。

マトリックス ジョブは、すべての CircleCI ユーザーにご利用いただけます。この機能のメリットは、任意のジョブ パラメーターを組み合わせて使用できるうえ、個々のジョブについて人間が判読可能な名前が生成されることです。クロスプラットフォームのテストを実行するには、Node.js のバージョンやオペレーティングシステムなどに限らず、ジョブ パラメーターとして表現可能なものなら何でも指定できます。ドキュメントでは、特定の組み合わせを除外したり、テンプレート化した依存関係を使用して複雑なワークフローを作成したりといった高度な機能を紹介しています。

この記事で言及した他の機能の詳細については、以下のリンクをご覧ください。