依存関係付き並列ジョブ
needsキーワードを使用したGitHub Actionsワークフローの並列ジョブと依存ジョブの構造化。ファンアウト/ファンインパターン、条件付きジョブ、ステータスチェックを解説。
Testing
詳細な説明
並列ジョブと依存ジョブ
GitHub Actionsはデフォルトでジョブを並列実行します。needsキーワードでジョブ間の依存関係を作成し、ファンアウト(並列)とファンイン(収束)パターンを実現します。
パイプライン構造
lint ──────┐
test ──────├── build ── deploy
type-check ┘
3つのチェックジョブ(lint、test、type-check)は並列実行されます。buildジョブは3つすべての成功を待ちます。deployジョブはビルド成功後、mainブランチでのみ実行されます。
主要パターン
- ファンアウト: 依存関係のない複数のジョブが同時実行
- ファンイン:
needs: [job1, job2, job3]を持つ単一ジョブがすべてのリストされたジョブを待機 - 条件付き実行:
if: github.ref == 'refs/heads/main'で特定のブランチにジョブを制限 - アーティファクト受け渡し:
upload-artifactとdownload-artifactでジョブ間のファイル転送
ジョブステータス関数
if条件でこれらを使用して失敗を適切に処理します:
success(): デフォルト — すべての依存が成功した場合のみ実行failure(): 依存のいずれかが失敗した場合に実行(通知に便利)always(): 依存のステータスに関係なく実行(クリーンアップに便利)cancelled(): ワークフローがキャンセルされた場合のみ実行
ユースケース
デプロイ前にすべてのチェックを通過する必要がある複雑なCI/CDパイプラインの構造化。モノレポや、lint、テスト、ビルドの各ステージが並列実行の恩恵を受けるプロジェクトで一般的です。