AIが書いたコードは、AIが審査してからあなたに届く。その審査にはセキュリティスキャンが含まれていて、しかも無料だ。
Copilot Coding Agentのセキュリティ自動検証機能は2025年10月に追加された。コードを書くエージェントが、PR提出前にCodeQL解析・シークレットスキャン・依存関係チェックを実行し、問題があれば自己修正してから人間に提出する仕組みだ。
「それで人間のレビューは不要になるのか」——答えは否だ。ただ「何が変わって、何が変わらないのか」をはっきりさせる価値はある。
3種類のスキャンが自動実行される
エージェントがコードを書き終えると、PR提出前に3種類の検査が走る。
GitHubのChangelogに明記されている内容だ。
CodeQL解析。静的解析エンジンのCodeQLがコードを解析し、SQLインジェクション、XSS、バッファオーバーフロー等のパターンを検出する。コードを実行せずにソースコードの構造を分析する仕組みで、Googleが内部で使っていたツールをGitHubが2019年に買収した経緯がある。
シークレットスキャン。APIキー、パスワード、トークン等の機密情報が誤ってコードに混入していないか検出する。例えばconst apiKey = "sk-12345abcdef"のような直書きを検出し、環境変数への移動を試みる。
依存関係の脆弱性チェック。新しく追加したパッケージをGitHub Advisory Databaseと照合し、CVSSスコアがHighまたはCriticalの既知脆弱性がある場合にフラグを立てる。express@4.18.1に既知のCVEがあれば、より安全なバージョンへの更新を試みる。
これら3つをまとめると次のようなイメージになる。
# エージェントのセッションログ(概念図)
[Task] ユーザー認証エンドポイントを実装する
[Code] src/api/auth/login.ts を作成
[Security] CodeQL解析を実行中...
[Security] ⚠️ 23行目: SQLインジェクションの可能性
[Fix] パラメータ化クエリに修正
[Security] シークレットスキャンを実行中...
[Security] ✅ シークレット未検出
[Security] 依存関係をチェック中...
[Security] ⚠️ express@4.18.1 に CVE-2024-29041 (High)
[Fix] express@4.21.2 に更新
[Security] ✅ 全チェック通過
[PR] Draft Pull Requestを作成中...
問題を検出すると自己修正を試み、それでも解決できない場合はフラグ付きでPRを提出する。「問題があったがそのまま出す」ではなく、「修正してから出す、修正できなければ明示する」という挙動だ。
「無料」の意味を具体的に理解する
この機能の経済的なインパクトを正確に把握しておく必要がある。
CodeQLによるコードスキャンは通常、GitHub Advanced Security(GHAS)の一部だ。2025年3月にGHASは2製品に分離され、現在の価格は次のとおりだ(2026年3月時点)。
| 製品 | 料金 |
|---|---|
| GitHub Secret Protection | $19/月/アクティブコミッター |
| GitHub Code Security | $30/月/アクティブコミッター |
Code Securityにはコードスキャン(CodeQL)が含まれる。10人チームで全員がアクティブコミッターなら、Code Securityだけで年間$3,600になる。
公式ブログはこう明記している。
"Code scanning is normally part of GitHub Advanced Security. With Copilot coding agent, you get it for free."
Copilot Coding Agentを使う場合、追加ライセンスも追加設定も不要でコードスキャンが動く。
# 10人チームでのコスト比較(概念)
## コードスキャンをGHAS Code Securityで導入する場合
GitHub Code Security: $30/月 × 10人 = $300/月 = $3,600/年
## Copilot Coding Agentを使う場合
コードスキャン追加コスト: $0
(Copilotプランの費用は別途かかるが、GHAS Code Security分は不要)
ただし「Copilotプランの費用は別にかかる」という点は重要だ。コードスキャンが無料になるのは、すでにCopilot Coding Agentを使っている前提の話だ。「GHAS導入のためにCopilotを契約する」という順番は成立しない。あくまで「Copilotを使っていれば、コードスキャンも無料でついてくる」という位置づけだ。
Coding AgentはCopilot Pro, Pro+, Business, Enterpriseプランで利用できる。BusinessとEnterpriseは管理者がポリシーを有効化する必要がある。
ワークフロー全体像——書く→審査→修正→提出
この機能が意味するのは、単にスキャンが追加されたということではない。「書く→審査→修正→提出」のループが自動化されたことだ。
エージェントはGitHub Actionsで構築されたエフェメラルサンドボックス(使い捨ての隔離された実行環境)で動く。ファイアウォールで外部アクセスが制限されており、外部システムへの意図しない接続が抑制される。作業が完了すると環境は破棄される。
提出されたDraft PRにはセッションログが含まれる。どのスキャンを実行し、どんな問題を検出し、どう修正したか——その痕跡が確認できる。「AIが何をしたか」が追跡可能になっている。
検出できるものとできないもの
この機能の価値を正確に測るには、限界を理解しておく必要がある。
自動改札に例えてみよう。自動改札は偽造された交通カード(既知のパターン)を弾ける。でも「この人は正当な権限でここを通っていいのか」という判断は有人ゲートが必要だ。同じことがコードのセキュリティスキャンにも言える。
// ✅ Coding Agentが検出・自己修正できる
const apiKey = "sk-12345abcdef"; // Secret Scanning → 環境変数への移動を試みる
import serialize from "node-serialize@0.0.4"; // 既知CVE → バージョン更新を試みる
// ❌ Coding Agentが検出できない(人間のレビューが必要)
async function getOrder(orderId: string) {
// 認可チェックなし: リクエスト元のuserId と order.userId の一致確認が抜けている
// CodeQLは「このデータの持ち主か」という設計判断は見えない
return await db.orders.findOne({ where: { id: orderId } });
}
// ✅ 人間が加えるべき認可チェック
async function getOrder(orderId: string, requestUserId: string) {
const order = await db.orders.findOne({ where: { id: orderId } });
if (!order) throw new NotFoundError("Order not found");
if (order.userId !== requestUserId) throw new ForbiddenError("Access denied");
return order;
}
スキャンの仕組み上、これは構造的な限界だ。CodeQLはコードのパターンを見る。「誰がこのデータを取得していいか」はコードの外側——仕様やビジネスロジック——にある。パターン解析では見えない。
セキュリティスキャンで検出できるものとできないものを整理するとこうなる。
「書いた原稿を著者が自分で校閲する」に似ている。誤字脱字(シークレット混入)や文法エラー(既知CVE)は見つける。でも「この章の論旨がそもそも間違っている」(認可設計の欠陥)には気づかない。同じ視点から書いて、同じ視点で読んでいるからだ。
セキュリティスキャンを通過したPRは「既知の危険なパターンが含まれていない」という意味だ。「設計として安全である」「認可ロジックが正しい」という意味ではない。スキャンとアーキテクチャレビューは別の問題を扱っている。
既存記事との位置づけ
このサイトではCopilot Coding Agentを複数の記事で扱っている。
Copilot Coding Agent入門記事ではIssueをアサインしてDraft PRが出るまでの基本フローを解説している。
セルフレビュー記事では「AIがAIをレビューするループ」とdiff-basedの限界を扱った。
本記事はその隣にある話だ。セルフレビューとは独立して、セキュリティスキャンというインフラが自動的に動いている。「コードを審査する機能」ではなく「セキュリティの問題を検出・修正しようとする機能」として位置づけると、役割の違いが明確になる。
今日から確認できること
Copilot Coding Agentを使っているなら、次の点を確認しておく。
まずプランの確認だ。Copilot Pro, Pro+, Business, Enterpriseなら追加設定なしでセキュリティスキャンが動く。BusinessとEnterpriseの場合は管理者がCoding Agent自体を有効化しているか確認する。
次にセッションログの確認だ。エージェントが作成したPRには「Details」からセッションログを確認できる。どのスキャンを実行したか、何を検出して何を修正したか——この痕跡を読む習慣をつけると、エージェントが「何をやったか」が把握できる。
そして人間のレビュー対象を絞り込む。認可チェック、ビジネスロジックの整合性、アーキテクチャ上の判断——スキャンが見えない領域に人間のレビューを集中させる。全部を同じ目で見るより、役割分担で見るほうが漏れが減る。
「AIが書いて、AIがセキュリティを確認して、人間に届く」というフローが現実になっている。そのフローの中でスキャンが何を担い、何を担わないかを理解した上で使うのが、このツールを正しく扱うことになる。

