GitHubでPHPやシェルスクリプト、Terraformのコードを書いていて、コードスキャンの対応言語一覧にその名前が無いことに気づいたことはないだろうか。公式ドキュメントはその一覧を示したうえで、PHPとScalaを名指しで対象外に挙げている。1 そのリポジトリのプルリクエスト(PR)は、長らく脆弱性チェックの外側に置かれていた。
その前提が2026年10月15日に変わった。言語を選ばずPRの差分を読む「AI Scan」という仕組みが一般提供(GA)になり、PHPやShell/Bash、Terraform、Dockerfileなどを書いたPRでも脆弱性を検出し、修正案まで示せるようになった。2 しかもこのGA化で、以前は必須だったGitHub Copilotのライセンスが不要になった。2 これまで対象外だった言語に、AI Scanはなぜ届くのか。使うのに何が必要で、何が不要になったのか。
CodeQLにPHPが対応しない理由
なぜPHPは対応言語の一覧に入らないのか。この一覧を作っているのは、CodeQLというGitHub自身の解析エンジンだ。GitHubのコードスキャンは、C/C++・C#・Go・Java/Kotlin・JavaScript/TypeScript・Python・Ruby・Rust・Swiftなどに対応する。公式ドキュメントはこの一覧を示したうえで、PHPやScalaなどを対象外と明記している。
公式ドキュメントは解析の手順を次のように説明する。
You generate a CodeQL database to represent your codebase. Then you run CodeQL queries on that database to identify problems in the codebase.
コードそのものを読むのではなく、まずコードベースを「CodeQLデータベース」という検索可能な形に変換し、そこへクエリ(検索条件)を投げて問題を見つける。この変換作業は言語の文法ごとに個別の仕組み(エクストラクタ)が要り、対応言語を増やすにはその言語専用の変換の仕組みを新しく作らなければならない。非対応の言語を無理に解析させると、アラートが出なかったり解析が不完全になったりすると公式ドキュメントは注記している。
つまりPHPが長らく対象外だったのは、見落としではなく、CodeQLというエンジンの構造上の制約だった。この制約を迂回して登場したAI Scanは、何をどう読んでいるのか。
AI ScanはPRの差分をそのまま読む
AI ScanはCodeQLを置き換えるものではなく、補完する位置づけだ。GitHub Changelogは、CodeQLが対応しない言語・フレームワークの例として次を挙げている。
- PHP
- Shell/Bash
- Terraform(HCL)
- Dockerfile
- Java向けのJSP
- C#向けのBlazor
CodeQLがコードをいったんデータベース化してからクエリで検索するのに対し、AI Scanは差分のテキストをAIモデルにそのまま読ませる。言語ごとの変換の仕組みを新たに用意しなくても動く分、対応できる範囲がCodeQLより柔軟になる。一方で、CodeQLのように体系立ったクエリで網羅的に調べる仕組みではない。
動くタイミングと表示のされ方も、CodeQLと足並みを揃えている。
- コードスキャンとリポジトリの設定が両方有効なときに、PRの作成・更新のたびに自動で動く
- 結果はCodeQLの検出と並んで「Conversation」タブと「Files changed」タブに表示され、CodeQLのアラートと区別する「AI」の印が付く
- リスクの説明や修正案が添えられる場合もあるという
ここまでで、CodeQLが届かない言語のPRにもAI Scanが届くことが分かった。では、これを使うには何を用意すればいいのか。
ベータからGAで前提が2つ消えた
AI Scanを使うには何が要るのか。この条件は、GA化までの3カ月で変わっている。AI Scanは2026年7月14日に「AI security detections」という名前でパブリックプレビューとして始まった。この時点では、GitHub Copilotのライセンスが必須だった。動かすリポジトリでCodeQLのデフォルトセットアップが設定されていることも前提だった。CodeQLを補う機能のはずが、CodeQL自体を有効にしていないと使えない状態だ。
ベータ版の機能がGAに向かうとき、要件はむしろ増えるものだと自分は思っていた。実際にはここで要件が逆に減っていった。2026年9月16日、GitHubはCodeQLのデフォルトセットアップという前提を撤廃したと発表した。そして10月15日のGAで、残っていたCopilotライセンスの要件も外れた。
| 時期 | 段階 | Copilotライセンス | CodeQLのデフォルトセットアップ |
|---|---|---|---|
| 2026-07-14 | パブリックプレビュー開始 | 必要 | 必要 |
| 2026-09-16 | パブリックプレビュー継続 | 必要 | 不要に |
| 2026-10-15 | 一般提供(GA) | 不要に | 不要 |
3カ月で、使い始めるための前提が1つずつ外れていったことが分かる。公開リポジトリであれば、組織所有・個人所有を問わずライセンスなしで使える。非公開および組織所有のinternalリポジトリだけは、GitHub Code SecurityまたはGitHub Advanced Securityが要るとGAの発表は記している。では、実際に動かすときに注意する点は何か。
使うときに注意すること
ライセンスが不要になったからといって、無条件で使えるわけではない。実際に動かす前に押さえておきたい点が4つある。
- 課金: AI Scanは「Code Security AI Credits」というクレジットを消費する。具体的な価格はChangelogに記載がなく、ライセンス不要は組織のクレジット消費がゼロになることを意味しない
- 動かないPR: フォークから送られたPRと、Dependabotが作成したPRではAI Scanは実行されない
- マージはブロックしない: 検出結果はあくまで助言的なもので、code scanningのチェック自体を失敗させたり、ルールセットの要件としてPRのマージをブロックしたりはしない
- 別機能との違い: CodeQLの既存のアラートを自動で直してPRを開く「Agentic autofix for code scanning alerts」という別機能も同じ10月15日にGA化しているが、これはAI Scanの検出結果そのものではなく、CodeQLのアラートに対する別の仕組みだ。GitHub Changelog両者は混同しやすいが別物だ
まとめ
GitHubのAI Scanは2026年10月15日に一般提供となり、CodeQLが対応していないPHPやShell/Bash、Terraform、Dockerfileなどのプルリクエストでも脆弱性を検出し、修正案を示せるようになった。7月のベータ開始時はGitHub Copilotのライセンスと、CodeQLのデフォルトセットアップという2つの前提が必要だった。9月16日に後者が、10月15日のGAで前者が外れ、公開リポジトリなら誰でも追加のライセンスなしで使える状態になった。
非公開・internalのリポジトリにはGitHub Code SecurityまたはAdvanced Securityが別途必要で、フォークのPRやDependabotのPRでは動かない。マージを強制的にブロックする機能でもない。自分のリポジトリで言語の壁に当たっていたなら、まずは対象のPRに「AI」マークの検出が出るかどうかを確かめるところから始められる。
コメント
気づきや感想をどうぞ記事への補足や、読んで考えたことをお寄せください。個人情報や、他の人を傷つける内容の投稿はお控えください。
投稿にはGoogleログインが必要です。
Googleでログイン投稿にはGoogleアカウントの表示名が公開されます。メールアドレスは取得・公開しません。
コメントを読み込んでいます…