依存関係付き並列ジョブ

needsキーワードを使用したGitHub Actionsワークフローの並列ジョブと依存ジョブの構造化。ファンアウト/ファンインパターン、条件付きジョブ、ステータスチェックを解説。

Testing

詳細な説明

並列ジョブと依存ジョブ

GitHub Actionsはデフォルトでジョブを並列実行します。needsキーワードでジョブ間の依存関係を作成し、ファンアウト(並列)とファンイン(収束)パターンを実現します。

パイプライン構造

lint ──────┐
test ──────├── build ── deploy
type-check ┘

3つのチェックジョブ(linttesttype-check)は並列実行されます。buildジョブは3つすべての成功を待ちます。deployジョブはビルド成功後、mainブランチでのみ実行されます。

主要パターン

  • ファンアウト: 依存関係のない複数のジョブが同時実行
  • ファンイン: needs: [job1, job2, job3]を持つ単一ジョブがすべてのリストされたジョブを待機
  • 条件付き実行: if: github.ref == 'refs/heads/main'で特定のブランチにジョブを制限
  • アーティファクト受け渡し: upload-artifactdownload-artifactでジョブ間のファイル転送

ジョブステータス関数

if条件でこれらを使用して失敗を適切に処理します:

  • success(): デフォルト — すべての依存が成功した場合のみ実行
  • failure(): 依存のいずれかが失敗した場合に実行(通知に便利)
  • always(): 依存のステータスに関係なく実行(クリーンアップに便利)
  • cancelled(): ワークフローがキャンセルされた場合のみ実行

ユースケース

デプロイ前にすべてのチェックを通過する必要がある複雑なCI/CDパイプラインの構造化。モノレポや、lint、テスト、ビルドの各ステージが並列実行の恩恵を受けるプロジェクトで一般的です。

試してみる — GitHub Actions Workflow Builder

フルツールを開く