TL;DR
- GitHub Agentic Workflows と従来の GitHub Actions は、機能の優劣ではなく 責務・権限・監査の3層で境界を引く 問題として設計します。
- 4軸比較(責任範囲・決定論性・security boundary・audit log)で責務分担を整理し、段階モデル(観測→限定書込→限定自律→限定 deploy)で導入を進めます。
- 末尾の 導入判断テンプレ10項目 を Copy & Paste し、PoC スコープと撤退基準(kill switch)を上司/CTO に説明できる状態にしましょう。
はじめに
こんにちは、みねです。
GitHub Agentic Workflows が GA を迎え、Copilot Coding Agent をはじめとする AI Agent が CI/CD パイプラインに自然に組み込めるようになりました。一方で、Platform/SRE/CTO 層からはこんな声をよく聞きます。
- 「Actions と Agentic Workflows の違いは分かるが、どこから入れていいか 決められない」
- 「security/audit の観点で組織にどう説明 すればよいか不安」
- 「上司に PoC を提案したいが、判断材料のテンプレ が手元にない」
この記事のゴール:
GitHub Agentic Workflows と従来 CI/CD の責務分担を、security architecture と audit log を軸に設計し、組織導入を判断するためのテンプレを提供すること。
この記事がカバーしないこと:
- 各 Agentic Workflow ツール(Copilot Coding Agent / Claude Code 等)の機能カタログ
- 価格比較・契約条件
- LLM 自体の jailbreak 評価などの研究領域
なぜ「Agentic Workflows と Actions の境界」を設計するのか
Agentic Workflows を「どこで使うか」より先に、「どこで使わないか」を決める方が、設計は速く進みます。境界線は 責務・権限・監査の3層 で引きます。3層を別々に考えると、議論の対象が分離できます。
従来 GitHub Actions の前提
- 決定論的: 同じ入力で同じ出力。再実行で結果が変わらないことを前提に CI/CD は組まれています。
- 明示的 trigger:
push/pull_request/scheduleなど、起動条件は静的 YAML に書かれます。 - 静的なステップ:
jobs.<id>.stepsに書かれた順序で、書かれた通りに実行されます。
この3つが揃うから、ロールバック・再実行・差分デバッグが成り立ちます。
Agentic Workflow が壊す前提
Agent が Workflow の意思決定/実行ステップを動的に決める形態を、本記事では Agentic Workflow と呼びます(用語統一)。
- 非決定論性: 同じ入力でも、Agent の判断は実行ごとに揺れます。LLM の温度・コンテキスト・ツール呼び出し順が要因。
- 動的判断: 「コードを読んでから次のステップを決める」が成立します。便利ですが、再現性は落ちます。
- 自然言語指示: PR description やコメントが Agent の入力になり得ます。= 攻撃面が増える。
境界設計を怠ると起きること
3つだけ挙げます。
- 権限漏洩: Agent に
reposcope の token を雑に渡すと、PR 一括書き換え・force push まで届きます。 - audit 不能: GitHub の audit log には Agent の reasoning trace が残りません。「なぜ Agent がそうしたのか」が後追いできない監査人クレームが起きます。
- 無限ループ: Agent が自分のコメントに反応してさらにコメントする、という構造的バグ。
scheduleと組み合わせるとリソース消費が止まりません。
境界を引く目的は、Agent を 使うため です。「全部禁止」と「全部任せる」の間に、責務・権限・監査の3層で線を引く。これが本記事の主旨です。
GitHub Actions vs Agentic Workflows 4軸で整理する責務分担
機能の優劣ではなく、責務分担の問題です。決定論性が必要な工程は Actions に残し、判断や要約は Agent に渡す。この線をどこに引くかが、組織にとっての「Agentic Workflows 導入」の中身になります。
4軸で整理します。
責任範囲
- Actions: 「何を実行するか」を YAML 作成者が決め、runner は決められたことを実行するのみ。
- Agentic Workflows: 「何を実行するか」の一部または全部を Agent が決定。最終的な責任主体は依然として人間(PR 作成者・reviewer・運用責任者)に残ります。
決定論性
- Actions: 同入力同出力が原則。テスト・lint・ビルドはここに残します。
- Agentic Workflows: 非決定論。要約・説明文生成・初期 draft PR 作成・調査タスクに向きます。
Security boundary
- Actions: scope 明示の
GITHUB_TOKEN+ OIDC で短命 token 発行が定石。 - Agentic Workflows: 同上に加え、Agent に渡す権限を YAML で最小化、PR description などの自然言語入力を信頼境界の外に置く設計が必要。
Audit log の粒度
- Actions: workflow_run / job 単位、token 発行、secret アクセスがすべて Enterprise audit log に残ります。
- Agentic Workflows: 上記に加え、Agent 側の reasoning trace を別経路で取得し、相関キーで結合する設計が必要(H2-4 で詳述)。
比較表(4軸 + ハイブリッド列)
| 軸 | GitHub Actions | Agentic Workflows | ハイブリッド推奨 |
|---|---|---|---|
| 責任範囲 | YAML 作成者が全決定 | Agent が一部決定、最終責任は人間 | 決定論工程=Actions、判断・要約=Agent |
| 決定論性 | 高い(再実行で同結果) | 低い(揺れる) | テスト/ビルドは Actions、初期 draft 生成は Agent |
| Security boundary | scope 明示 + OIDC | scope 最小化 + 自然言語入力の隔離 | Agent には write より弱い権限から始める |
| Audit log | workflow_run / job が完全に残る | reasoning trace は別経路、相関キーで結合 | 両方を stream して join 基盤に集約 |
ハイブリッドは「Agent を Actions の上に薄く乗せる」構成です。どちらか一方ではなく、両者を組み合わせた設計が多くの組織で現実解になります。
Security Architecture AI に渡してよい権限の引き方
組織全体のガードレール設計(権限・流出検知・実行時制御・設計判断の4層)は、親記事 AIコーディング導入のセキュリティ設計 を先に読んでください。本節では Agentic Workflows 文脈に絞ります。
最小権限(GITHUB_TOKEN scope と OIDC short-lived token)
- 基本姿勢:
permissions:を Workflow / job レベルで明示し、デフォルトをcontents: readまで絞る。 - 書き込みは段階的に:
pull_requests: writeまでで、contents: writeやactions: writeは人間 approval ゲートの後に渡す。 - OIDC: 外部 cloud(AWS/GCP/Azure)への deploy では、長期 secret を持たず OIDC で短命 token を発行する。TTL は 1時間以内 を推奨。
失敗モード:
- scope を
*: writeで雑に付与し、Agent が想定外のリソースを書き換える。 - OIDC TTL を 12h など過長に設定し、漏洩時の被害が長期化する。
subclaim を branch 縛りにせず、任意 branch から本番 token を取得できる。
検知メトリクス:
- token 発行 scope の集計(
*: write比率を週次でモニタ) - TTL 違反率(1h 超 token 発行件数 / 全発行件数)
- 期待
subclaim と実発行 token の差分件数
Runner 隔離
- ephemeral 推奨: GitHub-hosted runner、または self-hosted の場合も都度破棄される ephemeral runner で Agent ジョブを動かす。
- egress 制御: Agent ジョブに network egress allowlist を適用し、外部 LLM API・GitHub API のみ通す。
- persistent runner では Agent を動かさない: 残留 secret / cache 経由のクロスジョブ汚染を防ぐ。
失敗モード:
- persistent self-hosted runner に Agent ジョブを乗せ、前ジョブの secret が残ったまま実行される。
- egress 全開で、Agent が任意の外部 endpoint に POST できる。
検知メトリクス:
- ephemeral 化率(Agent ジョブの ephemeral runner 採用件数 / 全件)
- egress allowlist 違反件数(network log)
- runner 再利用回数(self-hosted の場合は 0 が理想)
Secrets 経路
Secret 漏洩の一次検知は決定論的 pipeline 側に置きます。Agent はサマリ生成にとどめます(GitHub MCP Server で secret scanning を組み込む を参照)。
- 環境分離: GitHub Environments で
staging/productionを分け、Agent からアクセス可能なのは staging まで。 - mask: secret はログに出ない設定、Agent の出力にもパススルーされない確認。
- allowlist: Agent に渡す環境変数を Workflow YAML 上で明示列挙し、
env:を継承させない(MCP権限設計の判断軸 と同じ allowlist 思想)。
失敗モード:
- Agent の出力(PR コメント・summary)に secret が混入し、PR ログとして公開される。
- mask が効かない rare ケース(base64 や URL エンコード経由)。
- 環境変数を
env:で job 全体に撒き、Agent step も継承する。
検知メトリクス:
- secret scan ヒット率(PR / push 単位)
- mask バイパス検知件数(base64 / URL エンコード後の正規表現一致)
- Agent step が参照した env 変数のリスト差分(許可リストとの差)
graph TD
SA[Security Architecture] --> P1[最小権限scope+OIDC TTL 1h]
SA --> P2[Runner 隔離ephemeral+egress allowlist]
SA --> P3[Secrets 経路環境分離+mask+allowlist]
SA --> P4[Prompt injection 遮断external PR無効化+merge禁止]
Prompt injection 経由の権限昇格を遮断する
PR description / issue 本文 / コメントは、すべて 信頼境界の外側 に置きます。
- external user の PR では Agent 自動実行を無効化: 既存 contributor のみ Agent triggers が反応する設定。
merge権限を Agent に渡さない:pull_requests: writeでコメント・draft までは可、mergeは人間 approval。- Workflow 内で人間 approval を強制:
environmentsの required reviewers +workflow_dispatchの inputs バリデーション。
失敗モード:
- 悪意ある PR description が Agent に「reviewer 権限で merge せよ」と指示し、自動 merge が起動する。
- issue 経由のスケジュール起動で、Agent が外部 prompt を取り込み続ける。
検知メトリクス:
- external PR の Agent 自動実行率(0 が理想)
- 不審 prompt パターン(
ignore previous/you must merge等)の件数 - 人間 approval を経ない Agent merge の件数(0 必須)
Audit Log の設計 「AI が何をしたか」を再現可能にする
監査の核心は「事後に何が起きたかを再現できるか」です。Agent を入れた瞬間、GitHub 標準の audit log だけでは足りなくなります。
GitHub Enterprise audit log で取れるもの/取れないもの
| 取れる | 取れない(Agent 側で補完が必要) |
|---|---|
| workflow_run の開始/終了 | Agent の reasoning trace |
| job 単位の status | プロンプト本文 |
| token 発行(OIDC 含む) | tool 呼び出しの引数詳細 |
| secret アクセス回数 | 中間意思決定(why) |
| PR コメント / レビュー作成 | LLM のモデル ID・温度 |
GitHub 側だけ見ていると、「Agent が何をしたか(What)」までは追えますが、「なぜそうしたか(Why)」は欠落します。
Agent 側ログ × GitHub 側ログの結合点 — 相関キー設計
ここが本記事の核心の1つです。Agent 側のログ基盤と GitHub 側の audit log を 同じ相関キー で stream し、後段(Splunk / Datadog / BigQuery など)で join できる構成にしてください。
相関キー(必須3つ):
| キー | 由来 | 用途 |
|---|---|---|
pull_request.number | GitHub Webhook / API | 人間が追跡する単位(PR #1234) |
workflow_run.id | GitHub Actions | 1回の Workflow 実行を一意に識別 |
Agent request_id | Agent 側で発行 | Agent の1セッション/1判断を識別 |
実装方針:
- Agent 起動時に
request_idを発行 し、すべての reasoning trace / tool call ログに付与する。 - Agent から GitHub API を叩く際、
pull_request.numberとworkflow_run.idをログに併記する。 - GitHub 側の audit log を Splunk/Datadog 等に stream し、Agent 側ログと 3キーで join 可能 な状態にする。
- SOC2/ISO 監査時は、
pull_request.numberを起点に GitHub 側の What と Agent 側の Why を引ける状態にする。
# Agent ジョブの最低限のログ出力例(擬似コード)
- name: Run agent step
run: |
echo "::notice::request_id=${AGENT_REQUEST_ID} pr=${{ github.event.pull_request.number }} run=${{ github.run_id }}"
# Agent 実行(reasoning trace は外部ログ基盤へ送信)
PR レビュー証跡として残す最小要件
- 誰の判断か: Agent / 人間 reviewer の区別(Agent 起因 PR は label / commit trailer で識別)
- 何を見たか: Agent が読んだファイル一覧、tool 呼び出し履歴
- 何をしたか: 生成したコメント・diff・close/merge 操作
- いつか: timestamp(GitHub 側 + Agent 側で揃える)
SOC2/ISO 観点での「再現性」と「責任主体」の明示
- 再現性: SOC2 CC7.2/CC7.3 の継続監視・インシデント対応で「事後の追跡可能性」が問われます。相関キー設計はここに直結します。
- 責任主体: ISO27001 の管理策で「責任の明確化」が要求されます。Agent は責任主体になれない ため、Agent 起因の操作も最終責任者(PR 作成者 or 運用責任者)を必ず紐づけます。
- SLSA Level 3+ を狙う場合、artifact provenance に
request_idを含めることで Agent 経由ビルドも追跡可能になります。
組織の audit 要件に合わせた境界設計のレビューが必要であれば、相談フォーム で気軽にご相談ください。
境界設計フロー どこから AI に任せるかの段階モデル
いきなり段階4(deploy 関与)から入る必要はありません。むしろ、段階1から順に上げる方が、組織の audit 整備が間に合います。Agent 側のガードレールは Claude Code hooks の実践パターン集 も併用してください。
段階1: 観測(read-only / コメント生成)
- 権限:
contents: read、pull_requests: read - Agent ができること: PR 要約コメント、変更差分の説明、関連 issue の参照提示
- できないこと: 書き込み、merge、deploy
- 撤退コスト: ゼロ(Workflow を無効化するだけ)
段階2: 限定的書き込み(draft PR、merge 不可)
- 権限: 段階1 +
pull_requests: write(コメント・draft PR 作成のみ) - Agent ができること: 自動修正の draft PR 作成、レビュー観点の提案
- できないこと: PR の merge、main への push
- 撤退コスト: 低(draft PR は人間が close すれば終わり)
段階3: 限定領域の自律実行(docs/typo / lint)
- 権限: 段階2 + 限定 path への
contents: write(CODEOWNERS でdocs/**のみ Agent OK 等) - Agent ができること: docs typo 修正の merge、lint 自動修正の merge(事前に決定論的 lint 通過が必須)
- できないこと: アプリケーションコード本体への書き込み
- 撤退コスト: 中(CODEOWNERS と branch protection を戻す)
段階4: 限定的 deploy 関与(staging のみ、production は人間 approval)
- 権限: 段階3 +
staging環境への deploy 起動権限のみ - Agent ができること: staging deploy のトリガー、デプロイ後の smoke test 実行
- できないこと: production deploy(GitHub Environments + required reviewers)
- 撤退コスト: 中〜高(環境分離設計を戻す必要あり)
graph LR
S1[段階1 観測read-only] --> S2[段階2 限定書込draft PR]
S2 --> S3[段階3 限定自律docs/lint merge可]
S3 --> S4[段階4 staging deployAgentトリガー可]
S4 --> H[人間 approvalrequired reviewers]
H --> P[production deploy]
各段階の昇格判断は、後述の判断テンプレで毎回確認します。
導入判断テンプレート(Decision Template)
Copy & Paste して、Notion / Confluence / GitHub issue にそのまま貼ってください。毎回の段階昇格判断で再利用 できます。
チェックリスト10項目
# Agentic Workflows 導入判断チェックリスト
## 権限
- [ ] 1. Agent に渡す GITHUB_TOKEN の scope が Workflow / job レベルで明示されている
- [ ] 2. OIDC 経由の外部 cloud token は TTL 1時間以内に設定されている
- [ ] 3. external user の PR では Agent 自動実行が無効化されている
## Audit
- [ ] 4. Agent ログに request_id / pull_request.number / workflow_run.id の3キーが必ず記録される
- [ ] 5. Agent 側ログと GitHub audit log が join 可能な基盤に stream されている
- [ ] 6. SOC2/ISO 監査時に PR 番号起点で「Why」を引ける構成になっている
## Runner
- [ ] 7. Agent ジョブは ephemeral runner で実行され、persistent runner では動かない
## Rollback
- [ ] 8. 撤退時の手順(Workflow 無効化/権限縮退)が文書化されている
## 人間承認
- [ ] 9. production deploy には GitHub Environments + required reviewers が掛かっている
- [ ] 10. Agent の merge 権限は無効、または限定 path のみに絞られている
10項目すべて Yes でなければ、その段階には進みません。1つでも No があれば、そこを潰してから昇格します。
PoC スコープを決める3つの質問
- 「Agent が壊しても良いものは何か?」: docs typo の自動修正 PR は壊れてもロールバック容易、production config は不可逆。最初に壊しても良い対象を1つ選びます。
- 「audit 監査人に何を見せたいか?」: SOC2 監査を控えているなら、相関キー基盤を先に整えます。逆に内部 PoC のみなら audit は段階4 直前まで後回し可能。
- 「人間 reviewer のキャパは何件/日か?」: Agent が draft PR を量産すると、人間 reviewer が詰まります。1日あたりの draft PR 上限を決めてから段階2に入ります。
撤退基準(kill switch)の設計
- トリガー: 段階3以上で「Agent merge による事故が1件発生」または「audit log 欠損が確認された」場合、即段階1まで戻す。
- 手順: Workflow ファイルから Agent 起動部分を
if: falseで無効化、CODEOWNERS から Agent ユーザを除外、PR 上の Agent label を一括削除。 - 再開条件: 事故の RCA(根本原因分析)完了 + 該当チェックリスト項目の追加対策実装後。
よくある質問(FAQ)
Agent が暴走したらどう責任を取るのか(責任分界)
責任主体は依然として人間(PR 作成者・reviewer・運用責任者)です。Agent は責任主体になれません。GitHub Workflow 上の操作はすべて、トリガーした人間 / Workflow オーナーに紐づきます。Agent 起因の merge も、最終的には Workflow オーナーの責任 として扱う運用ルールを先に決めておくと、事故時の議論が早く進みます。
監査証跡は SOC2 監査人に提示できるのか
提示できます。ただし、GitHub audit log だけでは Why が欠落するため、本記事の 相関キー設計(pull_request.number / workflow_run.id / request_id) を必ず実装してください。SOC2 CC7.2/CC7.3 で求められる継続監視・インシデント対応の観点では、Agent 側の reasoning trace を「補完証跡」として提示することで、「事後追跡可能性」を満たせます。
撤退時のロールバック手順は
「導入判断テンプレ」内の 撤退基準(kill switch) に手順を含めています。Workflow YAML の Agent 起動部分を if: false で無効化するのが最速です。事前に kill switch をリハーサルしておくと、本番事故時のダウンタイムを最小化できます。
まとめと次のアクション
GitHub Agentic Workflows と従来 GitHub Actions は、機能の優劣ではなく、責務・権限・監査の3層で線を引く問題 です。
- 4軸(責任範囲・決定論性・security boundary・audit log)で責務分担を整理し、決定論工程は Actions、判断・要約は Agent に渡します。
- Security は最小権限・runner 隔離・secrets 経路・prompt injection 遮断の4要素で、各々に 失敗モード + 検知メトリクス を持たせます。
- Audit log は GitHub 側 × Agent 側を 3つの相関キー(pull_request.number / workflow_run.id / request_id) で結合します。
- 段階1〜4の段階モデルで導入を進め、毎段階の昇格判断は 判断テンプレ10項目 で確認します。
次のアクションはシンプルです。
- 上の 判断テンプレ10項目 を社内ドキュメントにコピーする
- 段階1(観測のみ)から PoC スコープを決める
- 撤退基準(kill switch)を先にリハーサルする
組織の audit 要件・PoC スコープ策定をサポートします。境界設計のレビューが必要であれば、相談フォーム からお気軽にご相談ください。
関連記事:
- AIコーディング導入のセキュリティ設計 4層モデルで攻撃面を整理する(hub 親記事)
- GitHub MCP Server で secret scanning を組み込む
- Claude Code hooks の実践パターン集
- MCP権限設計の判断軸
参照バージョン: GitHub Agentic Workflows / Copilot Coding Agent(2026-04 GA 後アップデート) 最終確認日: 2026-05-01 本記事は仕様変動の影響を受けやすい領域です。最新の挙動は GitHub 公式 docs を併せて確認してください。
