
目次
- 目次
- はじめに
- 背景・課題
- AI駆動開発ワークフローの概要
- 実装
- 使い方
- 導入効果
- 残っている課題
- 運用上の注意点
- まとめ
- 最後に
- 参考リンク
はじめに
こんにちは、新規事業部 マネジメントポータルブロックの岡本です。
「PRを作ったけど、レビューまで時間がかかる」「忙しいときレビューが後回しになる」──この悩み、開発者なら誰もが経験したことがあるのではないでしょうか。
私たちのチームでは、ClaudeとDevinを組み合わせたAI駆動開発ワークフローを導入し、レビュー待ち時間ゼロ・CIエラーの自動修正・Issueからの即時の実装開始を実現しました。この記事では、その設計思想から実装詳細、導入効果までを解説します。
この記事の対象読者
- GitHub Actionsを使ったCI/CDの経験がある方
- AIコーディングアシスタント(Claude、Devinなど)に興味がある方
- チーム開発の効率化を検討している開発リーダー・マネージャー
背景・課題
背景
私たちのチームはZOZOマッチ管理画面を少人数で運用しており、各メンバーがフロントエンド・バックエンド・LP作成と複数の領域を担当しています。そのため、コンテキストスイッチが頻繁に発生し、「PRを作成したが、レビュアーが別タスクに集中している」「CIエラーを修正しようとしたら、他の緊急対応が入った」といった状況が日常的に起きていました。
結果として、レビューやCI修正の待ち時間が発生しやすく、開発のリズムが途切れがちでした。そこで、「人間は創造的な作業に集中し、定型的な作業はAIに任せる」という方針のもと、Claude(レビュー・判断)とDevin(実装・修正)を組み合わせたワークフローを整備しました。
課題
従来の開発フローでは、次のような課題がありました。
| 課題 | 詳細 |
|---|---|
| レビュー待ち時間 | PR作成から人間のレビューまでに数時間〜1日かかることがあった |
| レビュー品質のばらつき | レビュアーの経験や専門分野によって指摘内容に差があった |
| Issue着手の遅延 | Issueが起票されてから実装開始まで時間がかかっていた |
| ライブラリ更新の負担 | Renovateが作成する大量の依存関係の更新PRのレビュー・マージ作業が開発者の負担になっていた |
これらの課題を解決するため、2つのGitHub Actionsワークフローを中心に自動化を構築しました。
AI駆動開発ワークフローの概要
AIサービスごとの役割
このワークフローでは、2つのAIサービスを組み合わせて活用しています。GitHub Actionsとの連携における実行方式の違いから、次のように役割を分けています。
- Devin(実装・修正):Issueの実装、CIエラー修正、レビュー指摘の修正を担当。非同期でセッションを開始し、修正完了まで一貫した作業が可能。ブランチ操作からコミット・プッシュまでを単一セッションで実行でき、修正完了後にPRが更新されてワークフローが再トリガーされる設計とも相性が良い
- Claude Code(レビュー・判断):PRのレビュー、分類判定、自動承認の判断を担当。同期的に結果を返すため、「自動承認 / 人間レビュー依頼 / Devin修正起動」の分岐処理を同一ワークフロー内で完結できる。構造化出力(JSONスキーマ)により、後続の処理時に扱いやすい形式でレビュー結果を取得できる
Devin Playbook
Playbookは、Devinに対する再利用可能な指示セットです。タスクの種類に応じた判断ロジック(セキュリティチェック、タスクサイズ判定など)、GitHub連携処理、エラーハンドリングが定義されており、一貫した品質でタスクを実行できます。
Playbookには、Slackからユーザーが起動するものと、GitHub Actionsワークフローが自動呼び出しするものの2種類があります。今回作成したワークフローでは、Devin APIを使用し、macro形式(macro IDとpayloadをJSONで渡す)でPlaybookを呼び出しています。
ユーザー起動のPlaybook(Slack → Devin)
Slackで@devinをメンションし、!で始まるコマンドを送信すると、対応するPlaybookが実行されます。
| コマンド | 用途 | 対象タスク |
|---|---|---|
!ai_task |
単一タスク実装 | Small〜Medium(半日以内) |
!ai_tasks |
タスク分割&並列実装 | Large(1日以上、複数コンポーネント) |
!human_review |
人間承認フロー | セキュリティ関連、要確認タスク |
!ai_task(単一タスク実装)
指定されたタスクを直接実装し、PRを作成します。

!ai_tasks(タスク分割&並列実装)
複雑なタスクを分析し、最大5つのsub-issueに分割して並列実装します。

!human_review(人間承認フロー)
セキュリティ関連や重要な変更など、人間の確認が必要なタスク向けです。

人間レビューが必要なケース
- 認証・認可の変更
- 個人情報(PII)の扱い
- シークレット・APIキーの変更
- ビジネスロジックの大幅な変更
- 本番環境への影響が大きい変更
ワークフロー自動呼び出しのPlaybook
次のPlaybookはGitHub Actionsワークフローから自動的に呼び出されます。ユーザーが直接実行することはありません。
| Playbook | 用途 | 呼び出し元 |
|---|---|---|
!fix_ci_failure |
CI失敗時の自動修正 | ai-review-orchestrator.yml(CI失敗時) |
!fix_review_comments |
レビュー指摘の自動修正 | ai-review-orchestrator.yml(blockingの指摘があるとき) |
!context_curation |
AIコンテキストの週次更新 | devin-context-refresh.yml(毎週月曜09:00 JST) |
!fix_ci_failure(CI失敗時の自動修正)
CI(Lint、Typecheck、Test)が失敗したPRを自動修正します。
- GitHub ActionsのCIログを解析してエラーを特定
- エラー種別に応じて修正(Lint →
pnpm run lint:fix、Type → 型エラー修正、Test → テスト更新) - 修正をコミット・プッシュしてセッション終了
- ビジネスロジックの変更が必要な場合は修正せず人間にエスカレーション
!fix_review_comments(レビュー指摘の自動修正)
Claude Reviewからの指摘(blocking: true)を自動修正します。
Blocker/Majorの指摘を必須の修正対象として処理- 各指摘の
suggestionに従って修正 - 修正をコミット・プッシュしてセッション終了
- 認証・認可に関わる変更は修正せず人間にエスカレーション
!context_curation(AIコンテキストの週次更新)
PRコメントから学習可能な知見を抽出し、AI関連ドキュメントを週次で自動更新します。
- 直近7日間のPRコメント(Bot除外)を収集
- コメントから有用な変更点、落とし穴、ルール例外、命名・設計ガイドラインを抽出
AGENTS.md、docs/ai-context/、docs/guidelines/、docs/review-perspectives/を更新- 更新内容をPRとして作成(人間がレビュー・マージ)
使用技術
ワークフローは、次の技術・サービスを組み合わせて構成しています(ワークフロー上の使用順)。
| 技術・サービス | 用途 |
|---|---|
| Slack | タスク起点のオペレーション(Devinへの指示) |
| GitHub Issues/PR/Labels | 進行管理とトリガー |
| Devin API | Issueの実装・CIエラー修正・レビュー指摘の修正 |
| GitHub Actions | ワークフロー実行(CI待機、ジョブ分岐、通知) |
| AWS Bedrock | Claude実行基盤(セキュリティ要件対応) |
| Claude Code Action | PRレビュー実行・分類判定・自動承認 |
機能一覧
| 機能 | 内容 | 主な効果 |
|---|---|---|
| AI Task Implementation | Slack/ラベル起点で Devinが実装しPRを作成 | Issue着手の即時化 |
| AI Review Orchestrator | Claudeがレビューし、Devinが修正 | レビュー待ちの解消と品質の均一化 |
| CI自動修正 | CI失敗時にDevinが修正を実行(最大3回) | 手戻り削減 |
| 自動承認 | AI_ONLYかつ指摘なしで自動承認 | PR処理の高速化 |
| 週次メトリクス | KPIを週次で自動計測しIssue化 | 効果測定の継続 |
| ナレッジ更新 | PRコメントからドキュメントを自動更新 | レビュー品質の継続改善 |
アーキテクチャ
SlackからPR承認までの完全フロー

2つのワークフローの役割
| ワークフロー | トリガー | 役割 |
|---|---|---|
| AI Task Implementation | Issueにai-task / ai-tasksラベル追加 |
DevinがIssueの実装を担当し、PRを作成 |
| AI Review Orchestrator | PRの作成・更新 | Claudeがレビュー、Devinが修正、条件を満たせば自動承認 |
フロー別の使い分け
各Playbookの詳細なフローは「Devin Playbook」セクションを参照してください。
| シナリオ | Slack コマンド | 処理フロー |
|---|---|---|
| 単一タスク(直接の実装が可能) | @devin !ai_task タスク説明 |
Devin → Issue + PR → 自動レビュー → 承認 |
| 複雑なタスク(分割が必要) | @devin !ai_tasks タスク説明 |
Devin → 親 Issue + sub-issue → 並列実装 → 自動レビュー |
| 要承認タスク | @devin !human_review タスク説明 |
Devin → Issue 作成 → 人間承認 → 自動実装 |
| Claudeに質問・修正依頼 | @znm-claude-code 依頼内容 |
Claudeが対応(PR/Issueコメント) |
実装
設定ファイル
ワークフローはGitHub Actionsの設定ファイルで定義しています。主要ファイルと役割は次のとおりです。
| ファイル | 役割 |
|---|---|
.github/workflows/ai-task-dispatcher.yml |
Issueラベル検知・条件判定のゲートウェイ(条件を満たす場合のみimplementationを起動) |
.github/workflows/ai-task-implementation.yml |
DevinによるIssue実装(dispatcher から呼び出し) |
.github/workflows/ai-review-orchestrator.yml |
PRレビュー・修正ループ・Renovate統合 |
.github/workflows/pr-perspective-router.yml |
Perspectiveラベルの再分類 |
.github/workflows/ai-renovate-review.yml |
Renovate PRの依存関係レビュー(orchestrator から呼び出し) |
.github/workflows/ai-metrics-report.yml |
週次メトリクス生成 |
.github/workflows/devin-context-refresh.yml |
コンテキスト更新 |
AI Task Implementation:Issueから実装までの自動化
AI Task Dispatcher(ゲートウェイ)
ai-task-dispatcher.yml は、Issueのラベル追加を検知し、条件を満たす場合のみ実装ワークフローを起動するゲートウェイです。

Dispatcherを分離している理由は3つあります。
- 条件判定の一元化:ラベル検知と条件チェックを単一ファイルに集約し、保守性を向上
- 不要なワークフロー発火の防止:条件を満たさない場合は早期終了し、リソースを節約
- 責務の分離:「いつ起動するか」(dispatcher)と「何をするか」(implementation)を明確に分離
実装ワークフローの動作
ai-taskまたはai-tasksラベルがIssueに追加されると、dispatcher経由でDevinが自動的に実装を開始します。トリガー条件は次のとおりです。
- Issueの
labeledイベントで起動(dispatcherが検知) ai-task/ai-tasksラベル付与時のみ対象in-progressが付いていない場合だけ開始
起点は2パターンあります。
- Playbook起動(Slackなど):PlaybookがIssueを作成 →
ai-task/ai-tasksを付与 → このワークフローが起動 - 既存Issue起点:このワークフローが
skip_issue_creation: trueを渡してPlaybookを実行(Issue作成はスキップ)
ラベルによる動作の分岐
ラベルに応じて対応するPlaybookが実行されます。各Playbookの詳細なフロー(セキュリティチェック、タスクサイズ判定、実装手順など)は「Devin Playbook」セクションを参照してください。
| ラベル | Playbook | 動作 |
|---|---|---|
ai-task |
!ai_task |
単一タスクとして実装 |
ai-tasks |
!ai_tasks |
タスク分割 → 並列実装 |
sub-issue作成にはgh sub-issue拡張が必要です(Playbook側 or Devinのリポジトリ初期設定で事前インストール)。
重複実行の防止の仕組み
同じIssueに対する重複実行を防ぐため、concurrency設定でIssue番号単位の同時実行を1つに制御し、進行中の実行があれば新しい実行でキャンセルします。
例えば、同じIssueに短時間でラベル追加が続いた場合、labeledイベントが複数回発火します。この二重起動を防止します。
キャンセル時のクリーンアップ
ワークフローがキャンセルされた場合、次のクリーンアップ処理を実行します。
- キャンセル時にDevinセッションを停止
- キャンセル時に
in-progressラベルを削除して再実行可能にする - 失敗時も
in-progressラベルを削除して再実行可能にする
AI Review Orchestrator:レビューから承認までの自動化
レビュー・ワークフローの動作
PRが作成・更新されると、ai-review-orchestrator.ymlが自動実行されます。このワークフローはPRの作成・更新をトリガーに発火し、PRの作成元は問いません。
- AI Task Implementation経由のPR: DevinがPR作成 → このワークフローが発火
- 手動作成されたPR: 開発者の直接PR作成 → このワークフローが発火
なお、ai-task-dispatcher.ymlとこのワークフローは独立しており、直接の呼び出し関係はありません。
統合レビュー・修正ループの詳細フロー

ジョブ構成と責務
ai-review-orchestrator.ymlは約1,500行の大規模ワークフローです。6つのフェーズに分かれています。
| フェーズ | ジョブ名 | 責務 | 依存関係 |
|---|---|---|---|
| 1 | gate |
スキップ判定、PR情報取得、イテレーション管理 | なし |
| 2 | perspective-router |
PR分類、perspective:* ラベル付与(初回のみ、Renovate以外) | gate |
| 3 | wait-for-ci |
CI完了待機(最大20分、30秒間隔ポーリング) | gate, perspective-router |
| 4a | devin-ci-fix |
CI失敗時のDevin自動修正 | gate, wait-for-ci (CI失敗時) |
| 4b-1 | renovate-review |
Renovate PR専用のClaude依存関係レビュー(ai-renovate-review.yml呼び出し) |
gate, wait-for-ci (CI成功かつRenovate PR時) |
| 4b-2 | claude-review |
CI成功/未検出時のClaudeレビュー実行(Renovate以外) | gate, wait-for-ci (CI成功/未検出時) |
| 4c | devin-review-fix |
レビュー指摘ありの場合のDevin自動修正 | gate, claude-review (指摘あり時) |
| 4d | auto-approve |
AI_ONLY + 指摘なしの場合の自動承認 | gate, claude-review or renovate-review |
| 4e | needs-human-review |
NEEDS_HUMAN + 指摘なしの場合の人間レビュー依頼 | gate, claude-review or renovate-review |
| 4f | vrt |
Visual Regression Testingの実行 | auto-approve or needs-human-review |
| 5 | max-iterations-reached |
イテレーション上限到達時の通知 | gate |
| 6 | ci-timeout |
CI待機タイムアウト時の通知 | gate, wait-for-ci |
Phase 1: Gate(スキップ判定)
次の条件でワークフローをスキップします。
| 条件 | 判定方法 | 理由 |
|---|---|---|
| Draft PR | pull_request.draft == true |
作業中のためレビュー不要 |
| Bot作成PR(Devin・Renovate 以外) | actorがbotかつDevin・Renovateでない |
無限ループ防止 |
| Fork PR | pull_request.head.repo.fork == true |
シークレット/権限制約のためスキップ |
skip-ai-reviewラベル |
ラベル存在チェック | 明示的スキップ |
| Renovate PR | actorがrenovate[bot] |
Renovate専用レビュー(renovate-review)へルーティング |
ai-auto-approvedラベル |
ラベル存在チェック | 既に承認済み |
また、新しいpushがあった場合はAI関連ラベルを削除し、承認を取り消して再レビューします。ラベルの削除ルールはpush元によって異なります。
- 人間のpush:
ai-auto-approved/needs-human-review/perspective:*を削除して再分類 - Botのpush:
ai-auto-approved/needs-human-reviewのみ削除して分類は維持
Phase 2: Perspective Router(ハイブリッド分類方式)
PRの変更内容を分析し、適切なレビュー観点を決定します。キーワードベースの事前分類 + Claudeフォールバックのハイブリッド方式を採用しています。
分類フロー

事前分類ルール
| ラベル | パスパターン | キーワード |
|---|---|---|
perspective:workflow |
.github/workflows/, .github/actions/, action.yml |
workflow, ci, cd, pipeline, jobs, steps, runs-on |
perspective:security |
auth/, login/, session/ |
auth, token, secret, credential, password, encrypt, sanitize, xss, csrf, pii, vulnerability |
perspective:quality |
*.test.*, *.spec.*, __tests__/, eslint, prettier, tsconfig |
test, spec, lint, format, accessibility, a11y, aria-, vitest, jest |
perspective:dependency |
package.json, pnpm-lock.yaml, yarn.lock, package-lock.json |
dependency, package, version, upgrade, license |
perspective:api |
/api/, openapi, swagger, schema, .dto. |
api, endpoint, schema, openapi, graphql, rest |
perspective:perf |
(パスパターンなし) | performance, optimize, cache, lazy, memo, bundle, split, prefetch |
perspective:business |
domain/, business/ |
permission, role, billing, payment, validation, status, transition, rule |
perspective:general |
上記に該当しない場合のみ | - |
複数パターンにマッチした場合、該当ラベルがすべて付与されます。perspective:generalは他のラベルと併用されません。
Phase 3: CI完了待機
他のCIジョブ(型チェック、lint、テストなど)の完了を待機します。待機の仕組みは次のとおりです。
- 自分自身のワークフローやVRTは待機対象から除外
- 部分一致の除外パターンも併用して精度を上げる
- 最大20分、30秒間隔でポーリング
CI Runが一定時間見つからない場合(約5分)はci_status=skippedとしてClaudeレビューへ進みます。success / neutral / skippedは成功扱いです。
CI完了を待つ理由
- CIが失敗している状態でレビューしても意味がない
- CI失敗 → Devin修正 → またCI失敗 → またレビュー... という無駄なループを防ぐ
- CIが通った状態のコードに対してレビューすることで、品質の高いフィードバックが可能
Phase 4: Claude Review
Claude Code Actionを使用して、PRを包括的にレビューします。
Perspectiveラベルに基づくレビュー
Claude Reviewでは、Phase 2で付与されたperspective:*ラベルに応じて、対応するレビュー観点ドキュメントを動的に読み込みます。
| ラベル | 対応ファイル | 主なレビュー観点 |
|---|---|---|
perspective:workflow |
docs/review-perspectives/workflow.md |
GitHub Actions/CI/CD の設計・セキュリティ |
perspective:security |
docs/review-perspectives/security.md |
認証・認可・入力検証・機密情報の管理 |
perspective:quality |
docs/review-perspectives/quality.md |
テスト・Lint・アクセシビリティ |
perspective:dependency |
docs/review-perspectives/dependency.md |
依存関係の追加・更新・削除 |
perspective:api |
docs/review-perspectives/api.md |
API設計・スキーマ・エラーハンドリング |
perspective:perf |
docs/review-perspectives/perf.md |
パフォーマンス・キャッシュ・最適化 |
perspective:business |
docs/review-perspectives/business.md |
ビジネスロジック・権限・バリデーション |
perspective:general |
docs/review-perspectives/general.md |
汎用的なコード品質(他に該当しない場合) |
レビュー実行時の読み込みフローは次のとおりです。
- PRから
perspective:*ラベル一覧を取得 - 対応する
docs/review-perspectives/*.mdを読み込み - 取得内容をプロンプトに差し込みレビュー実行
たとえば、セキュリティ関連のPRにはsecurity.mdの観点が、API関連のPRにはapi.mdの観点が適用されるといった具合です。
レビュープロンプトの構造
レビュープロンプトは次のルールで構成されます。
- Bedrock経由でClaudeを実行
- Perspective指定と重大度定義をプロンプトに含める
- Blocker/Majorを
blocking: trueとして扱う
分類判定ルール
| 判定 | 条件 | 自動承認 |
|---|---|---|
AI_ONLY |
テストコード、型定義、明確なバグ修正、リファクタリング | 可能 |
NEEDS_HUMAN |
ドキュメント、スタイル、設定ファイル、セキュリティ関連 | 不可 |
自動承認の対象外となる変更タイプ
次の変更は必ず人間のレビューが必要です(NEEDS_HUMANと判定)。
- ドキュメント更新:README.md, *.mdファイル、docs/配下の変更
- スタイル調整:CSS, Tailwindクラス、デザイン・レイアウト変更
- 設定ファイル変更:tsconfig, eslint, prettier, vite.config等
指摘の重大度とblockingフラグ(Conventional Comments準拠)
| 重大度 | blocking | 意味 | 修正要否 |
|---|---|---|---|
[Blocker] |
true |
必ず修正が必要 | 必須 |
[Major] |
true |
強く推奨される修正 | 必須 |
[Minor] |
false |
推奨される改善 | 任意 |
[Nit] |
false |
微細な指摘(スタイル等) | 任意 |
[Question] |
false |
仕様・意図の確認質問 | 回答必須(修正不要) |
[Praise] |
false |
良いコードへの称賛 | 対応不要 |
blocking: trueの指摘が1件以上あると、Devin自動修正が実行されます。
PR説明文の自動生成・更新
Claude Reviewでは、レビュー結果と同時にPR説明文を自動生成・更新する機能があります。
関連 Issue の自動取得
PR本文からclosing keywords(Closes #123, Fixes #456など)を自動的に抽出し、関連Issueを特定します。抽出されたIssue番号はレビュープロンプトに含まれ、Claudeが変更の意図を理解する際のコンテキストとして活用されます。
PRタイトル・説明文の自動生成
ClaudeはPR内の全てのコミットと変更ファイルを分析し、次の手順でタイトルと説明文を自動生成します。
- PR内の全コミット一覧を取得(最大50件)
- 全ての変更ファイルを分析
- PR全体を代表するタイトルを日本語で生成(Conventional Commits形式)
.github/PULL_REQUEST_TEMPLATE.mdに沿って説明文を生成
タイトル生成ルール
- 形式:
{prefix}: {変更内容の要約}(例:feat: ユーザー認証機能の追加) - prefix:feat / fix / docs / refactor / chore / testから変更種別に応じて選択
- 50文字以内で簡潔に日本語で記載
- 複数の変更がある場合は、主要な変更を代表するタイトルに
生成されたタイトルと説明文は、レビュー完了後に自動的にPRへ反映されます(それぞれ生成された場合のみ更新)。PR作成者がタイトルや説明文を適切に書けなかった場合でも、Claudeが内容を自動生成してくれます。最新のコミットだけでなくPRに含まれる全てのコミットを考慮するため、複数回のpushがあっても正確な内容が生成されます。
Phase 5: Devin自動修正
Claudeのレビューで指摘があった場合、またはCIが失敗した場合、Devinが自動修正します。
Devin修正の種類
| ジョブ名 | 用途 | 参照 Playbook |
|---|---|---|
devin-ci-fix |
CI失敗の修正(CIログを解析して自動修正) | fix-ci-failure.devin.md |
devin-review-fix |
レビュー指摘の修正(Claudeの指摘に基づいて自動修正) | fix-review-comments.devin.md |
Devinへの修正指示は次の手順で行います。blocking: trueの指摘だけを抽出し、抽出結果をmacro payloadに組み込んでDevinに送信します。
修正ループの詳細
ループカウントの管理
イテレーションはCI修正 + レビュー修正の合計回数でカウントします。
| Push種別 | カウント動作 | 理由 |
|---|---|---|
| 人間がPR作成 | 0からスタート | 新規PR |
| Devinがpush | カウント継続 | 自動修正ループ中 |
| 人間が修正push | 0にリセット | 人間の修正後は新規扱い |
上限(3回)に達した後でも、人間が修正してpushすればカウントがリセットされ、レビューが再開されます。
Perspectiveラベルの更新ルール
| Push種別 | Perspective Router | ラベル動作 |
|---|---|---|
| 人間がPR作成 | ✅ 実行 | 新規ラベル付与 |
| Devinがpush | ❌ スキップ | 既存ラベル維持 |
| 人間が修正push | ✅ 実行 | 既存ラベル削除 → 再分類 |
ループ終了条件
- 正常終了:CI成功 + レビュー指摘なし → 自動承認
- 上限到達:
iteration_count >= MAX_ITERATIONS→ 人間レビュー依頼 - タイムアウト:CI待機が20分超過 → 人間への確認依頼
自動承認の条件
次のすべてを満たした場合のみ自動承認されます。
- CI成功
- Claudeレビュー完了
- 分類が
AI_ONLY - blockingな指摘がない
- HEAD SHAが変更されていない(レース条件対策)
データ連携方式
Claude → Devinのデータ渡し
Claudeのレビュー結果をDevinに渡す方式は、ジョブ出力による直接連携を採用しています。

構造化出力スキーマ
Claudeに--json-schemaオプションでレビュー結果の構造を指定し、次の項目を必須にしています。
classification(AI_ONLY / NEEDS_HUMAN)- Blocker/Major/Minorの件数フラグとカウント
fix_instructions(修正指示文)issues(指摘一覧:severity / blocking / file / messageなど)
技術的なポイント
1. concurrencyによる並行実行の制御
- 同一PRに対して1つのワークフローのみ実行(
groupで制御) cancel-in-progress: trueのため、Devinが修正をpushした場合:- 新しいワークフローが開始される
- 古いワークフローは自動的にキャンセルされる
- Devinセッションはtrapハンドラーにより自動停止される
- 新しいワークフローはCI完了を待機してからレビュー
2. Devinセッションの自動停止
ワークフローがキャンセルされた際、実行中のDevinセッションを確実に停止するため、二重のセーフティネットを実装しています。
trapハンドラー(即時対応)
Devin API呼び出し中にシグナル(SIGINT/SIGTERM)を受信した場合、trapハンドラーが即座にセッションを停止します。SIGINT/SIGTERMを受けると即座にcleanupを実行し、/tmp/devin_resp.jsonからsession_idを取得して10秒以内にセッションを終了します。
if: cancelled()バックアップステップ
API呼び出しが完了してからキャンセルされた場合に備えて、専用のクリーンアップステップを用意しています。outputsまたは/tmp/devin_resp.jsonからsession_idを取得してセッションを停止します。
GitHub Actionsのキャンセルシーケンス
GitHub Actionsはキャンセル時に次の順序でシグナルを送信します。
SIGINT送信 → 7.5秒待機SIGTERM送信 → 2.5秒待機- 強制終了
trapハンドラーは最初のSIGINTでcleanupを実行するため、最大10秒の猶予内でDevinセッションを停止できます。
3. AWS BedrockによるClaude呼び出し
セキュリティ要件を満たすため、Claude APIではなくAWS Bedrock経由でClaudeを呼び出しています。AWS認証情報を設定し、Claude Code Actionのuse_bedrockを有効化しています。
| 設定項目 | 値 |
|---|---|
| リージョン | us-east-1 |
| IAMロール | <your-bedrock-access-role> |
| モデル(レビュー) | Claude(Bedrock Application Inference Profile) |
| モデル(分類) | Claude Haiku(anthropic.claude-3-haiku-20240307-v1:0) |
4. マクロ形式によるプロンプト管理
Devinへの指示は、macro IDとpayloadをJSONとして渡すマクロ形式で標準化しています。Playbookのmacro IDと一対一で対応しており、一貫性のある指示が可能です。
5. HEAD SHAの検証
レース条件を防ぐため、承認前にHEAD SHAが変更されていないことを確認しています。実行開始時のHEAD SHAと現在のSHAを比較し、一致しない場合は自動承認をスキップします。
使い方
AI Task Implementationの使い方(Slack → Issue → 実装)
SlackからDevinにタスクを依頼すると、Issue作成から実装、PR作成までを自動で行います。各Playbookの詳細なフローは「Devin Playbook」セクションを参照してください。
起動方法
| 方法 | 手順 | 動作 |
|---|---|---|
| Slackから(推奨) | @devin !ai_taskタスク説明 |
DevinがIssue作成 → ai-task ラベル付与 → ai-task-dispatcher.yml発火 → 実装開始 |
| Slackから(複雑なタスク) | @devin !ai_tasksタスク説明 |
Devinが親Issue作成 → sub-issueに分割 → 並列実装 |
| GitHub Issueから | Issue にai-task / ai-tasksラベルを付与 |
ai-task-dispatcher.yml発火 → 実装開始 |
注意点
in-progressラベルがあるIssueはスキップされます(実装中のため)- セキュリティ関連を検出した場合、
!human_reviewへの切り替えを案内してセッション終了 - タスクサイズが合わない場合、適切なPlaybookへの切り替えを案内してセッション終了
AI Review Orchestratorの使い方(PR → レビュー → 承認)
PRが作成・更新されると、ai-review-orchestrator.ymlが自動起動し、Claudeがレビューします。
自動レビューの流れ
- CI完了待機(最大20分)
- Perspective分類(初回のみ、変更内容に応じてラベル付与)
- Claudeレビュー(Perspectiveに基づく観点でレビュー)
- 結果に応じた分岐:
- 指摘あり → Devin自動修正(最大3回)
- AI_ONLY + 指摘なし → 自動承認
- NEEDS_HUMAN → 人間レビュー依頼
Claudeへの質問・修正依頼
PRやIssueに対してClaudeに質問や修正依頼をしたい場合は、@znm-claude-codeをメンションしてコメントします。
操作手順まとめ
- 入口を選ぶ。
@devin !ai_task(単一タスク)/@devin !ai_tasks(分割タスク)/@devin !human_review(人間の承認が前提)。Slackを使わない場合はIssueにラベルを付与する - DevinがIssue/PRを作成し、
ai-review-orchestrator.ymlが自動起動する - CI完了後にClaudeがレビューし、指摘があればDevinが修正する(最大3回)
AI_ONLYかつ指摘なしなら自動承認、NEEDS_HUMANは人間レビューへ。Claudeへの質問や修正依頼は@znm-claude-codeを利用する
運用上の例外(skip-ai-review / renovateなど)は「運用上の注意点」を参照してください。
導入効果
定量的な効果
| 指標 | 導入前 | 導入後 |
|---|---|---|
| PR作成からレビュー開始まで | 平均4時間 | 即時 |
| CIエラー修正時間 | 平均30分/回 | 自動 |
| 単純なIssueの実装開始 | 平均1日 | 即時 |
| RenovatePRの処理 | 手動確認・マージ | 依存関係レビュー後に自動承認 |
定性的な効果
開発者が集中する時間の確保
- 定型的なエラー修正から解放され、創造的な作業に集中できるようになった
レビュー品質の均一化
- Perspectiveに基づくレビューで、一貫した品質のレビューが実現した
- レビュアーの経験や専門分野に依存しない指摘が可能になった
心理的安全性の向上
- AIが最初にレビューすることで、人間のレビューでの「些細な指摘」が減った
- レビュアーは本質的な議論へ集中できるようになった
ナレッジの蓄積
- レビュー観点ドキュメント(
docs/review-perspectives/)が知識ベースとして機能 - 新しいメンバーのオンボーディングにも活用できる
- レビュー観点ドキュメント(
ライブラリ更新の自動化
- Renovateが作成する依存関係の更新PRをClaudeがレビュー
- AI_ONLYかつ指摘なしなら自動承認
- セキュリティパッチの迅速な適用に貢献
Renovate PRの自動レビュー・承認
Renovateが作成した依存関係の更新PRは、専用ワークフロー(ai-renovate-review.yml)で自動処理されます。

自動承認の条件
- patch / minorの安全な更新のみ
- 破壊的変更なし
- Blocker / Major指摘が0件
AI開発の効果測定(週次レポート)
ai-metrics-report.yml により、AI駆動開発の効果を週次で自動計測し、GitHub Issueとして報告します。
計測される KPI
| 指標 | 目標 | 説明 |
|---|---|---|
| AI_ONLYレビュー通過率 | 60%以上 | AIのみで承認可能と判定されたPRの割合 |
| 自動承認率 | - | 実際に自動承認されたPRの割合 |
| Devinの修正成功率 | 70%以上 | Devinが修正を試みたPRのうち、マージに至った割合 |
| イテレーション上限到達率 | 10%以下 | 修正ループが上限(3回)に達したPRの割合 |
| 平均イテレーション回数 | 1.5回以下 | PRあたりの平均の修正回数 |
| CI失敗率 | 20%以下 | CI失敗が発生したPRの割合 |
レポート例
## AI 開発効果測定 週次レポート **集計期間**: 2025-12-15 ~ 2025-12-22 **対象 PR 数**: 25 件 ### 📊 主要指標(KPI) | 指標 | 実績 | 目標 | 状態 | |------|------|------|------| | AI_ONLY レビュー通過率 | 72.0% | 60% 以上 | ✅ | | 自動承認率 | 68.0% | - | - | | Devin 自動修正成功率 | 85.7% | 70% 以上 | ✅ | | イテレーション上限到達率 | 4.0% | 10% 以下 | ✅ | | 平均イテレーション回数 | 1.2 回 | 1.5 回以下 | ✅ | | CI 失敗率 | 16.0% | 20% 以下 | ✅ | 🎉 すべての主要指標が目標を達成しています!
このレポートは毎週月曜10:00 JSTに自動生成され、ai-metricsラベル付きのIssueとして作成されます。
AIコンテキストの自動育成
devin-context-refresh.ymlにより、PRコメントからのフィードバックを元にAIコンテキストドキュメントを週次で自動更新します。
動作フロー

更新対象ファイル
| カテゴリ | ファイル |
|---|---|
| ルート | AGENTS.md |
| docs/ai-context/ | coding-standards.md, context.md, data-model.md, design-template.md, glossary.md, implementation-patterns.md, metrics.md, pr_review_classification.md, pr_review_comment_rules.md, role.md, task-assignment.md |
| docs/guidelines/ | architecture.md, environment-variables.md, error-handling.md, naming-conventions.md, validation.md |
| docs/review-perspectives/ | api.md, business.md, dependency.md, general.md, perf.md, quality.md, security.md, workflow.md |
ドキュメントの階層構造
AIエージェントがコンテキストを読み込む際、次の階層構造で参照が行われます。

- CLAUDE.md:Claude Codeが最初に読み込むファイル。
@AGENTS.mdでメインガイドを参照 - AGENTS.md:AIエージェント向けメインガイド。最重要ルール(3-5個)と各ドキュメントへのパス参照を記載(300行未満を推奨)
- docs/:詳細情報は各サブディレクトリに委譲し、AGENTS.mdからパス参照のみ記載
この構造によってコンテキストの段階的読み込みが可能になり、トークン消費を抑えつつ必要な情報にアクセスできます。
各ディレクトリの役割
| ディレクトリ | 役割 | 使用タイミング |
|---|---|---|
| CLAUDE.md | Claude Codeのエントリーポイント。@AGENTS.mdでAGENTS.mdを参照 |
Claude Code起動時に自動読み込み |
| AGENTS.md | AIエージェント向けメインガイド。最重要ルール(3-5個)と各ドキュメントへの参照を記載 | Devinがセッション開始時に読み込む |
| docs/ai-context/ | コーディング規約、実装パターン、用語集、データモデルなどのコンテキスト情報 | Playbook内で参照先として指定。週次更新でPRコメントから学んだ知見を蓄積 |
| docs/guidelines/ | アーキテクチャ設計、エラーハンドリング、バリデーションなどの詳細な技術ガイドライン | Playbook内で参照先として指定。週次更新で継続的に改善 |
| docs/review-perspectives/ | perspective:* ラベルに対応したレビュー観点ドキュメント |
Claude ReviewがPRのPerspectiveに応じて動的に読み込み(詳細) |
PRレビューで蓄積されたナレッジが自動的にドキュメントに反映されるため、Claudeのレビュー品質も継続的に向上していきます。
残っている課題
- AIでも対応が難しいドメイン固有の判断があり、最終的に人間の合意が必要になるケースが残る
- ワークフローが複雑になり、運用ルールの理解・周知コストが発生している
- AIによる正しい指摘でも、チームの合意形成に時間を要する場合がある
運用上の注意点
スキップラベルの活用
特定のPRでAIレビューをスキップしたい場合は、次のラベルを使用します。
skip-ai-review: AIレビューを完全にスキップrenovate: Renovate PR(専用ワークフローで処理)
人間のレビューが必要なケース
次の変更はNEEDS_HUMANと判定され、必ず人間のレビューが必要です。
- セキュリティ関連の変更
- ドキュメント・READMEの更新
- 設定ファイルの変更
- スタイル・デザインの変更
ワークフロー別ラベル操作
| ワークフロー | 付与するラベル | 削除するラベル |
|---|---|---|
ai-task-dispatcher.yml |
-(条件判定のみ、ラベル操作なし) | - |
ai-task-implementation.yml |
in-progress |
in-progress(失敗時/キャンセル時) |
ai-review-orchestrator.yml |
ci-failed, ai-iteration-{N}, ai-auto-approved, needs-human-review |
ci-failed, ai-auto-approved, needs-human-review, perspective:*, ai-iteration-{N} |
pr-perspective-router.yml |
perspective:* |
perspective:*(再分類時) |
ai-renovate-review.yml |
perspective:dependency, renovate |
- |
ai-metrics-report.yml |
ai-metrics, automated(Issueに付与) |
- |
トラブルシューティング
| 問題 | 対処法 |
|---|---|
| Devinセッションが開始しない | DEVIN_API_KEYの設定を確認 |
| Claudeレビューが実行されない | AWS IAMロールの権限を確認 |
| イテレーション上限に達した | 手動で修正し、ai-iteration-*ラベルを削除 |
| CIタイムアウト | CIの実行時間を確認、CI_WAIT_MINUTESの調整を検討 |
まとめ
この記事では、Claude(レビュー・判断)× Devin(実装・修正)の役割分担によるAI駆動開発ワークフローについて解説しました。
実現した効果
| 指標 | Before | After |
|---|---|---|
| PRレビュー待ち時間 | 平均4時間 | 即時(Claudeが自動レビュー) |
| レビュー指摘の修正 | 手動対応 | Devinが自動修正 |
| CIエラー修正 | 手動対応 | Devinが自動修正(最大3回リトライ) |
| Issue実装開始 | 平均1日 | Slackから即時着手 |
| Renovate PR | 手動確認・マージ | Claudeが依存関係レビューし、AI_ONLYかつ指摘なしなら自動承認 |
| 効果測定 | なし | 週次レポートでKPIを自動計測 |
| ナレッジ育成 | なし | PRコメントからドキュメントを週次で自動更新 |
重要なポイント
- 役割分担:Claudeはレビュー(判断)、Devinは実装(作業)という明確な役割分担
- 人間との協調:AIはあくまでサポートであり、最終判断は人間が行う設計
- 段階的な自動化:すべてを自動化するのではなく、信頼性の高い部分から自動化
- 透明性:すべての判断理由がPRコメントとして記録される
- セーフティネット:イテレーション上限、キャンセル時のクリーンアップ、HEAD SHA検証
今後の展望
- レビュー観点の自動学習
- MCP連携強化
- Confluenceドキュメント読み込み
- Figma MCPからデザイン取得 → 実装まで一気通貫
- Jiraチケット起点の連携追加(Slackと同様のフローで起動)
- 人間レビューコメント時の対応方針の定義(優先度・担当・再レビュー)
- CodeRabbitとの併用検討
- Slack通知の拡充(開始/完了/要人間対応などを分かりやすく通知)
最後に
ZOZOでは、一緒にサービスを作り上げてくれる方を募集中です。ご興味のある方は、以下のリンクからぜひご応募ください。
参考リンク
- anthropics/claude-code-action - Claude CodeのGitHub Action
- Devin API Documentation - Devin APIリファレンス