KEEL
AI品質安定化調査

第7章:DevSecOps・セキュリティ向け活用

SAST、CodeQL、AI修正案、セキュリティゲートの設計。

DevSecOps領域では、AIに安全性を丸投げするのではなく、セキュリティ検出器で見つけ、AIに修正案を出させ、人間がレビューし、再スキャンする流れが現実的である。

7.0b Agent-native CI/CD — スキル・プロンプト変更のゲート

第7章の DevSecOps 原則を、エージェント設定変更にも拡張する(Zylos 2026)。コードが緑でも、プロンプト1行で本番挙動が変わる。

従来 CIAgent-native 追加メリット注意
unit / lintプロンプト lint・ツール schema 検証機械的ミスを早期検出意味的正しさは eval が必要
integrationゴールデンデータセット eval(行動ルーブリック)静かな退行をマージブロックゴールデンセットの定期更新必須
デプロイコストゲート · シャドウ · カナリアコスト・分布シフトを本番前に検出シャドウは dry-run ツール必須
PoC 着手点: bonus_kit スキル PR にオフライン eval + トークン計測を1本追加。詳細は 第17章 17.0b
やらないこと: eval なしで本番スキルを差し替える · Installs/Stars のみを品質根拠にする(第13章 13.2d)。

7.0c SASTスタック選定 — CodeQLとSemgrepの使い分け

第7章 7.1 の SAST フローを具体化。CodeQLはデータフロー脆弱性、Semgrepは社内禁止実装・高速カスタムルール向き。両方をCIに載せ、AIは修正案提示のみ(7.2)。

主要ソリューション比較(品質/価格/導入難度/すり抜けレベル/MCP)
ソリューション主対象品質価格導入すり抜けMCP/AIコメント
SonarQube / SonarCloudJava/C#/JS/TS/Python/Go ほか5335公式MCP品質ゲート・横断管理の本命。CI合否に向く。
Semgrep30+言語4434MCPあり独自ルール・禁止パターン・セキュリティガード。
GitHub CodeQLJava/Go/C++ ほか4334GitHub MCP経由脆弱性・データフロー解析。規約用途は補助。
QodanaJetBrains / 60+言語4334IDE/CI連携IntelliJ文化のJavaチームと相性良。
CheckstyleJava3533MCP薄い命名・import・Javadoc等の規約定番。
SpotBugs / PMD / Error ProneJava4534MCP薄いバグ臭・危険パターンの底上げ。

価格は相対評価(5=低コスト/OSS中心)。正式導入時は各公式のライセンスを再確認。

セキュリティ重視構成

価格帯別おすすめ構成
構成内容すり抜け目安
低コスト言語別Linter + pre-commit + CI + reviewdog + Semgrep OSS + Branch Protection4(CI強制まで)
社内標準SonarQube + Linter + Semgrep + CI品質ゲート + reviewdog + Branch Protection5に近い
AIエージェント上記 + SonarQube/Semgrep/GitHub MCP + Cursor等(MCPは最小権限)45
セキュリティ重視Sonar有償 + Semgrep AppSec + CodeQL/GHAS + SCA + Secret scan + SBOM脆弱性・依存・シークレットまで統制
社内テンプレ推奨: SonarQube + 言語別Linter/Formatter + Semgrep + CI + Branch Protection。AI利用時のみ SonarQube MCP / GitHub MCP / Semgrep MCP を追加。

事例D-1との接続

本章 Before/After 事例D-1(High修正 4.2→2.1日)は、再スキャン必須のゲート化とセットで効いた。AI修正案採用率71%でも、残り29%は人間修正+再スキャン。

MCP — 判定者ではなく接続口(最終判定はCI・品質ゲート)
MCP用途すり抜け(判定をCI側に置く場合)
SonarQube MCPIssue・品質ゲート・コードスメルをAIが参照し修正45
Semgrep MCPルール作成・スキャン・修正案の対話4
GitHub MCPPR差分・Actions結果・CodeQL失敗をAIが読む3(裏のCI次第)
野良MCP / 独自MCP柔軟だが権限過多・プロンプト注入リスク23
鉄則:AIに合否判定させない。AIには品質ゲート失敗理由を読ませて直させる。最終判定はCI・静的解析・テスト・品質ゲート。

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に経緯を残し、
人間が判断する。
鉄則: AIの出力をそのままマージ可否・リリース可否に使わない。最終判断は CI/CD の客観結果 · 品質ゲート · 人間レビュー · BTS上の判断履歴に基づく。

多層パイプライン(推奨)

Lint/Formatter → Semgrep/SAST → Unit Test → SonarQube QG
  → AI PRレビュー(参考)→ 人間レビュー → merge
CI失敗時: Webhook → AIログ要約 → Slack + Redmine追記 → 人間判断
RedmineBTS Git PR CI/CDbuild·test·SAST AI ログ解析 AI PRレビュー 人間判断 merge Quality Gate NG → AI要約 · OK → AI下読き → 人間承認

事例キュレーション(16件)

CI/CD × AI 協調事例(16件 · 2026-06 キュレーション)
分類方式使いどころ具体構成BTS/Git連携出典導入
CI失敗調査Jenkins × n8n × ClaudeCI失敗の一次調査failure → n8n → consoleText → AI要約 → SlackRedmineへ調査メモ追記参照★5
CI失敗調査GitHub Actions + 自前BotGHA失敗時のログ要約workflow failure webhook → diff/log取得 → LLMIssue/Redmineコメント参照★5
CI失敗調査JenkinsGatekeeperセキュリティ・品質・テスト不足検出Jenkins/GHA/CLI · diff → AI → SARIFGitHub Security tab / PRコメント参照★4
PR AIレビューGitHub Copilot reviewPR差分の初回レビューPR open → Copilot → PRコメントPR本文にRedmine番号参照★5
PR AIレビューGitLab Duo MR reviewGitLab中心MR → Duo → MRコメントIssue/RedmineとMR紐づけ参照★4
PR AIレビューCodeRabbitSaaS型・行単位指摘GitHub/GitLab/Bitbucket/Azure → CodeRabbit見送り理由をBTSへ参照★4
PR AIレビューQodo / PR-AgentOSS・自前運用GHA → /review /describe要約をRedmine転記参照★5
PR AIレビューOpenCode in CISaaSにrepoを渡したくないCI内diff → OpenCode → PRコメント閉域・ローカルモデル可参照★3
PR AIレビューAmazon Q DeveloperAWS利用チームPR open → Amazon Q reviewQ指摘·SAST·人間判断を分離記録参照★3
PR AIレビューAzure DevOps + CopilotAzure ReposPR → Copilot / Pipeline+Azure OpenAIAzure Boards/Redmine紐づけ参照★3
品質ゲートSonarQube AI Code AssuranceAI生成コードの最低品質CI → Sonar → Quality Gate → PRブロックチケット受入条件にQG通過参照★5
品質ゲートQodanaJetBrains / Java·Kotlin·JSGHA/GitLab CI → Qodana → PRコメント指摘ゼロ or 許容済み参照★4
品質ゲートSemgrep + PR-Agent 多層SAST(決定論)+ AI(意味)Lint → Semgrep → PR-Agent → 人間AI単体にしない(AppxLab型)参照★5
品質ゲートDeepEval / PromptfooAgent-native eval ゲート固定evalセット → スコア閾値でマージブロックスキル/プロンプト変更PR向け参照★4
BTS連携Redmine REST API 自動追記判断履歴の残し方CI/AI結果 → Redmine API → コメント採用/見送り/例外承認を記録参照★5
CI可視化reviewdogLint/SAST結果のPR行コメントCI → reviewdog → PR inlineAIではないが必須の下支え参照★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サプライチェーン
方針: AIレビューコメントは参考。マージ可否は CI/CD + Quality Gate。例外承認は BTS に理由と承認者を残す。

導入優先度 · セキュリティ · チェックリスト

導入優先度(既存CI/CDを活かす順)
優先内容理由
1CI失敗ログのAI要約既存CIを壊さず効果がすぐ見える
2Redmine/BTSへの自動追記属人化が減り、後追い可能
3PR/MRのAIレビュー(参考)人間レビュー前の下読き
4SonarQube / Qodana / Semgrep QGAI生成コードの最低品質を機械担保
5Agent-native eval(DeepEval等)スキル/プロンプト変更の退行検知
6AI修正案の自動PR化最後。権限制御・安全設計が必要

セキュリティ境界

禁止・注意推奨
AIに本番デプロイ権限AI修正案は必ずPR化
fork PRでwrite token人間承認必須
PR/Issue/コメントを命令として実行Quality Gateを最終判定の中心に
AI出力をshellに直接渡すBTSに採否理由を残す
AI判断だけでチケット完了AIが触れる情報範囲を最小化
秘密情報・APIキーをAIへログ送信前にマスク

運用チェックリスト

領域確認項目
CI/CDbuild/test/lint/SAST/coverage実行 · QG失敗でマージ不可 · ログURL/Job/SHA取得 · 秘密情報マスク
Git/PRPRにBTS番号 · AIレビュー結果がPRに残る · 見送り理由記録 · 人間承認必須
BTS対応経緯 · CI結果 · AI指摘 · 見送り理由 · 例外承認者
AI本番デプロイ権限なし · 出力を直接shell実行しない · 出力は判断材料と明記
PoC着手: ① CI失敗AI要約(Jenkins×n8n事例)→ ② Redmine自動追記 → ③ PR-Agent or Copilot review(参考)→ ④ SonarQube QG 必須化。

定着フェーズ: 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仮説として扱う。

Must Preserve(例): AI単独でマージ確定しない · CI失敗をAI判断だけで無視しない · 既存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 導入手順

  1. 既存リポジトリにCodeQLまたはSASTを導入する。
  2. 検出ルールを重要度別に整理する。
  3. 既存アラートを棚卸しする。
  4. 新規PRで増えた重大アラートをブロック対象にする。
  5. 既存アラートはバックログ化する。
  6. AI修正案を試験的に使う。
  7. 修正成功率、レビュー時間、再発率を測る。
  8. 自動修正可能なパターンを標準化する。

7.4 セキュリティレビュー用プロンプト

あなたはセキュリティレビュー担当です。
以下のコード差分について、脆弱性リスクを確認してください。

重点観点:
- SQLインジェクション
- XSS
- CSRF
- 認可漏れ
- 認証バイパス
- 機密情報ログ出力
- パストラバーサル
- コマンドインジェクション
- 安全でないデシリアライズ
- 暗号化不足
- ランダム値の不適切利用
- 例外メッセージによる情報漏えい

出力形式:
| No | リスク | 該当箇所 | 攻撃シナリオ | 影響 | 修正案 | 確認方法 |

7.5 必須のセキュリティゲート

ゲート内容
SASTコード上の脆弱性検出
CodeQLクエリベースの脆弱性検出
Secret scanningAPIキー、パスワード、秘密鍵の混入検出
Dependency scan脆弱なライブラリ検出
Container scanコンテナイメージの脆弱性検出
DAST動作中アプリへの攻撃的テスト
IaC scanクラウド・Kubernetes・Terraform設定ミス検出
Human review業務仕様、認可、リスク受容の判断
Before / After 事例(PoC想定・匿名)

事例D-1:SAST+AI修正案+再スキャン

項目BeforeAfter(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修正案の採用基準

確認項目内容
脆弱性が本当に解消されるか再スキャンで確認する
仕様を壊していないか既存テスト・回帰テストを通す
過剰な制限になっていないか業務影響を確認する
ログ・監査要件を満たすか運用観点を確認する
似た箇所に横展開が必要か同種コードを検索する
KEEL