matrix ストラテジーとは?
matrix ストラテジーは、1 つの job 定義を多数の入力の組み合わせにわたって一度に実行します - すべての OS × すべての言語バージョンを並列で。
同じコードを多数の条件下でテストする必要はよくあります: 3 つの Node バージョン、2 つのオペレーティングシステム、両方のアーキテクチャ。ほぼ同一の job を 6 つ書くのは面倒です。matrix は次元を一度宣言すれば、CI がそれらを並列の job に展開してくれます。
matrix はどう展開されるか
次元とその値を列挙すると、CI が直積を生成します。os: [ubuntu, windows] と node: [18, 20, 22] の matrix は 6 つの job - 組み合わせごとに 1 つ - に展開され、並列で実行されます。
小さな例
node: [18, 20, 22] を持つ strategy.matrix は、テストスイートをバージョンごとに 1 回、計 3 回、それぞれ独自の runner で実行します。job 名にはその値が表示される(test (20))ので、失敗すればどのバージョンが壊れたのかがすぐわかります。
include と exclude
include で単発の組み合わせを追加したり、exclude で特定のセルを除外したりできるので、大きなグリッドのすべてのセルをテストせずに、重要な組み合わせをカバーできます。
fail-fast の挙動
デフォルトでは、多くの matrix は fail-fast です: 1 つのセルが失敗すると残りがキャンセルされます。fail-fast をオフにするとすべてのセルが完了するため、失敗が 1 つの不安定な組み合わせなのか、すべてにわたる広範なリグレッションなのかがわかります。
組み合わせ爆発に注意
次元は掛け合わされます。3 次元にわたる 4 つの値で 64 の job になります - フィードバックは速いですが、実際のコストがかかります。matrix は、挙動が本当に異なる組み合わせだけに絞りましょう。
重要なポイント
- matrix は、入力次元の直積にわたって 1 つの job を実行します。
- include と exclude で、どの組み合わせを実行するかを調整できます。
- 次元は急速に増える - matrix は本当に重要なものだけに絞りましょう。