Skip to main content
ドキュメントへの更新が頻繁に発行されており、このページの翻訳はまだ行われている場合があります。 最新の情報については、「英語のドキュメント」を参照してください。

database analyze

データベースを分析し、ソース コードのコンテキストで意味のある結果を生成します。

GitHub CodeQL は、インストール時にユーザーごとにライセンスされます。 CodeQL は、ライセンスの制限の下で特定のタスクでのみ使用できます。 詳しくは、「CodeQL CLI について」を参照してください。

GitHub Advanced Security ライセンスがある場合は、CodeQL を使用して、自動分析、継続的インテグレーション、継続的デリバリーを行うことができます。 詳しくは、「GitHub Advanced Security について」を参照してください。

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.

構文

Shell
codeql database analyze --format=<format> --output=<output> [--threads=<num>] [--ram=<MB>] <options>... -- <database> <query|dir|suite|pack>...

説明

データベースを分析し、ソース コードのコンテキストで意味のある結果を生成します。

CodeQL データベースに対してクエリ スイート (またはいくつかの個々のクエリ) を実行し、アラートまたはパスとしてスタイル設定された結果を SARIF または解釈された別の形式で生成します。

このコマンドは、codeql database run-queriescodeql database interpret-results のコマンドの効果を組み合わせたものです。 結果がソース コード アラートとして解釈されるための要件を "満たさない" クエリを実行する場合は、codeql database run-queries または codeql query run を代わりに使用してから、codeql bqrs decode を使用して生の結果を読み取り可能な表記に変換します。**

主なオプション

<database>

[必須] クエリを実行する CodeQL データベースのパス。

<querysuite|pack>...

実行するクエリ。 各引数は、scope/name@range:path の形式になります。ここで、

  • scope/name は、CodeQL パックの修飾名です。
  • range は、semver の範囲です。
  • path は、ファイル システムのパスです。

scope/name を指定する場合、rangepath は省略可能です。 range がない場合、指定されたパックの最新バージョンを意味します。 path がない場合、指定されたパックの既定のクエリ スイートを意味します。

path は、*.ql クエリ ファイル、1 つまたは複数のクエリを含むディレクトリ、または .qls クエリ スイート ファイルのいずれかにすることができます。 パック名が指定されていない場合、path を指定する必要があり、現在のプロセスの現在の作業ディレクトリを基準にして解釈されます。

リテラル @ または : を含む path を指定するには、引数のプレフィックスとして path: を使用します (例: path:directory/with:and@/chars)。

scope/namepath を指定する場合、path を絶対パスにすることはできません。 これは、CodeQL パックのルートを基準にしていると見なされます。

クエリを指定しない場合、実行する適切なクエリ セットが CLI によって自動的に決定されます。 具体的には、データベースの作成時に --codescanning-config を使って Code Scanning の構成ファイルを指定した場合は、そのクエリが使われます。 それ以外の場合は、分析されている言語の既定のクエリが使われます。

--format=<format>

[必須] 結果を書き込む形式。 つぎのいずれかです。

csv: ルールとアラート メタデータの両方がある列を含む、書式設定されたコンマ区切りの値。

sarif-latest: Static Analysis Results Interchange Format (SARIF)。静的な分析結果を記述するための JSON ベースの形式。 この形式オプションでは、サポートされている最新バージョン (v2.1.0) が使用されます。 このオプションは、異なる CodeQL バージョン間で異なるバージョンの SARIF が生成されるため、自動化での使用には適していません。

sarifv2.1.0: SARIF v2.1.0。

graphtext: グラフを表すテキスト形式。 @kind グラフを使用するクエリとのみ互換性があります。

dgml: Directed Graph Markup Language。グラフを記述するための XML ベースの形式。 @kind グラフを使用するクエリとのみ互換性があります。

dot: Graphviz DOT 言語。グラフを記述するためのテキストベースの形式。 @kind グラフを使用するクエリとのみ互換性があります。

-o, --output=<output>

[必須] 結果を書き込む出力パス。 グラフ形式の場合、これはディレクトリである必要があり、結果 (このコマンドで複数のクエリの解釈がサポートされている場合は複数の結果) がそのディレクトリ内に書き込まれます。

--[no-]rerun

BQRS の結果が既にデータベースに格納されていると考えられるクエリも評価します。

--no-print-diagnostics-summary

分析した診断の概要を標準出力に出力しません。

--no-print-metrics-summary

分析したメトリックの概要を標準出力に出力しません。

--max-paths=<maxPaths>

パスを含むアラートごとに生成するパスの最大数。 (既定値: 4)

--[no-]sarif-add-file-contents

[SARIF 形式のみ] 少なくとも 1 つの結果で参照されるすべてのファイルの完全なファイル コンテンツを含めます。

--[no-]sarif-add-snippets

[SARIF 形式のみ] 結果に示されている各場所のコード スニペットを含めます。報告された場所の前後に 2 行のコンテキストがあります。

--[no-]sarif-add-query-help

[SARIF 形式のみ] 結果に Markdown クエリ ヘルプを含めます。 /path/to/query.md ファイルから /path/to/query.ql のクエリ ヘルプが読み込まれます。 このオプションは、codeql bqrs interpret に渡しても効果はありません。

--[no-]sarif-group-rules-by-pack

[SARIF 形式のみ] <run>.tool.extensions プロパティの対応する QL パックの下に、各クエリのルール オブジェクトを配置します。 このオプションは、codeql bqrs interpret に渡しても効果はありません。

--[no-]sarif-multicause-markdown

[SARIF 形式のみ] 複数の原因があるアラートの場合は、プレーン文字列に加え、マークダウン形式の明細化されたリストとして出力に含めます。

--no-group-results

[SARIF 形式のみ] 一意の場所ごとに 1 つの結果ではなく、メッセージごとに 1 つの結果を生成します。

--csv-location-format=<csvLocationFormat>

CSV 出力で場所を生成する形式。 次のいずれか: uri、行列、オフセット長。 (既定値: 行列)

--dot-location-url-format=<dotLocationUrlFormat>

DOT 出力でファイルの場所 URL を生成する形式を定義する書式設定文字列。 プレース ホルダーとして、{path} {start:line} {start:column} {end:line} {end:column}、{offset}、{length} を使用できます

--sarif-category=<category>

[SARIF 形式のみ] SARIF 出力に含めるこの分析のカテゴリを指定します。 カテゴリを使用して、同じコミットとリポジトリ (ただし、異なる言語またはコードの異なる部分) で実行される複数の分析を区別できます。

同じバージョンのコード ベースを複数の異なる方法で分析し (たとえば、言語が異なる場合)、コード スキャンでプレゼンテーションするために GitHub に結果をアップロードする場合、この値は各分析間で異なる必要があります。これにより、コード スキャンに対して、分析では互いに ''置き換える'' のではなく ''補足する'' ことが示されます ** (コード ベースの ''異なる'' バージョンに対して同じ分析の実行間で値の一貫性を保つ必要があります)。

この値は、SARIF v1 では <run>.automationId プロパティ、SARIF v2 では <run>.automationLogicalId プロパティ、SARIF v 2.1.0 では <run>.automationDetails.id プロパティとして表示されます (まだ存在しない場合は末尾にスラッシュが付加される)。

--[no-]download

分析する前に、不足しているクエリをダウンロードします。

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

--[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>

外部述語 \ の行を含む 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>

クエリ エバリュエーターで使用できる必要がある 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>=\ ペアのコンマ区切りリストを渡すことで、GitHub Enterprise Server コンテナー レジストリに対して認証を行います。

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