CodeQLは,GitHubが提供する静的解析(SAST)ツールであり,ソースコードからセキュリティ上の脆弱性や品質上の問題を検出できます.
CodeQLで脆弱性診断を実施する方法は,大きく次の2通りあります.
ただし,いずれの場合においても利用条件・ライセンスがあるため,GitHubの公式ページで必ず確認しておきましょう.
- GitHub Actionsに組み込んでCIで自動実行する方法
- CodeQL CLIを利用してローカル環境で実行する方法
本記事では,それぞれの方法を紹介します.
GitHub ActionsとCodeQL CLIの違い
| 項目 | GitHub Actions | CodeQL CLI |
| 導入の容易さ | ◎ | 〇 |
| ローカルプロジェクトの解析 | × | 〇(ライセンス条件あり) |
| CIへの組み込み | ◎ | |
| 実行環境 | GitHub Actions | ローカル |
GitHub Actions版は設定が簡単で,リポジトリへコードをPushするだけで自動解析できます.
GitHub ActionsによるCodeQL解析は,利用可能なGitHubプラン・リポジトリ設定に依存します.プランや設定によっては,GitHub ActionsによるCodeQL解析を実行できない場合があります.
ただし,CodeQL CLIにはライセンスがあります.オープンソースソフトウェア(OSI承認ライセンス)の解析や学術研究,デモ,GitHub Code Scanning対象外の用途など,利用条件を事前に確認してください.
CodeQL CLI は、パブリック リポジトリ上で無料で使うことができます。 CodeQL CLI は、GitHub Team または GitHub Enterprise Cloud を使い、GitHub Code Security のライセンスを持っている organization によって所有されるプライベート リポジトリでも使用できます。 詳しくは、「GitHub CodeQL の使用条件」と「CodeQL CLI」をご覧ください。
https://docs.github.com/ja/code-security/concepts/code-scanning/codeql/codeql-cli
GitHub ActionsでCodeQLを利用する方法
1)GitHubで対象リポジトリを開きます.
2)Security(または Security and quality)タブを開き,Set up code scanning をクリックします.
3)続いて,CodeQL Analysis の Set up をクリックします.
通常は Default を選択すれば、推奨設定が自動で適用されます.
4)設定をコミットすると,GitHub ActionsによってCodeQLが実行されます.
5)解析結果は Security and quality → View alerts から確認できます.
CodeQL CLIでローカル解析する方法
まずは,CodeQL CLIをローカルで使用できる(「codeql」コマンドを実行できる)ように,環境構築を行う必要があります.
CodeQL CLIの環境構築
まずは,https://github.com/github/codeql-cli-binaries/releases/ から実行ファイルをダウンロードします.
例えば,Windowsの場合は「codeql-win64.zip」をダウンロードし,zipファイルを任意の場所で展開(解凍)します.
続いて,「codeql」や「codeql.exe」が存在するディレクトリのパス
(例:C\Users\UserName\Downloads\codeql-win64\codeql)をシステムの環境変数に追加します.
PowerShellやコマンドプロンプト等で以下のコマンドを実行し,CodeQLのバージョン情報が表示されたら,環境構築は成功です.
codeql --version
CodeQL command-line toolchain release 2.25.6.
Copyright (C) 2019-2026 GitHub, Inc.ローカル解析の実行
ローカル解析(SAST)の実行前に,クエリパックを入手または作成しておく必要があります.
今回は,既存のクエリパックを入手する方法をご紹介します.
クエリパックの入手
以下のコマンドを実行し,クエリパックをダウンロードします.今回は,一例としてJavaScript,Pythonのクエリパックをダウンロードするコマンドをご紹介しています.
解析対象プロジェクトの記述言語に合わせて適宜ダウンロードしてください.
// JavaScript
codeql pack download codeql/javascript-queries
// Python
codeql pack download codeql/python-queriesデータベースの作成
CodeQLでは,ソースコードを直接解析するのではなく,ソースコードをもとに作成されたデータベースを解析対象としています.
従って,下準備としてソースコードのデータベースを事前に作成しておく必要があります.
ここでは,Next.jsやDjangoプロジェクトを例にデータベースを作成するコマンドをご紹介します.
// Next.js
codeql database create nextjs-db --language=javascript-typescript --source-root . --command "npm install; npm run build"
// Django
codeql database create django-db --language=python --source-root .SASTの実行
ここまできたら,いよいよ下準備は完了です.ここからは実際にSASTを実行していきます.
今回は,診断結果をCSVにエクスポートするオプションを付けて実行するコマンドをご紹介します.
// Next.js
codeql database analyze nextjs-db codeql/javascript-queries --format=csv --output results-nextjs.csv
// Django
codeql database analyze django-db codeql/python-queries --format=csv --output results-django.csv以上で下準備~SAST実行までの流れは完了です.エクスポートされたCSVを確認しましょう.
注意点
SASTの特性上,一定程度の偽陰性・偽陽性(過検知)が発生することがあります.言うまでもありませんが,「SASTを実行して満足」ではなく,「実行結果をいかにして解析・分析していくか」がカギになります.
今回ご紹介した方法自体は,比較的誰でも簡単に実行できますが,実行結果の分析には相応の知識と技術が必要になります.
また,セオリー的に1つの診断方法に依存するのは望ましくありません.近年は,DAST(動的診断)やビジネスロジックに着目した人間・AIエージェントによるコードレビューなど複数のレイヤーを組み合わせて診断する方法が推奨されています.
また,技術スタックによっては追加で別のクエリを入手したり,自前でクエリを記述したりする必要があります.(標準クエリでは検出対象となっていない脆弱性や,独自ルールで検出したい脆弱性(例:NoSQLインジェクション)を解析対象にしたい場合など)

