一言で
Code Scanning は、コードを 実行せずに 静的解析(SAST)して脆弱性を見つける機能。
CodeQL はコードを クエリ可能なデータベース に変換する。対応するアラートには Copilot Autofix が修正を提案でき、Copilot に修正を依頼することも可能。
Code Scanning と CodeQL は別物 📖 Docs
Code Scanning は GitHub の機能、CodeQL は解析エンジンの 1 つ。PR では AI findings が補完し、他社ツールの結果も SARIF で取り込める。
CodeQL の仕組み 📖 Docs
処理は 2 段階。コードを抽出してデータベース化し、クエリをコンパイルして評価する。
Schema はデータ構造を記述し、database はデータを保存する。言語と build mode ↗ に応じて、ソースコードを直接抽出するか、ビルドを監視する。
CodeQL クエリの読み方
QL は宣言型のロジックプログラミング言語。「バグとはどういう形か」を書くと、evaluator が全インスタンスを見つけてくる。構造は SQL の FROM / WHERE / SELECT とほぼ同じ。
import java // ① 標準ライブラリを読み込む
from IfStmt ifstmt, Block block // ② 調べたい要素を変数として宣言
where
block = ifstmt.getThen() and // ③ 条件で絞り込む
block.getNumStmt() = 0 // → then 節が空のブロック
select ifstmt, "This if-statement is redundant." // ④ 何をどう報告するか
言語の本質はこの形だけ。where が「バグとはどういう形か」の定義そのもので、探索は evaluator がやる。
🔬 セキュリティクエリはこの上に
DataFlow/TaintTrackingを重ね、source / sink / sanitizer を定義して経路を探索する。公式クエリは github/codeql ↗ で OSS 公開されている。通常は公開パックで十分で、独自クエリは「自社フレームワーク固有の source / sink を教える」ときに書く。
📘 詳細: About CodeQL queries ↗ / About data flow analysis ↗
CodeQL が見つける脆弱性
🌐 対応言語 — C/C++、C#、Go、Java/Kotlin、JavaScript/TypeScript、Python、Ruby、Rust、Swift、GitHub Actions。CodeQL 対応言語が 1 つもない repo は スキャンが走らない = Actions 分も消費しない。
主な機能
-
リポジトリの設定を開く
ghas-test-1 → Advanced Security ↗ を開き、Code scanning → CodeQL analysis を見せる。
未設定なら Set up → Advanced が入口。このデモリポジトリには既に workflow があるので、設定を切り替えず既存ファイルを開く。
-
ADVANCED SETUP の中身
codeql.yml ↗ で、
onの push / PR / schedule、言語のmatrix、ランナーのruns-onを順に見せる。C/C++ は build-mode: manual と
make -C src/c/make -C src/cpp。他の言語は none。queries: security-and-quality と C/C++ の CERT / MISRA packs も指し示す。この packs は github/codeql-coding-standards ↗ のもの。追加できるクエリパックの例として紹介する(AUTOSAR C++14 / CERT C, C++ / MISRA C, C++)。
Advanced setup では、ビルド方法や実行条件までバージョン管理された Actions workflowで制御する。
-
設定から実行結果へ
Actions → CodeQL ↗ の既存 run を開き、言語別の Analyze job と初期化、ビルド、解析のログを見せる。
最後に Security → Code scanning ↗ でアラートへ戻る。
画面説明だけなら workflow の変更やコミットは不要。既存のスキャンを止めずに見せる。
まず Default setup。足りなければ repository property でカスタマイズし、独自ビルドが必要なときだけ Advanced へ。
シフトレフト: PR で直す理由
脆弱性を最も安く直せるのは、それを持ち込んだ PR の中。マージされた時点でセキュリティ負債になり、負債はなかなか返済されない。
| 🟢 PR の中 | 🔴 マージ後 | |
|---|---|---|
| 🧠 文脈 | 作成者の記憶がまだ新しい | 数週間後に別の誰かが読み解き直す |
| 🔁 修正コスト | 同じレビューでコミット 1 つ | 新規チケット、PR、レビュー、デプロイ |
| 🚀 露出 | 本番に届かない | 本番に出て、修正されるまで残る |
- 📉 マージ後は放置されがち: マージ済みコードのセキュリティ負債のうち、これまで対応されてきたのは 10% だけ(GitHub のデータ ↗)
- ⏱️ PR の中なら速い: PR で検出したアラートは、Copilot Autofix で修正までの中央値 28 分、手動では 1.5 時間(GitHub, 2024 ↗)
Copilot Autofix: 修正提案 📖 Docs
Copilot Autofix は 対応するアラートに修正パッチを提案する。レビューとテストをしてから適用するもので、修正の成功が保証されるわけではない。
- 🤖 入力: アラートの詳細、周辺コード、CodeQL のデータフロー経路を使って修正を提案。
- 💬 PR 上: 対応するアラートにインラインの修正提案が自動表示される。
- 🛠️ Agentic Autofix がオフのデフォルトブランチのバックログ: Copilot Autofix が有効で対応するアラートなら Generate fix → Create PR with fix。
- 🆓 料金: 従来の Autofix は Copilot ライセンス不要で AI クレジットも消費しない。Code Security に含まれ、Public repo は無料。
- 🔌 有効化: 管理者が無効にしない限り、CodeQL で既定で利用可能。
Agentic Autofix(GA) 📖 Docs
-
1. ENTERPRISE で許可(該当する場合)
Enterprise owner または security manager が
Policies → Advanced Security → Agentic AutofixでAll organizations: Allowedを選ぶ。Enterprise に属さない組織では省略。設定ドキュメント ↗Allowed は組織での設定を許可するだけで、有効化はしない。展開前に課金方法と Code Security AI Credits の予算を確認する。
-
2. 組織の 2 つの設定を見せる
Organization owner または security manager として theomonfort-org の Advanced Security 設定 ↗ を開く。Global settings → Code scanning で Copilot Autofix と Agentic Autofix を確認する。
Copilot Autofix は従来の修正提案を制御。エージェントによる修正を使うには
Agentic Autofix → On。Preview 利用組織も GA 後に再有効化が必要。On にするとデモ repo だけでなく、組織内の対象 repo で既定で有効になる。組織全体への展開を意図しない場合、設定の紹介だけに留めて切り替えない。
-
3. REPOSITORY の設定を確認
選んだデモ repo で
Settings → Advanced Security → Code Security → Agentic Autofixを開く。Repository admin は Off で除外し、上位設定で許可されていれば On に戻せる。従来の提案も使うなら Copilot Autofix はオンのままにする。有効化後は write 権限のあるユーザーがデフォルトブランチのバックログを Copilot に割り当てられる。Copilot ライセンスは不要。設定をオンにするだけでは修正セッションは始まらない。
-
PR の SECURITY BOT
octodemo/octocat_supply-automatic-octo-funicular#57 ↗ を開き、Files changed で
github-advanced-security[bot]のコメントを見せる。Copilot code review とは別の検出結果。意図的に脆弱性を含むデモ PR なので、マージしない。
-
CODEQL と AI 検出を見分ける
CodeQL の XSS 指摘 ↗ は
api/src/routes/cart.ts。ルール名と Show more details から Security のアラートへ進める。CartShareController.phpの AI の SQL injection 指摘 ↗ と command injection 指摘 ↗ では、リスクの説明と修正案を見せる。投稿者は同じ bot でも、AI 検出は PR 上のみ。Security のバックログアラートにはならない。
-
検出から AGENTIC AUTOFIX へ
リンク先の PR は octodemo にあり、theomonfort-org の設定は適用されない。CodeQL の XSS アラート ↗ は参考として開く。修正デモでは、設定済み repo に存在するデフォルトブランチのバックログアラートを選ぶ。PR のみにあるアラートは割り当て不可。
Agentic Autofix が有効なら Assign to Copilot を見せる。オフの場合は、従来の Copilot Autofix が有効で対応するアラートに限り Generate fix が使える。
bot の指摘と修正セッションは別物。Assign to Copilot を実行すると、エージェントが修正を進めて別のドラフト PRを作る。ボタンの紹介だけならセッション開始は不要。
2026-10-15 に GA。 Agentic Autofix が有効なら、デフォルトブランチのバックログで Generate fix は Assign to Copilot に置き換わる。
Autofix と Agentic Autofix の使い分け 📖 Docs
2 つの独立した設定。クラウドエージェントのスイッチではない(2026-10-19 時点)。
⚠️ Preview 利用組織も GA 後に Agentic Autofix の再有効化が必要。
Security Campaigns — 組織横断で計画的に修正
アラートは 見つけた後の運用が本番。件数が多い組織ほど、生のアラート一覧を上から潰すのではなく 期限付きのキャンペーンとして回す。
📘 詳細: About security campaigns(GitHub Docs)↗
私のおすすめ導入チェックリスト 📖 Docs
-
1. 有効化とカバレッジ
ghas-test-1 → Advanced Security ↗ / CodeQL runs ↗: 既存の Advanced setup と言語ごとのジョブを確認。設定済みの repo を Default setup に切り替えない。
-
2. 追加のクエリパック
ghas-test-1 → codeql.yml ↗ / MISRA / CERT / AUTOSAR packs ↗: workflow で追加クエリやパックを設定する箇所を見せる。
-
3. MERGE PROTECTION
ghas-test-1 → New branch ruleset ↗: Require code scanning results → CodeQL。例は Security alerts: High or higher、Alerts: Errors、対象は
main。画面紹介では Disabled のままにする。 -
4. AI SCAN
octodemo ↗ → Policies → Advanced Security → AI Scan、次に theomonfort-org → Global settings ↗ → AI Scan を開く。
Enterprise の許可と Code Security AI Credits 予算を確認。Org での有効化は対象 repo 全体に影響するため、画面紹介では切り替えない。
-
5. AI による修正支援
theomonfort-org → Autofix settings ↗: Copilot Autofix と Agentic Autofix の別々の設定を見せる。Agentic Autofix の有効化前に Enterprise の許可を確認。
ghas-test-1 → Repository override ↗ / Code scanning alerts ↗
-
6. SECURITY CAMPAIGNS
theomonfort-org → Campaigns ↗: Create campaign → From code scanning filters。対象を ghas-test-1 に絞り、担当と期限を設定して draft で保存。
検知の確認 → 新規コードの保護 → バックログの解消。この順番で進める。
URL テンプレート内の ORG、OWNER、REPO を置き換えて使う。
Advanced setup と SARIF 連携
Default で足りないとき(monorepo、特殊なビルド、他社ツール併用)は workflow を自分で書く。
# .github/workflows/codeql.yml
name: CodeQL
on:
push: { branches: [main] }
pull_request: { branches: [main] }
schedule: [{ cron: '30 5 * * 1' }]
jobs:
analyze:
runs-on: ubuntu-latest
permissions: { security-events: write, contents: read }
strategy:
matrix: { language: [javascript, python] }
steps:
- uses: actions/checkout@v4
- uses: github/codeql-action/init@v3
with: { languages: '${{ matrix.language }}', queries: security-extended }
- uses: github/codeql-action/analyze@v3
# サードパーティ SAST(Semgrep / Snyk / ESLint security)も同じ画面に同居する:
- uses: github/codeql-action/upload-sarif@v3
with: { sarif_file: results.sarif }
💡
runs-onを self-hosted runner にすれば Actions 分の課金は発生しない。大規模展開でコストが問題になる場合の第一手。
料金: 3 つのメーター 📖 Docs
▸ + をクリックすると詳細が開きます
repo 種別ごとの利用条件 📖 Docs
| 機能 | Public repo | Private repo Code Security なし | Private repo Code Security あり |
|---|---|---|---|
| Code Scanning 本体 | ✅ 無料 | ❌ | ✅ 含まれる |
| Security campaigns | ❌ | ❌ | ✅ 含まれる |
| Actions 分 | 無料※ | 対象外 | 別途使用量に応じる※ |
📦 本体: CodeQL、カスタムクエリ、SARIF アップロード、対応する Autofix 提案、PR 注釈、Security overview。
💰 Actions※: Public の標準 hosted runner は無料。Private は付属の無料枠を消費し、超過分が課金される。Larger runner は常に課金。
⚠️ Public → private: Code Scanning を継続するには Code Security が必要。
Code Security Risk Assessment(無料の棚卸しスキャン)
1 クリックで Org 内の 最もアクティブな最大 20 リポジトリ を CodeQL スキャンし、どこに脆弱性が眠っているかを可視化する。GHAS / Code Security ライセンス不要、完全無料(2026 年 4 月 GA)。
- 🔎 対象 — 最近のコミットが活発な repo を最大 20 件(毎回選び直し可)
- 📊 出力 — 重大度・言語・ルール種別 別のレポート、Copilot Autofix で修正可能な件数 も表示
- 🕒 頻度 — 90 日に 1 回 再実行可。実行できるのは Org owner / security manager のみ
- 🚀 動かし方 —
Org → Security → Assessments → Run code security risk assessment - 🆓 コスト — ライセンス不要、Actions 分も消費しない — 購入前の判断材料に最適
📊 Secret Risk Assessment(Secret Scanning ↗)とセットで、組織のセキュリティ姿勢を 1 日で可視化できる。実数を見てから Code Security 導入 を判断するのが定石。
📘 詳細: Code security risk assessment ↗ / How exposed is your code? ↗