DevSecOps領域では、AIに安全性を丸投げするのではなく、セキュリティ検出器で見つけ、AIに修正案を出させ、人間がレビューし、再スキャンする流れが現実的である。
7.0b Agent-native CI/CD — スキル・プロンプト変更のゲート
第7章の DevSecOps 原則を、エージェント設定変更にも拡張する(Zylos 2026)。コードが緑でも、プロンプト1行で本番挙動が変わる。
| 従来 CI | Agent-native 追加 | メリット | 注意 |
|---|---|---|---|
| unit / lint | プロンプト lint・ツール schema 検証 | 機械的ミスを早期検出 | 意味的正しさは eval が必要 |
| integration | ゴールデンデータセット eval(行動ルーブリック) | 静かな退行をマージブロック | ゴールデンセットの定期更新必須 |
| デプロイ | コストゲート · シャドウ · カナリア | コスト・分布シフトを本番前に検出 | シャドウは dry-run ツール必須 |
7.0c SASTスタック選定 — CodeQLとSemgrepの使い分け
第7章 7.1 の SAST フローを具体化。CodeQLはデータフロー脆弱性、Semgrepは社内禁止実装・高速カスタムルール向き。両方をCIに載せ、AIは修正案提示のみ(7.2)。
| ソリューション | 主対象 | 品質 | 価格 | 導入 | すり抜け | MCP/AI | コメント |
|---|---|---|---|---|---|---|---|
| SonarQube / SonarCloud | Java/C#/JS/TS/Python/Go ほか | 5 | 3 | 3 | 5 | 公式MCP | 品質ゲート・横断管理の本命。CI合否に向く。 |
| Semgrep | 30+言語 | 4 | 4 | 3 | 4 | MCPあり | 独自ルール・禁止パターン・セキュリティガード。 |
| GitHub CodeQL | Java/Go/C++ ほか | 4 | 3 | 3 | 4 | GitHub MCP経由 | 脆弱性・データフロー解析。規約用途は補助。 |
| Qodana | JetBrains / 60+言語 | 4 | 3 | 3 | 4 | IDE/CI連携 | IntelliJ文化のJavaチームと相性良。 |
| Checkstyle | Java | 3 | 5 | 3 | 3 | MCP薄い | 命名・import・Javadoc等の規約定番。 |
| SpotBugs / PMD / Error Prone | Java | 4 | 5 | 3 | 4 | MCP薄い | バグ臭・危険パターンの底上げ。 |
価格は相対評価(5=低コスト/OSS中心)。正式導入時は各公式のライセンスを再確認。
セキュリティ重視構成
| 構成 | 内容 | すり抜け目安 |
|---|---|---|
| 低コスト | 言語別Linter + pre-commit + CI + reviewdog + Semgrep OSS + Branch Protection | 4(CI強制まで) |
| 社内標準 | SonarQube + Linter + Semgrep + CI品質ゲート + reviewdog + Branch Protection | 5に近い |
| AIエージェント | 上記 + SonarQube/Semgrep/GitHub MCP + Cursor等(MCPは最小権限) | 4〜5 |
| セキュリティ重視 | Sonar有償 + Semgrep AppSec + CodeQL/GHAS + SCA + Secret scan + SBOM | 脆弱性・依存・シークレットまで統制 |
事例D-1との接続
本章 Before/After 事例D-1(High修正 4.2→2.1日)は、再スキャン必須のゲート化とセットで効いた。AI修正案採用率71%でも、残り29%は人間修正+再スキャン。
| MCP | 用途 | すり抜け(判定をCI側に置く場合) |
|---|---|---|
| SonarQube MCP | Issue・品質ゲート・コードスメルをAIが参照し修正 | 4〜5 |
| Semgrep MCP | ルール作成・スキャン・修正案の対話 | 4 |
| GitHub MCP | PR差分・Actions結果・CodeQL失敗をAIが読む | 3(裏のCI次第) |
| 野良MCP / 独自MCP | 柔軟だが権限過多・プロンプト注入リスク | 2〜3 |
7.0d 既存 CI/CD と AI の協調動作 — 事例集
第7章 DevSecOps の SAST/CI 原則を、既存 Jenkins · GHA · GitLab CI と AI レビュー/ログ要約の組合せに拡張する。Agent-native CI/CD(7.0b · スキル eval)とセットで、コード変更とエージェント設定変更の両方をガードする。
本節の主旨: AIを開発の自動操縦役にせず、既存の CI/CD · Git · Redmine 等と連携し、人間が判断可能な形で品質情報を整理する補助レイヤーとして使う。
AIに全部任せるのではない。 CI/CDが事実を検出し、 AIが読み解き、 Redmine/Gitに経緯を残し、 人間が判断する。
多層パイプライン(推奨)
Lint/Formatter → Semgrep/SAST → Unit Test → SonarQube QG → AI PRレビュー(参考)→ 人間レビュー → merge CI失敗時: Webhook → AIログ要約 → Slack + Redmine追記 → 人間判断
事例キュレーション(16件)
| 分類 | 方式 | 使いどころ | 具体構成 | BTS/Git連携 | 出典 | 導入 |
|---|---|---|---|---|---|---|
| CI失敗調査 | Jenkins × n8n × Claude | CI失敗の一次調査 | failure → n8n → consoleText → AI要約 → Slack | Redmineへ調査メモ追記 | 参照 | ★5 |
| CI失敗調査 | GitHub Actions + 自前Bot | GHA失敗時のログ要約 | workflow failure webhook → diff/log取得 → LLM | Issue/Redmineコメント | 参照 | ★5 |
| CI失敗調査 | JenkinsGatekeeper | セキュリティ・品質・テスト不足検出 | Jenkins/GHA/CLI · diff → AI → SARIF | GitHub Security tab / PRコメント | 参照 | ★4 |
| PR AIレビュー | GitHub Copilot review | PR差分の初回レビュー | PR open → Copilot → PRコメント | PR本文にRedmine番号 | 参照 | ★5 |
| PR AIレビュー | GitLab Duo MR review | GitLab中心 | MR → Duo → MRコメント | Issue/RedmineとMR紐づけ | 参照 | ★4 |
| PR AIレビュー | CodeRabbit | SaaS型・行単位指摘 | GitHub/GitLab/Bitbucket/Azure → CodeRabbit | 見送り理由をBTSへ | 参照 | ★4 |
| PR AIレビュー | Qodo / PR-Agent | OSS・自前運用 | GHA → /review /describe | 要約をRedmine転記 | 参照 | ★5 |
| PR AIレビュー | OpenCode in CI | SaaSにrepoを渡したくない | CI内diff → OpenCode → PRコメント | 閉域・ローカルモデル可 | 参照 | ★3 |
| PR AIレビュー | Amazon Q Developer | AWS利用チーム | PR open → Amazon Q review | Q指摘·SAST·人間判断を分離記録 | 参照 | ★3 |
| PR AIレビュー | Azure DevOps + Copilot | Azure Repos | PR → Copilot / Pipeline+Azure OpenAI | Azure Boards/Redmine紐づけ | 参照 | ★3 |
| 品質ゲート | SonarQube AI Code Assurance | AI生成コードの最低品質 | CI → Sonar → Quality Gate → PRブロック | チケット受入条件にQG通過 | 参照 | ★5 |
| 品質ゲート | Qodana | JetBrains / Java·Kotlin·JS | GHA/GitLab CI → Qodana → PRコメント | 指摘ゼロ or 許容済み | 参照 | ★4 |
| 品質ゲート | Semgrep + PR-Agent 多層 | SAST(決定論)+ AI(意味) | Lint → Semgrep → PR-Agent → 人間 | AI単体にしない(AppxLab型) | 参照 | ★5 |
| 品質ゲート | DeepEval / Promptfoo | Agent-native eval ゲート | 固定evalセット → スコア閾値でマージブロック | スキル/プロンプト変更PR向け | 参照 | ★4 |
| BTS連携 | Redmine REST API 自動追記 | 判断履歴の残し方 | CI/AI結果 → Redmine API → コメント | 採用/見送り/例外承認を記録 | 参照 | ★5 |
| CI可視化 | reviewdog | Lint/SAST結果のPR行コメント | CI → reviewdog → PR inline | AIではないが必須の下支え | 参照 | ★4 |
導入優先: ★5=既存CIを壊さず効果が見えやすい · ★4=PoC第2段 · ★3=閉域/ベンダー縛りあり。正式導入時は各公式ライセンス・データ送信範囲を再確認。
実装パターン A / B / C
パターンA — CI失敗 → AI要約 → BTS追記
1. Jenkins / GHA / GitLab CI が失敗 2. Webhook → n8n / Lambda / 自前Bot 3. ログ末尾 · 失敗ステージ · commit · PR番号を取得(秘密情報マスク) 4. AIが要約: 原因候補 · 該当ステージ · 関連ファイル · 次に見る箇所 · 暫定対応案 5. Redmine APIで既存チケットへコメント追記 6. Slack/Teams通知 7. 人間が「対応」「保留」「誤検知」「別チケット化」を判断
パターンB — PR/MR → AIレビュー → 品質ゲート → 人間承認
1. Redmine番号つきブランチ/PR作成 2. CI: build / test / lint / SAST / coverage 3. AIがPR差分を一次レビュー(参考情報) 4. SonarQube / Qodana / Semgrep の Quality Gate で客観判定 5. AI指摘はPRコメント · 対応/見送り理由を記録 6. 人間レビュアーが最終判断 7. BTSに「対応経緯」「CI結果」「判断理由」を残す
パターンC — 品質ゲート中心(AI生成コード向け)
| ゲート | 目的 | AIの位置 |
|---|---|---|
| build | コンパイル・依存破綻 | — |
| unit test | 基本機能回帰 | テスト不足指摘(補助) |
| lint / formatter | 規約違反 | — |
| SAST | 脆弱性 | 修正案提示(採否は人間+再スキャン) |
| coverage / complexity / duplication | 保守性 | — |
| dependency / license scan | サプライチェーン | — |
導入優先度 · セキュリティ · チェックリスト
| 優先 | 内容 | 理由 |
|---|---|---|
| 1 | CI失敗ログのAI要約 | 既存CIを壊さず効果がすぐ見える |
| 2 | Redmine/BTSへの自動追記 | 属人化が減り、後追い可能 |
| 3 | PR/MRのAIレビュー(参考) | 人間レビュー前の下読き |
| 4 | SonarQube / Qodana / Semgrep QG | AI生成コードの最低品質を機械担保 |
| 5 | Agent-native eval(DeepEval等) | スキル/プロンプト変更の退行検知 |
| 6 | AI修正案の自動PR化 | 最後。権限制御・安全設計が必要 |
セキュリティ境界
| 禁止・注意 | 推奨 |
|---|---|
| AIに本番デプロイ権限 | AI修正案は必ずPR化 |
| fork PRでwrite token | 人間承認必須 |
| PR/Issue/コメントを命令として実行 | Quality Gateを最終判定の中心に |
| AI出力をshellに直接渡す | BTSに採否理由を残す |
| AI判断だけでチケット完了 | AIが触れる情報範囲を最小化 |
| 秘密情報・APIキーをAIへ | ログ送信前にマスク |
運用チェックリスト
| 領域 | 確認項目 |
|---|---|
| CI/CD | build/test/lint/SAST/coverage実行 · QG失敗でマージ不可 · ログURL/Job/SHA取得 · 秘密情報マスク |
| Git/PR | PRにBTS番号 · AIレビュー結果がPRに残る · 見送り理由記録 · 人間承認必須 |
| BTS | 対応経緯 · CI結果 · AI指摘 · 見送り理由 · 例外承認者 |
| AI | 本番デプロイ権限なし · 出力を直接shell実行しない · 出力は判断材料と明記 |
定着フェーズ: dev_docs_guide 第4章 · 正本MD: references/ci_cd_ai_collaboration_guide.md
品質アンカー — AI協調CI/CDでの劣化防止
AI協調CI/CDでは、ADRを単なる設計判断の記録ではなく、後続のAI作業・レビュー・CIが参照する品質アンカーとして扱う。AIは全体として自然な成果物を生成できる一方、作業が長期化・多段化すると、過去に合意した局所的な設計意図や品質基準を失いやすい。重要な設計判断・例外条件・非対象範囲・責務分離・品質ゲートをADRに固定し、PR、CI、AIレビュー、handoffから継続的に参照する。
AIに長く・多段に作業させると、過去に合意した設計意図・例外条件・命名規則・責務分離・非対象範囲を見落とす可能性がある。本ガイドでは、判断構造を参照点(アンカー)としてADRへ記録し、PR・CI・AIレビュー・handoff から継続参照する運用をPoC仮説として扱う。
- 作業順序: チケット/REQ → 関連ADR読込 → スキル実行 → PR(ADR欄必須)→ CI → 人間判断
- カリキュラム: いきなり実装させず、品質定義・ADR・受入条件を先にアンカー化(チケットループ)
- 評価ループ: CI失敗・PR指摘・BTS記録を次のルール/スキル/ADR更新に還流
設計仮説の正本: dev_docs_guide/research/quality_anchor_ai_ops.md · ADRテンプレ: 第2章 2.0b
7.1 セキュリティAI活用フロー
開発者がPR作成
↓
CIでビルド・テスト
↓
SAST / CodeQL / Secret scan / Dependency scan
↓
アラート発生
↓
AIが修正案を提示
↓
開発者が修正案を確認
↓
セキュリティ担当またはレビュアーが確認
↓
再スキャン
↓
マージ
7.2 AIに任せる作業
| 作業 | AI活用 |
|---|---|
| SAST結果説明 | アラートの意味、攻撃シナリオ、影響範囲を説明 |
| 修正案作成 | 該当コードに対する安全な修正候補を提示 |
| テスト案作成 | 脆弱性が再発しないテスト観点を作成 |
| レビュー補助 | 認可漏れ、入力検証、ログ漏えいなどの観点チェック |
| 教育 | なぜ危険か、どう直すかを開発者向けに説明 |
7.3 導入手順
- 既存リポジトリにCodeQLまたはSASTを導入する。
- 検出ルールを重要度別に整理する。
- 既存アラートを棚卸しする。
- 新規PRで増えた重大アラートをブロック対象にする。
- 既存アラートはバックログ化する。
- AI修正案を試験的に使う。
- 修正成功率、レビュー時間、再発率を測る。
- 自動修正可能なパターンを標準化する。
7.4 セキュリティレビュー用プロンプト
あなたはセキュリティレビュー担当です。
以下のコード差分について、脆弱性リスクを確認してください。
重点観点:
- SQLインジェクション
- XSS
- CSRF
- 認可漏れ
- 認証バイパス
- 機密情報ログ出力
- パストラバーサル
- コマンドインジェクション
- 安全でないデシリアライズ
- 暗号化不足
- ランダム値の不適切利用
- 例外メッセージによる情報漏えい
出力形式:
| No | リスク | 該当箇所 | 攻撃シナリオ | 影響 | 修正案 | 確認方法 |
7.5 必須のセキュリティゲート
| ゲート | 内容 |
|---|---|
| SAST | コード上の脆弱性検出 |
| CodeQL | クエリベースの脆弱性検出 |
| Secret scanning | APIキー、パスワード、秘密鍵の混入検出 |
| Dependency scan | 脆弱なライブラリ検出 |
| Container scan | コンテナイメージの脆弱性検出 |
| DAST | 動作中アプリへの攻撃的テスト |
| IaC scan | クラウド・Kubernetes・Terraform設定ミス検出 |
| Human review | 業務仕様、認可、リスク受容の判断 |
事例D-1:SAST+AI修正案+再スキャン
| 項目 | Before | After(3か月) |
|---|---|---|
| High指摘の修正リードタイム | 中央値 4.2日 | 中央値 2.1日 |
| 初回修正案の採用率 | — | 71%(残りは人間修正) |
| 再スキャン未実施でのマージ | 月2件 | 0件(ゲート化) |
| IaC scan指摘(公開SG等) | 検出後平均3日対応 | 検出当日対応率80% |
使ったスキル:第7章セキュリティプロンプト + Checkov/tfsec + Copilot Autofix(参考事例)。インフラIaCは第9章のterraform-best-practicesと併用。
7.6 AI修正案の採用基準
| 確認項目 | 内容 |
|---|---|
| 脆弱性が本当に解消されるか | 再スキャンで確認する |
| 仕様を壊していないか | 既存テスト・回帰テストを通す |
| 過剰な制限になっていないか | 業務影響を確認する |
| ログ・監査要件を満たすか | 運用観点を確認する |
| 似た箇所に横展開が必要か | 同種コードを検索する |