# クエリのコンパイル

QL コードをコンパイルまたはチェックします。

> \[!NOTE]
> このコンテンツでは、CodeQL CLI の最新リリースについて説明します。 このリリースについて詳しくは、 <https://github.com/github/codeql-cli-binaries/releases> をご覧ください。
>
> 以前のリリースの、このコマンドで使えるオプションを詳しく確認するには、ターミナルで <span style="white-space: nowrap;">`--help`</span> オプションを指定してコマンドを実行してください。

## 概要

```shell copy
codeql query compile [--check-only] [--keep-going] [--threads=<num>] [--ram=<MB>] <options>... -- <file>...
```

## Description

QL コードをコンパイルまたはチェックします。

1 つ以上のクエリをコンパイルします。 通常、このコマンドの主な結果は、クエリのコンパイル済みバージョンが\_コンパイル キャッシュ\_に書き込まれ、後でクエリが実行されたときに見つかることです。 その他の出力オプションは、主にデバッグ用です。

## オプション

### 主なオプション

#### `<file>...`

```
          \[必須] コンパイルするクエリ。 各引数は、次のいずれかです。
```

* コンパイルする ql ファイル。
* .ql ファイルを再帰的に検索するディレクトリ。
* 特定のクエリ セットを定義する .qls ファイル。
* インストールされている QL パックの 1 つによってエクスポートされた "既知の" .qls ファイルのベース名。

#### `-n, --check-only`

QL が有効であることを確認し、エラーを出力するだけです。実際にはクエリ プランを最適化して格納しません。 これは、完全コンパイルよりもはるかに高速な場合があります。

#### `--[no-]precompile`

```
          \[詳細設定] コンパイルされた各クエリをバイナリ `.qlx` ファイルとして `.ql` ソースの横に保存します。
```

これは、配布用のクエリ パックを準備するときにのみ使用することを想定しています (この場合、[codeql pack publish](/ja/code-security/reference/code-scanning/codeql/codeql-cli-manual/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>`

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

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

#### `--common-caches=<dir>`

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

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