Skip to main content

クエリの実行

単一のクエリを実行します。

この機能を使用できるユーザーについて

CodeQL は、次の種類のリポジトリで使用できます:

この記事の内容

このコンテンツでは、CodeQL CLI の最新リリースについて説明します。 このリリースについて詳しくは、 https://github.com/github/codeql-cli-binaries/releases をご覧ください。

以前のリリースの、このコマンドで使えるオプションを詳しく確認するには、ターミナルで --help オプションを指定してコマンドを実行してください。

構文

Shell
codeql query run (--database=<database> | --dataset=<dataset>) [--output=<file.bqrs>] [--threads=<num>] [--ram=<MB>] <options>... -- <file.ql>

説明

単一のクエリを実行します。

このコマンドは、CodeQL データベースまたは名前の QL データセットに対して単一のクエリを実行します。

既定では、クエリの結果は、人間にわかりやすいレンダリングでターミナルに表示されます。 結果をさらに処理する必要がある場合、--output オプションを使用して、中間のバイナリ形式のファイルに結果を書き込むことを強くお勧めします。その後、codeql bqrs decode によって、これをコンピューターでより解釈しやすい表現にアンパックできます。

クエリによって、ソース コード アラートとして解釈できる形式で結果が生成される場合、codeql database analyze を実行する方が便利な場合があります。 特に、codeql database analyze では、さまざまなアラート ビューアーで使用できる SARIF 形式の出力を生成できます。

複数のクエリを並列で実行するには、「codeql database run-queries」を参照してください。

[オプション]

主なオプション

<file.ql>

[必須] 実行するクエリの QL ソース。

-o, --output=<file.bqrs>

クエリの出力が BQRS 形式で書き込まれるファイル。

クエリの対象を選択するためのオプション

これらのオプションの 1 つだけを指定する必要があります。

-d, --database=<database>

クエリを実行する CodeQL データベースへのパス。

--dataset=<dataset>

[詳細設定] クエリを実行する名前の QL データセットへのパス。

クエリ エバリュエーターを制御するためのオプション

--[no-]tuple-counting

[詳細設定] クエリ エバリュエーター ログの各評価ステップのタプル数を表示します。 --evaluator-log オプションを指定すると、コマンドで生成されるテキストベースのログと構造化された JSON ログの両方にタプル数が含まれます (これは、複雑な QL コードのパフォーマンス最適化に役立ちます)。

--timeout=<seconds>

[詳細設定] クエリ評価のタイムアウトの長さを秒単位で設定します。

タイムアウト機能は、複雑なクエリの評価に "かなり長い時間" がかかるケースを検出することを目的としています。 クエリの評価にかかる合計時間を制限するのは効果的な方法ではありません。 評価は、計算の個別に時間指定された各部分がタイムアウト内に完了する限り続行できます。 現在、これらの個別に時間指定された部分は、最適化されたクエリの "RA レイヤー" ですが、将来変更される可能性があります。

タイムアウトが指定されていない場合、またはタイムアウトに 0 が指定されている場合、タイムアウトは設定されません (デフォルトのタイムアウトが 5 分である codeql test run を除きます)。

-j, --threads=<num>

この数のスレッドをクエリの評価に使用します。

デフォルト値は 1 です。 0 を渡して、コンピューター上のコアごとに 1 つのスレッドを使用したり、N を渡して、N 個のコアを未使用のままにしたりすることができます (ただし、その場合でも、少なくとも 1 つのスレッドが使用されます)。

--[no-]save-cache

[詳細設定] 中間結果をディスク キャッシュに積極的に書き込みます。 これにはより多くの時間がかかり、使用されるディスク領域も (はるかに) 多くなりますが、同様のクエリの後続の実行が高速化される可能性があります。

--[no-]expect-discarded-cache

[詳細設定] クエリの実行後にキャッシュが破棄されるという前提に基づいて、評価する述語とディスク キャッシュに書き込む内容を決定します。

--[no-]keep-full-cache

[詳細設定] 評価が完了した後、ディスク キャッシュをクリーンアップしません。 これにより、後で codeql dataset cleanup または codeql database cleanup を実行する場合に時間を節約できます。

--max-disk-cache=<MB>

中間クエリ結果のディスク キャッシュで使用できる最大容量を設定します。

このサイズが明示的に構成されていない場合、エバリュエーターによって、データセットのサイズとクエリの複雑さに基づき、"妥当な" 量のキャッシュ スペースを使うことが試みられます。 このデフォルトの使用量よりも高い制限を明示的に設定すると、追加のキャッシュが有効になり、後のクエリが高速化されます。

--min-disk-free=<MB>

[詳細設定] ファイル システムの空き領域の目標量を設定します。

--max-disk-cache が指定されていない場合、ファイル システムの空き容量がこの値を下回ると、エバリュエーターによってディスク キャッシュの使用量を抑えることが試みられます。

--min-disk-free-pct=<pct>

[詳細設定] ファイル システムの空き領域の目標割合を設定します。

--max-disk-cache が指定されていない場合、ファイル システムの空き容量がこの割合を下回ると、エバリュエーターはディスク キャッシュの使用量を抑えようとします。

--external=<pred>=<file.csv>

外部述語 <pred> の行を含む CSV ファイル。 複数の --external オプションを指定できます。

--xterm-progress=<mode>

[詳細設定] xterm 制御シーケンスを使用して、QL 評価中に進行状況の追跡を表示するかどうかを制御します。 次のいずれかの値になります。

no: ファンシーな進行状況を表示しません。ダム端末と見なします。

auto (デフォルト値): コマンドが適切なターミナルで実行されているかどうかを自動検出します。__

yes: ターミナルで xterm 制御シーケンスを認識できると見なします。 この機能は依然として、ターミナルの "サイズ" を自動検出できるかどうかに依存しており、-q が指定されている場合も無効になります。__

25x80 (またはこれに類する値): yes と同様。ターミナルのサイズも明示的に指定します。

25x80:/dev/pts/17 (またはこれに類する値): stderr とは "異なる" ターミナルにファンシーな進行状況を表示します。__ 主に内部テストに役立ちます。

エバリュエーターに関する構造化ログの出力を制御するためのオプション

--evaluator-log=<file>

[詳細設定] 指定されたファイルにエバリュエーターのパフォーマンスに関する構造化ログを出力します。 このログ ファイルの形式は、予告なく変更される場合がありますが、2 つの改行文字 (デフォルト) または --evaluator-log-minify オプションが渡された場合は 1 つの改行文字で区切られた JSON オブジェクトのストリームになります。 このファイルのより安定した概要を生成するために codeql generate log-summary <file> を使用し、ファイルを直接解析しないようにしてください。 ファイルが既に存在している場合は上書きされます。

--evaluator-log-minify

[詳細設定] --evaluator-log オプションが渡された場合、このオプションも渡されると、生成される JSON ログのサイズは最小限に抑えられますが、人間が判読しにくいものになります。

RAM の使用を制御するためのオプション

-M, --ram=<MB>

クエリ エバリュエーターは、合計メモリ使用量をこの値未満に維持しようと努めます。 (ただし、大規模なデータベースでは、メモリ不足の場合にディスクにスワップできるファイル バックアップ メモリマップにより、しきい値が破られる可能性があります)。

値は 2048 MB (メガバイト) 以上にする必要があります。小さい値は、透過的に切り上げられます。

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>

[詳細設定] コンパイル キャッシュ ディレクトリの、デフォルトの最大サイズをオーバーライドします。

--fail-on-ambiguous-relation-name

[詳細設定] コンパイル中にあいまいな関係名が生成された場合、コンパイルを失敗とします。

コンパイル環境を設定するためのオプション

--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>=<token> ペアのコンマ区切りのリストを渡して、GitHub Enterprise Server コンテナー レジストリに対して認証を行います。

たとえば、https://containers.GHEHOSTNAME1/v2/=TOKEN1,https://containers.GHEHOSTNAME2/v2/=TOKEN2 を渡して、 2 つの GitHub Enterprise Server インスタンスに対して認証を行うことができます。

これを使って、CODEQL_REGISTRIES_AUTH および 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 環境変数をオーバーライドします。

拡張情報パックを制御するオプション

--model-packs=<name@range>...

評価するクエリをカスタマイズするためにモデル パックとして使用する CodeQL パック名のリスト (それぞれがオプションのバージョン範囲を含む)。

共通オプション

-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 をリダイレクトします)。

--common-caches=<dir>

[[詳細設定] ダウンロードした QL パックやコンパイル済みクエリ プランなど、CLI の複数の実行間に保持される、ディスク上でキャッシュされたデータの場所を制御します。 明示的に設定されない場合、デフォルトではユーザーのホーム ディレクトリに名前が付けられた .codeql ディレクトリになります。まだ存在しない場合は作成されます。

v2.15.2 以降で使用できます。