一言で
Code Scanning は、コードを 実行せずに 静的解析(SAST)して脆弱性を見つける機能。
CodeQL はコードを クエリ可能なデータベース に変換する。対応するアラートには Copilot Autofix が修正を提案でき、Copilot に修正を依頼することも可能。
SAST とは何か
アプリケーションセキュリティのテスト手法は主に 4 つ。Code Scanning が担当するのは SAST(Static Application Security Testing) で、コードを動かさずに ソースそのものを読んで脆弱性を探す。
🔑 覚え方 — SAST は「自分が書いたコード」のバグ、SCA は「他人が書いたコード」のバグ。守備範囲が違うので、どちらか一方では埋まらない。
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 分も消費しない。
Default setup と Advanced setup の違い
CodeQL の有効化方法は 2 つ。まず Default で十分。
🔑 monorepo・特殊なビルド・カスタムクエリが要らない限り、まず Default setup から。履歴を失わずにあとから Advanced に切り替えられる。
📘 詳細: Configuring default setup ↗
Copilot Autofix: 修正提案 📖 Docs
Copilot Autofix は 対応するアラートに修正パッチを提案する。レビューとテストをしてから適用するもので、修正の成功が保証されるわけではない。
- 🤖 入力: アラートの詳細、周辺コード、CodeQL のデータフロー経路を使って修正を提案。
- 💬 PR 上: 対応するアラートにインラインの修正提案が自動表示される。
- 🛠️ クラウドエージェントが使えないバックログ: Generate fix → Create PR with fix。
- 🆓 料金: 従来の Autofix は Copilot ライセンス不要で AI クレジットも消費しない。Code Security に含まれ、Public repo は無料。
- 🔌 有効化: 管理者が無効にしない限り、CodeQL で既定で利用可能。
Agentic Autofix(Public Preview) 📖 Docs
クラウドエージェントが利用可能な場合、個別アラートの Generate fix は Assign to Copilot に置き換わる。
- 🎯 依頼: 個別アラート、またはリポジトリのバックログやキャンペーンから 1〜25 件を選択。
- 🔁 セッション: コードベースを探索 → 修正生成 → 検証と反復 → ドラフト PR。
- 🛂 前提: クラウドエージェントと Autofix の両方が利用可能なこと。事前の Autofix 提案生成は不要。
- 💸 料金: AI クレジット + Actions 分。クラウドエージェントが使えなければ、対応するアラートでは従来の Generate fix を利用できる。
- ⚠️ 検証はベストエフォート: カスタムクエリ、
security-extended、他社ツールのアラートは検証が保証されない。
Autofix と Agentic Autofix の使い分け 📖 Docs
🔑 個別アラートのボタンは リポジトリでの利用可否で決まる。クラウドエージェントが使えれば Assign to Copilot、使えなければ対応するアラートに Generate fix。PR のインライン Autofix 提案は別の機能として残る。
Security Campaigns — 組織横断で計画的に修正
アラートは 見つけた後の運用が本番。件数が多い組織ほど、生のアラート一覧を上から潰すのではなく 期限付きのキャンペーンとして回す。
📘 詳細: About security campaigns(GitHub Docs)↗
始め方(最短ルート)
Repo → Settings → Code security
▸ STEP 1 · DEFAULT SETUP
Set up CodeQL → Default だけ。言語は自動検出され、push と PR で自動実行される。
Alert → Fix
▸ STEP 2 · AUTOFIX
クラウドエージェントが使えれば Assign to Copilot(従量)。使えなければ対応アラートに Generate fix(AI クレジット不要)。
Org → Settings → Code security
▸ STEP 3 · 一括展開
Security configuration を作って新規・既存リポに一括適用。
Repo → Settings → Rules
▸ STEP 4 · マージ保護
Code Scanning は単体では マージを止めない。ruleset で明示的に required にする。
結果は Security タブ と PR の Files changed タブに出る。まず 1 リポで試し、Actions 使用量を見積もってから展開する。
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? ↗