Instiq
第1章 · ワークフローの作成と管理·v1.0.0·更新 2026/6/14·読了目安 約18分

変更要約: GH-200 第1章を新規作成(トリガーとイベント=push/pull_request/schedule/workflow_dispatch/repository_dispatch/workflow_call・inputs/secrets、ワークフロー構造=jobs/steps/needs/if・env/$GITHUB_ENV・サービスコンテナ・strategy.matrix・コンテキスト/${{ }}式・YAMLアンカー、実行管理=アーティファクト/$GITHUB_OUTPUT/キャッシュ/$GITHUB_STEP_SUMMARY/バッジ/環境保護/retention REST API)

1.2ワークフロー構造、マトリックス、コンテキストと式

この節の要点

ジョブとステップ、ジョブ間の依存(needs)と条件分岐(if)、ランナーの選択、ワークフローコマンドと環境変数、サービスコンテナ、strategy/matrix によるジョブの並列展開(include/exclude・fail-fast・max-parallel)、YAML のアンカー/エイリアス、そして github/env/matrix/needs などのコンテキストと ${{ }} 式の評価を理解します。

ワークフローは 1 つ以上の ジョブ(jobs) からなり、各ジョブは ステップ(steps) の列です。ジョブは runs-on で実行する ランナー(GitHub ホスト型の ubuntu-latest 等、または self-hosted)を選び、既定では互いに並列に実行されます。ステップは上から順に実行され、run: でシェルコマンドを、uses: でアクションを呼びます。重要なのは、各ジョブは独立した仮想環境(クリーンな状態)で動く ことです——だからこそジョブ間でデータを渡すには明示的な仕組み(アーティファクトや outputs、第3節)が要ります。

1.2.1依存(needs)と条件分岐(if)

ジョブを順番に流したい場合は needs を使い、「ジョブ B は A の完了後に実行」と依存を宣言します(複数依存も可)。needs逐次化(直列化) と、後段ジョブが前段の outputs を参照する経路の両方を担います。実行可否は if 式で制御し、たとえば「main ブランチのときだけデプロイ」「前段が失敗しても必ず実行(if: always())」「失敗時のみ通知(if: failure())」などを表現します。success()failure()cancelled()always() といった ステータス関数 を覚えておくと、堅牢なパイプラインを組めます。

1.2.2環境変数とワークフローコマンド

環境変数は env: でワークフロー・ジョブ・ステップの各レベルに定義でき、狭いスコープが優先されます。実行時に値を生成して後続ステップへ渡すには、特殊ファイル $GITHUB_ENVecho "KEY=value" >> "$GITHUB_ENV" のように書き込みます(次のステップ以降で環境変数として使える)。同様に ワークフローコマンドecho "::notice::..." など)でログにアノテーションを出したり、出力やマスクを制御できます。組織/リポジトリ/環境レベルの 変数(vars)vars コンテキストで参照し、機密でない設定値の共有に使います。

1.2.3サービスコンテナ

テストがデータベースやキューなどの依存サービスを必要とする場合、services: を使ってジョブの実行中だけ補助コンテナ(PostgreSQL・Redis 等)を立ち上げます。ポートのマッピングヘルスチェック(health checks)・コンテナオプションを指定でき、ジョブ内のステップから localhost:<port> で接続できます。これにより、外部のテスト用 DB を用意せずに統合テストを再現性高く回せます。サービスはジョブ終了時に破棄されるため、ジョブごとにクリーンな状態が保てます。

1.2.4strategy と matrix によるジョブの展開

strategy.matrix は、1 つのジョブ定義を 複数のバリエーション に自動展開します。たとえば OS(ubuntu-latest/windows-latest/macos-latest)× 言語バージョン(Node 18/20/22)を掛け合わせ、組み合わせごとに並列ジョブを生成します。include で特定の組み合わせを追加(または既存に値を付与)し、exclude で不要な組み合わせを除外します。既定では 1 つでも失敗すると残りを打ち切る fail-fast: true が働きますが、false にすると全組み合わせを最後まで走らせて結果を比較できます。max-parallel で同時実行数を抑え、コストとランナー枠を調整します。なお windows-latest の Windows Server 2025 移行や ubuntu-20.04 の廃止など、ランナーイメージの更新にも注意します。

設定意味使いどころ
include組み合わせの追加/値の付与特殊ケースだけ追加
exclude不要な組み合わせを除外非対応の OS×版を外す
fail-fasttrue=即打ち切り / false=全実行原因切り分けは false
max-parallel同時実行数の上限コスト/枠の調整

1.2.5コンテキストと ${{ }} 式、YAML アンカー

ワークフローはランタイムのメタデータに コンテキスト からアクセスします——イベント情報の githubgithub.refgithub.event 等)、envvarssecretsinputs、行列値の matrix、依存ジョブの結果 needsrunnerjobsteps など。式は ${{ }} の中で評価し、if: や値の埋め込みに使います。式がワークフロー解析時(静的)に評価されるものと実行時(動的)に評価されるものの違い、そして シークレットをログや式に漏らさない ことが重要です。繰り返す YAML 断片は アンカー(&)とエイリアス(*)、マージキー(<<)で 1 ファイル内で再利用できます(複数ファイル間の共有ではない点に注意)。

試験ポイント

頻出:
①ジョブは既定で並列、順序づけは needs(前段 outputs の参照経路でもある)。
②条件は if +ステータス関数 success()/failure()/cancelled()/always()。
③実行時に値を後続へ渡す=$GITHUB_ENV に追記。
④DB 等の依存サービス=services(サービスコンテナ)+ヘルスチェック。
matrix は include/exclude・fail-fast(false で全実行)・max-parallel
${{ }} で式評価、コンテキスト github/env/matrix/needs、YAML アンカー/エイリアスは単一ファイル内の再利用。

注意

混同・注意:
①ジョブ間はクリーンな別環境——変数やファイルは自動共有されない(outputs/アーティファクトで明示的に渡す)。
env: は環境変数、with: はアクション/再利用WFへの入力——別物。
fail-fast: true(既定)は失敗で残りを打ち切る——全結果が欲しいなら false。
④YAML アンカー/エイリアスは 同一ファイル内のみ——複数ワークフロー共有は reusable workflow を使う。
⑤シークレットを echo や式に入れない(マスクされても漏れる経路に注意)。

イベント→ジョブ(並列・needs)→ステップ→matrix 展開の流れの図。
ジョブは並列・needs で順序

1.2.6この節のまとめ

  • jobs は runs-on でランナー選択・既定で並列、steps は run:/uses: を順次実行。ジョブは独立環境
  • 順序=needs(+前段 outputs の参照)、条件=if+success()/failure()/cancelled()/always()
  • env: で環境変数、$GITHUB_ENV で実行時値を後続へ、services でDB等の依存サービス(ヘルスチェック)
  • matrix で OS×版を展開(include/exclude・fail-fast・max-parallel)、${{ }} 式とコンテキスト、YAML アンカーは単一ファイル内

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. ジョブ deploy をジョブ build と test の両方が成功した後にだけ実行したいです。どう書きますか?

Q2. あるステップで生成した値(バージョン番号など)を、同じジョブの後続ステップで環境変数として使いたいです。正しい方法はどれですか?

Q3. 統合テストで PostgreSQL が必要です。外部 DB を用意せず、ジョブの実行中だけ DB を起動する GitHub Actions の機能はどれですか?

Q4. OS×Node バージョンの全組み合わせをテストしていますが、1 つ失敗すると残りが打ち切られて原因を切り分けにくいです。全組み合わせを最後まで実行するにはどうしますか?

Q5. 繰り返し現れる同一のステップ群を 1 つのワークフローファイル内で再利用したいです。最も適した YAML の機能はどれですか?

Q6. 前段のジョブが失敗しても、必ず実行して失敗を通知するクリーンアップ/通知ジョブを作りたいです。if 式に使う関数はどれが適切ですか?

理解度を確認第1章「ワークフローの作成と管理」の問題を解く