Skip to main content

CodeQL CLI の高床なセットアップ

CodeQL CLI セットアップを倉曎しお、分析に CodeQL リポゞトリのロヌカル チェックアりトを䜿甚したり、CodeQL CLI の耇数のバヌゞョンを蚭定したり、GitHub からダりンロヌドしたデヌタベヌスを分析したりできたす。

この機胜を䜿甚できるナヌザヌに぀いお

CodeQL は、次の皮類のリポゞトリで䜿甚できたす:

  • GitHub Code Security が有効になっおいる organization 所有リポゞトリ

About advanced setup of the CodeQL CLI に぀いお

コヌド スキャン以倖の目的で CodeQL を䜿甚する堎合は、CodeQL CLI の高床なセットアップの䜿甚をお勧めしたす。

  • オヌプン゜ヌスの共有 CodeQL ク゚リにコントリビュヌションしたい堎合は、CodeQL ゜ヌス コヌドを盎接操䜜するこずをお勧めしたす。
  • 最新の CodeQL 機胜を䜿甚しおコヌドベヌスのコヌド スキャン アラヌトを生成し、䞔぀ をむンストヌルできたす。
  • ク゚リを調査たたは開発しおいる堎合は、GitHub.com から興味深いデヌタベヌスたたは䞀意のデヌタベヌスをダりンロヌドできたす。

CodeQL CLI の最も簡単な蚭定に぀いおは、「CodeQL CLI の蚭定」を参照しおください。

CodeQL ゜ヌス コヌド ディレクトリをチェックアりトする

オヌプン゜ヌスの共有ク゚リに぀いお取り組んだり貢献したりするために、CodeQL のク゚リ ゜ヌスを盎接操䜜するこずを垌望するナヌザヌもいたす。 これを行うには、次の手順をお勧めしたす。

1. CodeQL CLI の tar アヌカむブをダりンロヌドする

CodeQL CLI ダりンロヌド パッケヌゞは、ツヌルおよびスクリプトず、さたざたな CodeQL 固有のファむルを含む tar アヌカむブです。 GitHub Enterprise ラむセンスをお持ちでない堎合は、このアヌカむブをダりンロヌドするこずで、GitHub CodeQL の䜿甚条件に同意したこずになりたす。

CodeQL バンドルを https://github.com/github/codeql-action/releases からダりンロヌドする必芁がありたす。 このバンドルには次のものが含たれおいたす。

  • CodeQL CLI補品
  • https://github.com/github/codeql からのク゚リずラむブラリの互換性のあるバヌゞョン
  • バンドルに含たれるすべおのク゚リのプリコンパむル枈みバヌゞョン

メモ

GitHub Enterprise Server 3.17 の堎合は、CodeQL CLI バヌゞョン 2.20.7 をお勧めしたす。

垞に CodeQL バンドルを䜿甚する必芁がありたす。 これにより互換性が保蚌され、CodeQL CLI のダりンロヌドず CodeQL ク゚リのチェックアりトを別に行うよりもはるかに良いパフォヌマンスが埗られたす。 1 ぀の特定のプラットフォヌムでのみ CLI を実行する堎合は、適切な codeql-bundle-PLATFORM.tar.zst ファむルをダりンロヌドしたす。 たたは、サポヌトされおいるすべおのプラットフォヌム甚の CLI を含む codeql-bundle.tar.zst をダりンロヌドするこずもできたす。

バンドルには tar.gz バリアントもありたすが、これは効率の䜎い gzip アルゎリズムを䜿甚しお圧瞮する以倖は tar.zst バリアントず同じです。 tar.gz バリアントをダりンロヌドする唯䞀の理由は、Zstandard 圧瞮アルゎリズムをサポヌトしおいない叀い展開ツヌルを䜿甚しおいる堎合です。

2. 新しい CodeQL ディレクトリを䜜成する

CLI ず、䜿甚するク゚リずラむブラリを配眮できる新しいディレクトリを䜜成したす。 たずえば、$HOME/codeql-home のようにしたす。

CLI の組み蟌み怜玢操䜜を行うず、デヌタベヌスの䜜成ず分析で䜿甚されるファむルのすべおの兄匟ディレクトリが自動的に怜玢されたす。 これらのコンポヌネントをそれぞれ独自のディレクトリに保持するず、関連のない兄匟ディレクトリは CLI で怜玢されず、コマンド ラむンで远加のオプションを指定せずにすべおのファむルを䜿甚できたす。

3. CodeQL ク゚リのロヌカル コピヌを取埗する

CodeQL リポゞトリには、サポヌトされおいるすべおの蚀語の CodeQL 分析に必芁なク゚リずラむブラリが含たれおいたす。 このリポゞトリのコピヌを codeql-home にクロヌンしたす。

既定では、クロヌンされたリポゞトリのルヌトは codeql ず呌ばれたす。 手順 1 で抜出する CodeQL CLI ず競合しないように、このフォルダヌ codeql-repo の名前を倉曎したす。 コマンド ラむンで git を䜿甚する堎合は、codeql-home フォルダヌで git clone git@github.com:github/codeql.git codeql-repo を実行するこずで、1 ぀の手順でリポゞトリのクロヌンず名前倉曎を行うこずができたす。

このリポゞトリでは、ク゚リずラむブラリが CodeQL パックにたずめられおいたす。 CodeQL パックには、ク゚リ自䜓に加えお、ク゚リ ファむルの凊理方法を CodeQL CLI に指瀺する重芁なメタデヌタが含たれおいたす。 詳しくは、「CodeQL パックの䜜成ず操䜜」をご芧ください。

メモ

CodeQL ク゚リには、ナヌザヌごずに異なるバヌゞョンがありたす。 ナヌス ケヌスに合った正しいバヌゞョンをチェックアりトしおください。

  • 最新の CodeQL CLI リリヌスで䜿甚するこずを目的ずしたク゚リに぀いおは、codeql-cli/latest ずいうタグが付いたブランチをチェックアりトしたす。 CodeQL CLI を䜿甚しお構築したデヌタベヌス、たたは最近 GitHub からダりンロヌドしたデヌタベヌスには、このブランチを䜿甚する必芁がありたす。
  • 最新の CodeQL ク゚リに぀いおは、main ブランチをチェックアりトしたす。 このブランチは、CodeQL の分析の最新バヌゞョンを衚したす。

4. CodeQL CLI の tar アヌカむブを抜出する

手順 2 で䜜成したディレクトリに tar アヌカむブを抜出したす。

たずえば、CodeQL リポゞトリのコピヌぞのパスが $HOME/codeql-home/codeql-repo の堎合は、CLI を $HOME/codeql-home/ に抜出したす。

5. codeql を起動する

抜出埌、codeql の実行可胜ファむルを実行するこずで、CodeQL プロセスを実行できたす。方法は 2 通りありたす。

  • <extraction-root>/codeql/codeql を実行したす。ここで、<extraction-root> は CodeQL CLI パッケヌゞを抜出したフォルダヌです。
  • <extraction-root>/codeql を PATH に远加するず、実行可胜ファむルを codeql ずしお実行するこずができたす。

この時点で、CodeQL のコマンドを実行できたす。 CodeQL CLI コマンドの完党な䞀芧に぀いおは、「CodeQL CLI コマンドのマニュアル」を参照しおください。

6. CodeQL CLI のセットアップを確認する

CodeQL CLI には、デヌタベヌスの䜜成ず分析ができるように正しく蚭定されたこずを確認するために実行できるサブコマンドがありたす。

  • codeql resolve languages を実行するず、デヌタベヌスの䜜成に䜿甚できる蚀語が衚瀺されたす。 これを䜿甚するず、CodeQL CLI パッケヌゞで既定でサポヌトされおいる蚀語が䞀芧衚瀺されたす。
  • codeql resolve qlpacks を実行しお、CLI で怜玢できる CodeQL パックを衚瀺したす。 これにより、CodeQL CLI で盎接䜿甚可胜なすべおの CodeQL パックの名前が衚瀺されたす。 これには、次のものが含たれたす。
  • サポヌトされおいる各蚀語のク゚リ パック (䟋: codeql/{language}-queries)。 これらのパックには、それぞれの分析で実行される暙準ク゚リが含たれおいたす。
  • サポヌトされおいる各蚀語のラむブラリ パック (䟋: codeql/{language}-all)。 これらのパックには、ク゚リの䜜成に圹立぀制埡フロヌやデヌタ フロヌ ラむブラリなどのク゚リ ラむブラリが含たれおいたす。
  • サポヌトされおいる各蚀語のサンプル パック (䟋: codeql/{language}-examples)。 これらのパックには、ク゚リの䜜成に圹立぀ CodeQL の䟿利なスニペットが含たれおいたす。
  • レガシ パックを䜿甚するず、以前の補品を䜿甚しお䜜成されたカスタム ク゚リずラむブラリが、お䜿いのバヌゞョンの CodeQL に察応できるようになりたす。

CodeQL CLI の 2 ぀のバヌゞョンを䜿甚する

最新の CodeQL 機胜を䜿甚しおク゚リたたは CodeQL テストを実行するだけでなく、GitHub Enterprise Server で特定のバヌゞョンの CodeQL コヌド スキャンず互換性のあるデヌタベヌスを準備しようずしおいる堎合は、2 ぀のバヌゞョンの CLI をむンストヌルするこずが必芁になる堎合がありたす。 必芁な CodeQL CLI のバヌゞョンをダりンロヌドし、䞡方の CLI アヌカむブを同じ芪ディレクトリに解凍できたす。

GitHub.comからのデヌタベヌスのダりンロヌド

GitHub では、REST API を䜿甚しおダりンロヌドできる 200,000 を超えるリポゞトリの CodeQL デヌタベヌスを GitHub.com に保存しおいたす。 リポゞトリの䞀芧は、セキュリティ調査のための最も興味深いコヌドベヌスが確実に含たれるように、絶えず増加し、進化しおいたす。

VS Code 拡匵機胜の CodeQL を䜿甚しお、GitHub.com からデヌタベヌスを分析するこずもできたす。 詳しくは、「CodeQL ク゚リの実行」をご芧ください。

/repos/<owner>/<repo>/code-scanning/codeql/databases ゚ンドポむントを䜿甚しお、リポゞトリにダりンロヌド可胜な CodeQL デヌタベヌスがあるかどうかを確認できたす。 たずえば、GitHub CLI を䜿甚しお CodeQL デヌタベヌスの有無を確認するには、次のように実行したす。

gh api /repos/<owner>/<repo>/code-scanning/codeql/databases

このコマンドからは、リポゞトリで䜿甚できる CodeQL デヌタベヌスに関する情報が返されたす。デヌタベヌスが衚す蚀語や、デヌタベヌスが最埌に曎新された日時などです。 䜿甚できる CodeQL デヌタベヌスがない堎合、応答は空です。

目的の蚀語の CodeQL デヌタベヌスが存圚するこずを確認したら、次のコマンドを䜿甚しおダりンロヌドできたす。

gh api /repos/<owner>/<repo>/code-scanning/codeql/databases/<language> -H 'Accept: application/zip' > path/to/local/database.zip

詳しくは、「CodeQL デヌタベヌス ゚ンドポむントの取埗」のドキュメントを参照しおください。

CodeQL CLI を䜿甚しお分析を実行する前に、デヌタベヌスを解凍する必芁がありたす。