第4回 複数バージョンを同時に試す:matrix と needs の最初の一歩
(対象: テスト + secrets + キャッシュを触った人)
この記事でできるようになること
- matrix(組み合わせ展開)で複数バージョンを一度にテスト
- needs でジョブの実行順を決める
- 並列と順番制御の違いを理解
- concurrency(重複防止)の入口を知る
- シンプルな “ビルド → テスト →(ダミー)デプロイ” の流れを作る
1. 複数バージョンを試したい理由
1つの Node.js だけでなく、18 と 20 で両方 OK か確認したい場面があります。手で2回やるのは面倒 → GitHub Actions の matrix 機能で自動展開。
2. matrix の最小例
name: matrix-sample
on: [push]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node: [18, 20]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- run: node -v
- run: echo "テスト(仮) for ${{ matrix.node }}"
ポイント:
- matrix.node に [18,20] → 2バージョン分 “別ジョブ” として並列実行
${{ matrix.node }}
でその回の値を参照
[図7 挿入予定]
- Alt: "node:18 と node:20 の2つの箱が並列で走っている図"
- キャプション案: 図7: matrix が 2 つのテストジョブを生成
3. needs で順番を決める
ビルド → テスト → デプロイ の流れをシンプルに表現。
name: flow-sample
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "(仮) ビルド処理"
test:
runs-on: ubuntu-latest
needs: build
steps:
- run: echo "(仮) テスト処理"
deploy:
runs-on: ubuntu-latest
needs: test
steps:
- run: echo "(仮) デプロイ処理"
ポイント:
- build が失敗したら test / deploy は実行されない
- needs で “前の結果が成功したら進む” 依存関係
[図8 挿入予定]
- Alt: "build → test → deploy と矢印でつながる直線"
- キャプション案: 図8: needs による直列実行
4. 並列と順番の組み合わせ
- test を matrix で複数バージョン
- すべて成功したら deploy
name: matrix-and-deploy
on: [push]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node: [18, 20]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- run: echo "テストOK version=${{ matrix.node }}"
deploy:
runs-on: ubuntu-latest
needs: test
steps:
- run: echo "全部成功したのでデプロイ(仮)"
挙動:
- 2つの test ジョブが並列
- 両方緑なら deploy が実行
- どれか赤なら deploy はスキップ
5. concurrency(重複防止)軽く紹介
同じブランチで “前のデプロイがまだ走っているのに次を開始” すると無駄。入口例:
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: true
これをワークフローの name:
の下あたりに置くと、同じ group の古い実行を止めて最新だけ残せる。詳細は発展テーマ。
6. よくあるつまずき
症状 | 原因 | 対策 |
---|---|---|
matrix の1つだけ失敗 | その条件でバグ | 失敗ログを個別ジョブで確認 |
deploy が動かない | needs の前ジョブ失敗 | test 全部の結果を見る |
ジョブ数が想定超過 | matrix の組み合わせが多い | バージョン数を一旦減らす |
7. ミニ課題
ここまでOK:
- matrix で 2バージョン同時テストを動かした
- needs で build → test → deploy の順番を再現
余裕チャレンジ:
- OS も追加(
os: [ubuntu-latest, windows-latest]
)して組み合わせを増やす - 失敗するバージョンだけ echo でエラーを出し挙動を観察
- concurrency を試し、連続 push の古い実行がキャンセルされるか確認
8. Q&A
Q. matrix を3軸にしたら? → 組み合わせが一気に増えるので注意。 Q. needs を複数指定できる? → needs: [build, lint]
のように配列可。 Q. 途中だけ再実行したい → GitHub UI の “Rerun jobs” 機能を確認(変更される場合あり)。
9. まとめ
- matrix で複数条件を一気に検証
- needs でジョブの依存を表現
- 並列(早く幅広く試す)と 直列(安全な流れ)の組み合わせが基礎
- concurrency で重複実行ロスを減らす入口を知った
次回予告: cron(決まった時間)・通知・権限(permissions) 最小化で“運用っぽさ”へ。
(終) 第4回