CodeQL 2.25.2でKotlin 2.3.20対応:GitHub code scanning利用組織が確認すべきこと

2026年4月16日時点で、Kotlinを使う開発組織がGitHub code scanningを継続利用するうえで重要な更新は、CodeQL 2.25.2がKotlin 2.3.20までの分析に対応したことです。これにより、Kotlin側のバージョン更新にセキュリティスキャンが追従しやすくなり、独自の回避策や古いKotlinへの足止めを減らせます。

特に、GitHub上のcode scanningにCodeQLを任せているApplication SecurityチームやKotlin開発者にとっては、「新しいKotlinに上げたいが、CodeQLの対応状況が不安」という判断ポイントが一つ減ったことになります。あわせて、Java/Kotlin向けの誤検知削減やセキュリティ重要度の見直しも含まれているため、単なる言語バージョン対応ではなく、アラート運用の精度にも関わるリリースです。GitHub公式Changelogでは、CodeQL 2.25.2についてKotlin 2.3.20対応、複数クエリの精度改善、複数言語にまたがるsecurity severityの調整が案内されています。(The GitHub Blog)

目次

GitHub CodeQL / code scanningの最新動向として何が変わったのか

今回のCodeQL 2.25.2で、Kotlinチームに最も関係する変更は次の3点です。

変更点Kotlin組織への影響確認すべきこと
Kotlin 2.3.20までの分析に対応Kotlinのアップデート後もGitHub code scanningを継続しやすいリポジトリのKotlinバージョンとCodeQLの実行環境
Java/Kotlin向けクエリの誤検知削減AppSecチームのトリアージ負荷を下げやすい既存アラートの変化、dismiss済みアラートの扱い
Java/Kotlinを含む複数言語でsecurity severityを調整アラート優先度が変わる可能性があるXSS、Android WebView、log injection関連の優先度

GitHubのCodeQL Changelogでは、Java/Kotlinについて「Kotlin versions up to 2.3.20 are now supported」と明記されています。また、java/tainted-arithmeticjava/potentially-weak-cryptographic-algorithmの誤検知削減、Java/Kotlinのjava/xssやAndroid WebView関連クエリの重要度引き上げ、java/log-injectionの重要度引き下げも示されています。(CodeQL)

なぜKotlinショップにとってCodeQL 2.25.2が重要なのか

Kotlinを本格利用している組織では、言語やGradleプラグインの更新がアプリ開発の速度に直結します。ところが、静的解析ツールの言語対応が遅れると、次のような問題が起こりがちです。

  • Kotlinは上げたいが、セキュリティスキャンが壊れるため保留する
  • CodeQLとは別にKotlin用の補助スキャンを追加する
  • 解析対象から一部ディレクトリを外す
  • AppSecチームが「スキャン結果が信頼できるか」を毎回確認する
  • CIの失敗を避けるため、CodeQLの設定に例外処理を増やす

CodeQL 2.25.2のKotlin 2.3.20対応は、こうした運用上の摩擦を減らす更新です。特にGitHub code scanningを標準のセキュリティゲートとして使っている組織では、開発チームがKotlinを更新しても、スキャン基盤側で特別なつぎはぎを入れずに追従しやすくなります。

GitHub Docsでは、CodeQLがGitHub code scanningの分析エンジンとして使われ、検出結果はGitHub上のcode scanning alertsとして表示されると説明されています。CodeQLはJava/Kotlinをサポート対象言語に含み、Java、Kotlin、またはその両方を分析する場合はjava-kotlinを使う点も明記されています。(GitHub Docs)

「カスタム回避策なしで最新に追従できる」とはどういう意味か

ここでいう「カスタム回避策なし」とは、CodeQLの標準的なcode scanning運用から外れずに、Kotlinの比較的新しいバージョンを解析できる状態を指します。

たとえば、次のような対応を避けやすくなります。

避けたい回避策なぜ問題になりやすいかCodeQL 2.25.2で期待できる改善
Kotlinだけ別の静的解析ジョブを追加するCIが複雑になり、結果の集約や重複管理が必要になるCodeQL/code scanning中心の運用に寄せやすい
Kotlinのアップデートをセキュリティスキャン待ちで止める開発チームの技術更新が遅れるKotlin 2.3.20までの対応により更新判断がしやすい
CodeQLの古い設定を固定し続ける新しいクエリ改善や重要度調整を取り込めないGitHub.comのcode scanningでは新しいCodeQLが自動展開される
誤検知を大量にdismissするAppSecレビューの信頼性が落ちるJava/Kotlin向けクエリ改善で一部の誤検知削減が期待できる

GitHub Changelogでは、GitHub.comのcode scanning利用者には新しいCodeQLバージョンが自動的にデプロイされると説明されています。一方、GitHub Enterprise ServerではCodeQL 2.25.2の機能は将来のGHESリリースに含まれ、古いGHESを使う場合はCodeQLの手動アップグレードが選択肢になります。(The GitHub Blog)

Kotlinチームがまず確認すべき3つのポイント

GitHub.comかGHESかを確認する

GitHub.comでGitHub code scanningを使っている場合、CodeQLの新バージョンは自動的に展開されます。つまり、通常はCodeQL CLIを自分で差し替えたり、リポジトリごとに特殊な対応を入れたりする必要はありません。

一方で、GitHub Enterprise Serverを使っている組織では事情が異なります。GHESのバージョンによって利用できるCodeQLの内容が変わるため、Kotlin 2.3.20対応を使いたい場合は、現在のGHESで利用できるCodeQLバージョンを確認してください。

判断基準はシンプルです。

利用環境推奨アクション
GitHub.com次回のcode scanning実行結果を確認し、Kotlin関連の警告やアラート変化を見る
GitHub Enterprise Cloud基本的にはGitHub.com同様に最新動向を確認しつつ、組織設定を点検する
GitHub Enterprise ServerGHESのリリース状況、CodeQLのバージョン、手動アップグレード可否を確認する
外部CIでCodeQL CLIを直接実行使用しているCodeQL CLI / bundleのバージョンを確認する

Kotlin分析でbuild-mode: noneになっていないか確認する

Kotlinプロジェクトでは、CodeQLの「言語対応」だけでなく「ビルドモード」が重要です。GitHub Docsでは、Javaはnoneautobuildmanualに対応する一方、Kotlinはautobuildまたはmanualに対応すると説明されています。さらに、Javaのみのリポジトリでnoneモードを使っていた後からKotlinを追加した場合、Kotlinがサポートされないことを示す警告が出るため、default setupを再有効化するかadvanced setupへ変更する必要があります。(GitHub Docs)

Kotlinファイルがあるのにbuild-mode: noneで運用していると、CodeQL 2.25.2へ上がっていても、Kotlinコードが期待どおり分析されない可能性があります。今回のリリースはKotlin 2.3.20対応を追加するものですが、「Kotlinはビルドが必要」という前提までなくなるわけではありません。

確認すべき箇所は、主に.github/workflows/codeql-analysis.ymlです。

- uses: github/codeql-action/init@v4
  with:
    languages: java-kotlin
    build-mode: autobuild

自動ビルドでうまくいかない場合は、advanced setupでmanualを使い、実際のビルドコマンドを明示します。

- uses: github/codeql-action/init@v4
  with:
    languages: java-kotlin
    build-mode: manual

- run: ./gradlew clean build -x test

- uses: github/codeql-action/analyze@v4

実務では、./gradlew buildが重すぎる場合もあります。その場合は、CodeQLに解析させたいモジュールがビルドされる最小限のGradleタスクに絞るのが現実的です。

アラートの増減を「悪化」と決めつけない

CodeQLの更新後にアラート件数が増減することがあります。これは必ずしもコードの安全性が急に悪化したという意味ではありません。

今回のCodeQL 2.25.2では、Java/Kotlin関連で次のような変化があります。

変化実務上の見方
java/tainted-arithmeticの誤検知削減境界チェックのような意図的な比較処理が不要に警告されにくくなる
java/potentially-weak-cryptographic-algorithmの誤検知削減EC、HMAC、PBKDF2などが過剰に弱い暗号として扱われにくくなる
java/xssの重要度引き上げWebアプリのXSS関連アラートは優先的に見るべき
Android WebView関連クエリの重要度引き上げAndroidアプリではWebView設定やJavaScript bridgeの扱いを再点検する価値がある
java/log-injectionの重要度引き下げ対応不要ではなく、他の高リスク項目との優先順位を見直す

つまり、更新直後は「件数」だけでなく「どのルールIDが変わったか」「新規なのか、重要度だけが変わったのか」を見ることが大切です。

AppSecチーム向け:CodeQL 2.25.2後の運用チェックリスト

CodeQL 2.25.2を受けて、AppSecチームは次の順で確認すると効率的です。

確認項目見る場所判断基準
Kotlin 2.3.20を使うリポジトリがあるかGradle設定、Kotlin plugin設定対象リポジトリを優先確認する
CodeQLがjava-kotlinで実行されているかCodeQL workflowJavaだけのつもりでKotlinが漏れていないか
build-mode: noneが残っていないかCodeQL workflow、default setupの状態Kotlinがあるならautobuildまたはmanualを検討
新規・再分類アラートが増えていないかSecurityタブ、code scanning alertsXSS、Android WebView、暗号関連を優先
dismiss理由が古くなっていないか既存アラートの履歴誤検知削減後も同じ判断でよいか見直す
GHES利用時にCodeQLが古くないか管理者設定、CodeQL bundle必要ならアップグレード計画を立てる

特に大規模組織では、全リポジトリを一度に見るよりも、次のように優先順位を付けると現実的です。

  • 外部入力を扱うAPIサーバー
  • WebViewを使うAndroidアプリ
  • 認証、決済、個人情報を扱うサービス
  • Kotlin 2.3系へ更新済み、または更新予定のリポジトリ
  • CodeQLの警告が以前から出ているリポジトリ

AppSecの観点では、今回の更新を「スキャンツールのニュース」として流すのではなく、「Kotlinアップデートのセキュリティゲートを最新化するタイミング」と捉えるべきです。

Kotlin開発者向け:プルリクエスト前に見ておきたいこと

Kotlin開発者は、CodeQLの細かいクエリ仕様をすべて覚える必要はありません。ただし、次の点を押さえておくと、AppSecレビューで止まりにくくなります。

GradleビルドがCI上で再現できる状態にする

KotlinのCodeQL分析ではビルドが重要です。ローカルでは通るがGitHub Actionsでは依存関係が取れない、特定の環境変数がないとビルドできない、生成コードのタスクが省略されている、といった状態では解析の精度が落ちる可能性があります。

実務でよくある失敗は次の通りです。

失敗例起こる問題対策
private Maven repositoryへの認証がCIにない依存関係解決に失敗するGitHub Actions secretsやOIDC連携を整備する
Android/Kotlin Multiplatformの一部タスクだけ失敗する自動ビルドが途中で止まるmanual buildで解析対象モジュールを明示する
生成コードがビルド前に作られない実際のコードパスが解析されにくい生成タスクをCodeQL前のビルドに含める
テストやLintまで実行して時間切れになるcode scanningが遅くなるCodeQLに必要なコンパイル範囲に絞る

XSSやAndroid WebView関連の指摘を軽く扱わない

CodeQL 2.25.2では、Java/Kotlinのjava/xssやAndroid WebView関連のセキュリティ重要度が引き上げられています。これは、該当するアラートが出たときに、単なる静的解析のノイズとして片付けないほうがよいというシグナルです。(CodeQL)

たとえば、次のようなコードはレビュー対象になりやすい領域です。

  • ユーザー入力をHTMLへ埋め込む処理
  • テンプレートやレスポンス本文を手動生成している箇所
  • Android WebViewでJavaScriptを有効化している箇所
  • addJavascriptInterfaceを使ってネイティブ機能を公開している箇所
  • URL、リダイレクト先、HTML断片を外部入力から組み立てる処理

CodeQLの指摘が出た場合は、まず「本当に外部入力が到達するか」「出力前に適切にエスケープされているか」「WebViewの公開範囲が必要最小限か」を確認しましょう。

default setupとadvanced setupの使い分け

GitHub code scanningには、default setup、advanced setup、外部CIでCodeQL CLIを実行して結果をアップロードする方法があります。GitHub Docsでは、default setupは分析対象言語、実行クエリ、スキャンを起動するイベントを自動選択し、advanced setupではCodeQL workflowを追加してカスタマイズできると説明されています。(GitHub Docs)

Kotlin組織では、次のように使い分けるとよいでしょう。

状況おすすめ
単純なGradle/Maven構成で自動ビルドが通るdefault setupまたはautobuild
モノレポで対象モジュールを絞りたいadvanced setup + manual build
AndroidやKotlin Multiplatformで自動ビルドが不安定advanced setup + 必要なGradleタスクを明示
既存CI基盤でセキュリティスキャンを統合したいCodeQL CLI + SARIFアップロード
社内フレームワークや独自ライブラリのデータフローを補いたいmodel packsやカスタム設定を検討

重要なのは、「Kotlin 2.3.20対応になったから何もしなくてよい」と考えないことです。言語バージョン対応と、正しくビルドされて解析対象に入ることは別問題です。

リリース後にアラートが変わったときの見方

CodeQLのような静的解析エンジンは、リリースごとに対応言語、ライブラリモデル、クエリ精度、重要度が変わります。そのため、CodeQL 2.25.2後にアラートが変わった場合は、次の順で確認すると混乱を避けられます。

確認順見ること目的
1CodeQL実行ログKotlinファイルが正しく分析されたか確認する
2新規アラートのRule ID新しい脆弱性か、重要度変更かを切り分ける
3影響範囲本番コード、テストコード、生成コードのどれかを見る
4データフロー外部入力から危険なsinkまで到達するか確認する
5修正方針コード修正、設定変更、dismissのどれが適切か判断する

特にAppSecチームは、単に「Highが増えた」と開発チームへ差し戻すのではなく、「今回のCodeQL更新でXSS系のseverityが上がったため、外部入力の到達可能性を確認してほしい」のように、理由と確認観点を添えると対応が速くなります。

まだカスタム対応が必要になるケース

CodeQL 2.25.2はKotlin組織にとって前向きな更新ですが、すべてのカスタム対応が不要になるわけではありません。

次のような場合は、引き続き設定調整が必要です。

ケース必要になりやすい対応
GHESで古いCodeQLを使っているCodeQLまたはGHESの更新計画を確認
Kotlinを後から追加したJavaリポジトリbuild-mode: noneからの移行確認
自動ビルドが失敗するadvanced setupでmanual buildを設定
モノレポで不要なモジュールまで解析して遅いビルド対象やworkflow matrixを整理
社内独自フレームワークを多用しているCodeQL model packsやカスタムクエリを検討
アラートの重複やノイズが多いdismiss理由、query filter、スコープ設定を見直す

GitHub Docsでも、標準クエリで認識されないライブラリやフレームワークに対して、分析範囲を拡張できることが説明されています。つまり、今回の更新で「Kotlin言語バージョンの追従」は進みましたが、社内固有のフレームワークやデータフローまで完全に自動で理解されるとは限りません。(GitHub Docs)

いま取るべき実務アクション

Kotlinを使う組織は、CodeQL 2.25.2のリリースを次のように扱うのがおすすめです。

まず、Kotlin 2.3系を使っている、または近く更新予定のリポジトリを洗い出します。次に、GitHub code scanningの実行ログを確認し、java-kotlinで分析されているか、build-mode: noneが残っていないかを点検します。最後に、CodeQL更新後のアラート差分を見て、XSS、Android WebView、暗号関連、log injectionの優先度を見直しましょう。

開発チームにとっての価値は、Kotlinアップデートとセキュリティスキャンを対立させずに済むことです。AppSecチームにとっての価値は、GitHub code scanningを中心にした標準運用を保ちながら、最新の言語対応とクエリ改善を取り込めることです。

CodeQL 2.25.2は派手な新機能というより、Kotlinを実務で使う組織が「スキャン基盤を壊さずに前へ進む」ための重要なメンテナンスリリースです。まずは対象リポジトリのCodeQL workflowとビルドモードを確認し、次回のcode scanning結果でKotlinコードが正しく解析されているかを見てください。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次