◀ 用語一覧
NO.19.5

Code Scanning

更新: 2026.09.11

一言で

Code Scanning は、コードを 実行せずに 静的解析(SAST)して脆弱性を見つける機能。

CodeQL はコードを クエリ可能なデータベース に変換する。対応するアラートには Copilot Autofix が修正を提案でき、Copilot に修正を依頼することも可能。

SAST とは何か

アプリケーションセキュリティのテスト手法は主に 4 つ。Code Scanning が担当するのは SAST(Static Application Security Testing) で、コードを動かさずに ソースそのものを読んで脆弱性を探す。

▸ クリックで詳細

SAST(静的解析)

SAST — 静的解析

ソースコードを 実行せずに 解析する。デプロイどころかビルドすら不要なので コミット / PR の時点で回せる(shift-left)= 修正コストが最小。到達しないコードパスも含めて全体を見られる反面、実行時にしか分からない設定ミスや認証フローの穴は見えない。古典的な弱点は誤検知の多さで、CodeQL がデータフロー解析で潰しにいっているのはまさにそこ。

GitHub の担当機能: Code Scanning / CodeQL

DAST(動的解析)

DAST — 動的解析

動いているアプリに 外から攻撃リクエストを撃ち込む。「実際に刺さるか」を確認できるのが強みだが、テストできるのは デプロイ後 かつ クローラが到達できた画面だけ。どの行が原因かも直接は分からない。

GitHub 純正機能はなし。結果を SARIF で Code Scanning に取り込む

SCA(依存関係解析)

SCA — 依存関係解析

自分が書いていない ライブラリ側の既知の脆弱性(CVE) を洗う。現代のアプリはコードの大半が依存パッケージなので、件数ベースでは一番のヒット源になりやすい。

GitHub の担当機能: Dependabot / Dependency review

Secret Scanning

Secret Scanning — 資格情報の検出

脆弱性ではなく コードに書いてしまった鍵やトークン を探す。攻撃者からすれば一番安上がりな侵入口なので、SAST より優先度が高いことも多い。

GitHub の担当機能: Secret Protection

手法を選んでください ▸

🔑 覚え方 — SAST は「自分が書いたコード」のバグ、SCA は「他人が書いたコード」のバグ。守備範囲が違うので、どちらか一方では埋まらない。

Code Scanning と CodeQL は別物 📖 Docs

Code Scanning は GitHub の機能、CodeQL は解析エンジンの 1 つ。PR では AI findings が補完し、他社ツールの結果も SARIF で取り込める。

▸ クリックで詳細

Code Scanning(機能)

Code Scanning — GitHub 側の受け皿

静的解析の結果を GitHub 上に集約して見せる 機能。Security タブのアラート一覧、PR の Files changed へのインラインコメント、マージ保護、Security overview、REST / GraphQL API、Issue 連携。エンジンが何であろうと結果はここに集まる

CodeQL(エンジン)

CodeQL — 解析エンジン

GitHub が 2019 年に Semmle から獲得 したセマンティック解析エンジン。GitHub の既定エンジンではあるが、GitHub の外でも動く — CodeQL CLI を使えば他社 CI でもローカルでも実行できる。

AI findings(PR のみ)

AI security detections

PHP、Bash、HCL、Dockerfile など、未対応の言語やフレームワークを対象に CodeQL を補完PR のみで、全体スキャンやバックログのアラートはない。助言扱いでマージをブロックしない。オプトインと CodeQL default setup が必要で、AI クレジットを消費する。

Public preview: GHAS + Copilot ライセンス。📘 Docs ↗

SARIF(接続規格)

SARIF — 二つをつなぐ標準フォーマット

静的解析結果の標準フォーマット(OASIS 標準)。Semgrep / Snyk / Checkmarx / ESLint security などの出力を github/codeql-action/upload-sarif で流し込めば、CodeQL の結果と同じ画面に同居 する。

📘 SARIF support ↗

項目を選んでください ▸

CodeQL の仕組み 📖 Docs

処理は 2 段階。コードを抽出してデータベース化し、クエリをコンパイルして評価する。

CodeQL の構成: ソースコードとビルドの監視から Extractor がデータベースを作成。Schema、Query、Libraries が QL compiler に入り、Evaluator がコンパイル済みクエリとデータベースから結果を生成する。ビルド成果物は別系統。

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 が見つける脆弱性

▸ クリックで詳細

インジェクション系

インジェクション系

SQL injection / command injection / path traversal / XSS / SSRF。ユーザー入力がエスケープされないまま解釈系(SQL、シェル、ファイルパス、HTML、HTTP クライアント)へ届くパターン。CodeQL の主戦場で、データフロー解析がそのまま効く領域。

認証・認可・暗号

認証・認可・暗号

認可漏れ(broken access control)、弱い暗号アルゴリズム(MD5 / SHA-1)、安全でない乱数生成、ハードコードされた資格情報、証明書検証の無効化など。

メモリ安全性 (C/C++)

メモリ安全性(C/C++)

buffer overflow / use after free / null dereference / 整数オーバーフロー。型とポインタの流れをデータベース上で追えるからこそ検出できる領域で、正規表現ベースのツールでは手が届かない。

データフロー追跡

データフロー追跡(taint tracking)

source → sink の 経路そのものをアラートに添えて表示する。途中で sanitizer を通っていれば除外されるので誤検知が出にくい。models-as-data を使えば 自社フレームワーク固有の source / sink / sanitizer をクエリを書かずに追加できる。

📘 sanitizers in models-as-data ↗

CI/CD(Actions)

CI/CD(GitHub Actions)

workflow 自体も解析対象。pull_request_target と信頼できない checkout の組合せ、script injection、過剰な permissions、未ピン留めの third-party action など、サプライチェーン側の穴を拾う。

カテゴリを選んでください ▸

🌐 対応言語 — 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 で十分

▸ クリックで比較

Default setup

Default setup — 1 クリック

設定ファイル不要。GitHub が言語を自動検出し、default クエリセットを選び、push / PR / 週次スケジュールのトリガーまで自動で組む。多くの言語で ビルド不要。組織の設定画面から全リポジトリに一括展開できるため、大規模ロールアウトで現実的に選べる唯一の選択肢

向いている対象: ほぼ全てのリポジトリ、そして一括展開

Advanced setup

Advanced setup — 自前の workflow

.github/workflows/codeql.yml を自分で持つ。言語、トリガー、独自ビルドコマンド、クエリスイート(default / security-extended / security-and-quality / カスタムパック)を全て制御できる。代償として リポジトリごとに workflow ファイルの保守 が発生する。

向いている対象: monorepo、特殊ビルド、カスタムクエリ

課金の違い

課金に差はない

どちらも GitHub Actions の workflow として動き、private リポジトリでは同じレートで Actions 分を消費する。「Default にすれば安い」も「Advanced にすれば安い」も成り立たない。実際に金額を動かすのは スキャン頻度・リポジトリ規模・ランナー種別

詳細は「料金」スライドの 3 つのメーターを参照

選択してください ▸

🔑 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

▸ + をクリックすると両者の違いが開きます

出力の形パッチ vs PR

🔧 Autofixレビューして適用する修正提案。バックログでは Create PR with fix で提案からドラフト PR を作成できる

🤖 AgenticCopilot が作成する ドラフト Pull Request。レビューして取り込む

修正範囲提案 vs 探索

🔧 Autofixアラートと渡されたコードのコンテキストを基にした 対象を絞った修正提案

🤖 Agentic複数ファイル。リポジトリ全体を踏まえたリファクタや共通処理の追加まで踏み込める

対応単位個別 vs 一括

🔧 Autofixクラウドエージェントが使えない場合、対応するバックログのアラートで Generate fix。PR 上の提案は一括適用できる

🤖 Agenticリポジトリのバックログやキャンペーンから 1〜25 件を選び、修正 PR を依頼できる

検証と反復一発 vs 対話

🔧 Autofix1 回の修正提案。マージ前に PR 上でレビューとテストを行う

🤖 Agenticベストエフォートで検証と反復を行う。セッションログを確認し、@copilot コメントで追加修正を依頼できる

所要時間秒 vs 分

🔧 Autofix数秒。同期処理なので画面を見ながら判断できる

🤖 Agentic数分。バックグラウンドの非同期処理で、セッションは最大 59 分

ライセンスとコスト無料 vs 従量

🔧 Autofix無料。Copilot ライセンス不要、AI クレジットも消費しない。Code Security / GHAS があれば追加費用ゼロ

🤖 AgenticCopilot 有料プラン(クラウドエージェント有効)が必要。AI クレジット + Actions 分 を消費する

🔑 個別アラートのボタンは リポジトリでの利用可否で決まる。クラウドエージェントが使えれば Assign to Copilot、使えなければ対応するアラートに Generate fix。PR のインライン Autofix 提案は別の機能として残る。

Security Campaigns — 組織横断で計画的に修正

アラートは 見つけた後の運用が本番。件数が多い組織ほど、生のアラート一覧を上から潰すのではなく 期限付きのキャンペーンとして回す。

▸ ステップをクリックすると詳細が出ます

対象を絞る

🎯 対象を絞る — 全社一斉にしない

Org → Security and quality → Campaigns → New campaign から From template / From code scanning filters を選ぶ。

severity / CWE / クエリ / 言語 / repo / team / 経過日数で絞り込む。repo custom property(例 props.BusinessPriority:Urgent)で「守るべき repo」だけに寄せるのが定石。上限は 1000 アラート

優先度

⚡ 優先度 — 「終わるリスト」にする

まず critical / high と、実際に到達可能なデータフローを持つものから。security-extended のバックログを丸ごと積むと誰もやらない。

絞り込みプレビューで件数を見ながら調整する。1 スプリントで終わる分量まで削るのが、キャンペーンを機能させる唯一のコツ。

オーナー

👥 オーナー — 名前と期限をつける

キャンペーンには必ず due datecampaign manager を設定する。manager に指名できるのは org owner / security manager だけ。

アラートは CODEOWNERS / 指定チームにルーティングされ、公開するとアラートが見える全員に通知が飛び、各 repo の Security タブにも表示される。

一括修正

🤖 一括修正 — Copilot にまとめて渡す

1〜25 件のアラートを選び Copilot に依頼する。クラウドエージェントが利用可能なら Agentic Autofix が動き、AI クレジット + Actions 分を消費する。

残りは Autofix の提案を batch apply で PR にまとめて適用。ダッシュボードで open / fixed / overdue が burn down していく。

ステップを選んでください ▸

📘 詳細: 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-onself-hosted runner にすれば Actions 分の課金は発生しない。大規模展開でコストが問題になる場合の第一手。

料金: 3 つのメーター 📖 Docs

▸ + をクリックすると詳細が開きます

コストどう測られるか知っておくこと
💺 ライセンス $30 / active committer / 月
GitHub Code Security
何が含まれる

CodeQL(default / advanced)、Copilot Autofix、SARIF アップロード、Security overview、Security campaigns、カスタムクエリ。Autofix は追加費用ゼロ

数え方

直近 90 日 に有効な repo へコミットが push された作者が active committer。Enterprise 内の対象 repo や Org をまたいでも 1 人 1 ライセンス。GitHub App の bot は対象外。Code Security は 単体購入できる

⚙️ Actions 分 CodeQL は Actions で実行。Private のスキャンは実行分を消費し、超過分が課金される。
いつ回るか

Default setup は default / protected branch への push、そこへの PR、週次スケジュールで動く。実行分は 各実行の時間、repo 数、言語数、頻度で決まる。

抑え方

self-hosted runner なら Actions 課金なし。または Actions の予算を設定する。Code Security ライセンスに Actions 分は含まれない — 別メーターだと理解しておく。

実測する

Actions usage metrics を workflow 名で絞れば、CodeQL だけの消費分が出る。見積もりではなく実測値で議論できる。
github.com/orgs/<org>/actions/metrics/usage?filters=codeql.yml

🤖 AI クレジット AI findings(検知)と Agentic Autofix(修正)は従量課金。従来の Autofix 提案は無料。
AI findings

オプトインで CodeQL 非対応言語(PHP / Shell / Terraform / Dockerfile)を PR 上のみで AI 検査。修正を依頼しなくても AI クレジットを消費する。Public preview では GHAS + Copilot ライセンスと CodeQL default setup が必要。Docs ↗

Copilot Autofix

Copilot ライセンス 不要、AI クレジットも 消費しない。Code Security があれば追加費用ゼロで使える。

Agentic Autofix

クラウドエージェントのセッションとして課金され、AI クレジット + Actions 分 を消費する(1 クレジット = $0.01、モデルとトークン量で変動)。ユーザー予算は必ず停止するが、Org 予算はプール消費後にしか効かない。

repo 種別ごとの利用条件 📖 Docs

機能Public repoPrivate 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? ↗