This content describes the most recent release of the CodeQL CLI. For more information about this release, see https://github.com/github/codeql-cli-binaries/releases.
To see details of the options available for this command in an earlier release, run the command with the --help
option in your terminal.
構文
codeql query compile [--check-only] [--keep-going] [--threads=<num>] [--ram=<MB>] <options>... -- <file>...
説明
QL コードをコンパイルまたはチェックします。
1 つ以上のクエリをコンパイルします。 通常、このコマンドの主な結果は、クエリのコンパイル済みバージョンがコンパイル キャッシュに書き込まれ、後でクエリが実行されたときに見つかることです。 その他の出力オプションは、主にデバッグ用です。
主なオプション
<file>...
[必須] コンパイルするクエリ。 各引数は、次のいずれかです。
- コンパイルする ql ファイル。
- .ql ファイルを再帰的に検索するディレクトリ。
- 特定のクエリ セットを定義する .qls ファイル。
- インストールされている QL パックの 1 つによってエクスポートされた "既知の" .qls ファイルのベース名。
-n, --check-only
QL が有効であることを確認し、エラーを出力するだけです。実際にはクエリ プランを最適化して格納しません。 これは、完全コンパイルよりもはるかに高速な場合があります。
--[no-]precompile
[詳細設定] コンパイルされた各クエリをバイナリ .qlx
ファイルとして .ql
ソースの横に保存します。
これは、配布用のクエリ パックを準備するときにのみ使用することを想定しています (この場合、codeql pack publish によって自動的に使用されます)。 .qlx
ファイルが存在すると、クエリを実行するその後のコマンドでは、コンパイル済みバージョンが優先されて QL ソースへの変更が無視される場合があります。
使用頻度の低いコンパイル オプションの中には、これと互換性がないものがあり、実行時エラーが発生します。
v2.12.0
以降で使用できます。
--[no-]dump-dil
[詳細設定] コンパイル中に、最適化された DIL 中間表現を標準出力に出力します。
JSON 出力が選択されている場合、DIL は単一行の文字列の配列として表され、どのクエリがコンパイルされるかを識別するためにラップされます。
-k, --[no-]keep-going
エラーが見つかってもコンパイルを続行します。
--[no-]dump-ra
[詳細設定] コンパイル中に、最適化された RA クエリ プランを標準出力に出力します。
JSON 出力が選択されている場合、RA は単一行の文字列の配列として表され、どのクエリがコンパイルされるかを識別するためにラップされます。
--format=<fmt>
出力形式 (text
(既定値) または json
) を選択します。**
-j, --threads=<num>
この数のスレッドをクエリのコンパイルに使用します。
既定値は 1 です。 0 を渡して、コンピューター上のコアごとに 1 つのスレッドを使用したり、N を渡して、N 個のコアを未使用のままにしたりすることができます (ただし、その場合でも、少なくとも 1 つのスレッドが使用されます)。
-M, --ram=<MB>
コンパイラで使用できる必要がある RAM の合計量を設定します。
QL バリアントとコンパイラ制御オプション
--warnings=<mode>
QL コンパイラからの警告を処理する方法。 つぎのいずれかです。
hide
: 警告を表示しません。
show
(既定値): 警告を出力しますが、コンパイルを続行します。**
error
: 警告をエラーとして扱います。
--no-debug-info
デバッグ目的で RA にソースの場所情報を出力しないでください。
--[no-]fast-compilation
[非推奨] [詳細設定] 特に速度の遅い最適化手順を省略します。
--no-release-compatibility
[詳細設定] 移植性を犠牲にして、最新のコンパイラ機能を使用します。
場合によっては、新しい QL 言語機能とエバリュエーターの最適化が、それらが QL コンパイラにおいて既定で有効になる数リリース前に、QL エバリュエーターによってサポートされます。 これにより、最新の CodeQL リリースでクエリを開発するときに生じるパフォーマンスを、コード スキャンまたは CI 統合にまだ使用されている可能性がある少し古いリリースと一致させることができます。
クエリが他の (以前または以降の) CodeQL リリースと互換性があるかどうかを気にする必要がない場合は、このフラグを使用してコンパイラの最近の改善を早期に有効にすることで、パフォーマンスを多少向上させることができます。
リリースに有効にすべき最近の改善がない場合、このオプションは通知することなく何も実行しません。 このため、グローバル CodeQL 構成ファイルで一度にすべて設定しても安全です。
v2.11.1
以降で使用できます。
--[no-]local-checking
使用される QL ソースの部分に対してのみ最初のチェックを実行します。
--no-metadata-verification
QLDoc コメントに埋め込まれたクエリ メタデータの有効性はチェックされません。
--compilation-cache-size=<MB>
[詳細設定] コンパイル キャッシュ ディレクトリの既定の最大サイズをオーバーライドします。
コンパイル環境を設定するためのオプション
--search-path=<dir>[:<dir>...]
QL パックが見つかる可能性があるディレクトリの一覧。 各ディレクトリは、QL パック (またはルートに .codeqlmanifest.json
ファイルを含むパックのバンドル)、または 1 つ以上のこのようなディレクトリの直接の親ディレクトリのいずれかです。
パスに複数のディレクトリが含まれる場合、それらの順序によってそれらの間の優先順位が定義されます。解決する必要があるパック名が複数のディレクトリ ツリーで一致する場合は、最初に指定されたものが優先されます。
オープンソースの CodeQL リポジトリのチェックアウトでこれを指定すると、そこにある言語の 1 つを照会するときに機能するはずです。
アンパックされた CodeQL ツールチェーンの兄弟として CodeQL リポジトリをチェックアウトした場合は、このオプションを指定する必要はありません。他の方法では見つからない QL パックは、このような兄弟ディレクトリで常に検索されます (この既定値が機能しない場合、ユーザーごとの構成ファイルで --search-path
を一度にすべて設定することを強くお勧めします)。
(注: Windows では、パスの区切り記号は ;
です)。
--additional-packs=<dir>[:<dir>...]
このディレクトリの一覧が指定されている場合、パックは、--search-path
内のディレクトリの前に、これらのディレクトリで検索されます。 これらの間の順序は重要ではありません。この一覧の 2 つの異なる場所でパック名が見つかった場合はエラーです。
これは、既定のパスにも表示されるパックの新しいバージョンを一時的に開発している場合に役立ちます。 一方、構成ファイルでこのオプションを上書きすることは "お勧めしません"。一部の内部アクションでは、このオプションをオンザフライで追加し、構成された値がオーバーライドされます。**
(注: Windows では、パスの区切り記号は ;
です)。
--library-path=<dir>[:<dir>...]
[詳細設定] QL ライブラリの生インポート検索パスに追加するオプションのディレクトリ リスト。 これを使う必要があるのは、QL パックとしてパッケージ化されていない QL ライブラリを使用する場合のみです。
(注: Windows では、パスの区切り記号は ;
です)。
--dbscheme=<file>
[詳細設定] どの dbscheme クエリに対してコンパイルする必要があるかを明示的に定義します。 これは、自分が何をしているかを確信している呼び出し元のみが指定する必要があります。
--compilation-cache=<dir>
[詳細設定] コンパイル キャッシュとして使用する追加のディレクトリを指定します。
--no-default-compilation-cache
[詳細設定] クエリを含む QL パックや CodeQL ツールチェーン ディレクトリなどの標準の場所でコンパイル キャッシュを使用しません。
CodeQL パッケージ マネージャーを構成するためのオプション
--registries-auth-stdin
\<registry_url>=\
たとえば、https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2
を渡して、
2 つの GitHub Enterprise Server インスタンスに対して認証を行うことができます。
これは、CODEQL_REGISTRIES_AUTH and GITHUB_TOKEN 環境変数をオーバーライドします。 github.com コンテナー レジストリに対する認証のみが必要な場合は、代わりに、より単純な --github-auth-stdin
オプションを使って認証できます。
--github-auth-stdin
標準入力を使って github.com GitHub Apps トークンまたは個人用アクセス トークンを渡すことにより、github.com コンテナー レジストリに対して認証を行います。
GitHub Enterprise Server コンテナー レジストリに対して認証を行うには、--registries-auth-stdin
を渡すか、CODEQL_REGISTRIES_AUTH 環境変数を使ってください。
これは、GITHUB_TOKEN 環境変数をオーバーライドします。
共通オプション
-h, --help
このヘルプ テキストを表示します。
-J=<opt>
[詳細設定] コマンドを実行している JVM にオプションを指定します
(スペースを含むオプションは正しく処理されないことに注意してください)。
-v, --verbose
出力される進行状況メッセージの数を段階的に増やします。
-q, --quiet
出力される進行状況メッセージの数を段階的に減らします。
--verbosity=<level>
[詳細設定] 詳細レベルを、errors、warnings、progress、progress+、progress++、progress+++ のいずれかに明示的に設定します。 -v
と -q
がオーバーライドされます。
--logdir=<dir>
[詳細設定] タイムスタンプと実行中のサブコマンドの名前を含む生成された名前を使用して、指定されたディレクトリ内の 1 つまたは複数のファイルに詳細なログを書き込みます
(完全に制御できる名前でログ ファイルを書き込むには、代わりに --log-to-stderr
を指定し、必要に応じて stderr をリダイレクトします)。