# クエリ参照ファイル

クエリ参照ファイルを使って、テストで実行するクエリの場所を定義できます。

## クエリ参照ファイルについて

クエリ参照ファイルは、テストする 1 つのクエリの場所を定義するテキスト ファイルです。

テスト ディレクトリに含まれていないクエリの実行を `test run` サブコマンドに指示するときは、クエリ参照ファイルを使います。
テストとして実行するクエリを指定するには、2 つの方法があります。

1. クエリ参照ファイルを使って、テストするクエリの場所を指定します。
   これは、実際のコードベースの問題を特定することを目的としたアラート クエリとパス クエリのテストを作成する場合に便利です。 テスト コードの複数のディレクトリを作成し、それぞれでクエリの異なる側面を対象にする場合があります。 その後、テスト コードの各ディレクトリにクエリ参照ファイルを追加して、テストするクエリを指定します。
2. クエリをテストのディレクトリに直接追加します。
   これらは通常、QL ライブラリの動作をテストするためにクエリを明示的に記述する場合に便利です。 多くの場合、これらのクエリにはライブラリ述語の呼び出しが数個だけ含まれ、出力をテストできるようにそれらを `select` ステートメントでラップします。

## クエリ参照ファイルを定義する

各クエリ参照ファイル `.qlref` には、1 つのクエリを見つける場所を定義する 1 行が含まれています。 場所は、クエリを含む CodeQL パックのルートを基準にして定義されている必要があります。
通常これは、`.qlref` を含む CodeQL パック、テスト パックの`dependencies` ブロックで指定されている CodeQL パック、または CodeQL パックの推移的な依存関係のいずれかです。

システム間で互換性があるよう、すべてのオペレーティング システムのパスでフォワードスラッシュを使う必要があります。

### Example

JavaScript アラート クエリをテストするためのクエリ参照ファイル: [DeadAngularJSEventListener.qlref](https://github.com/github/codeql/blob/main/javascript/ql/test/query-tests/AngularJS/DeadAngularJSEventListener/DeadAngularJSEventListener.qlref)

```
          `qlpack.yml` の CodeQL パックの https://github.com/github/codeql/blob/main/javascript/ql/test/qlpack.yml ファイル (`javascript/ql/test` ) では、`codeql/javascript-queries` が依存関係として定義されています。 そのため、クエリ参照ファイルでは、`codeql/javascript-queries` CodeQL パックを基準にしてクエリの場所を定義します。
```

```shell
AngularJS/DeadAngularJSEventListener.ql
```

別の例については、「[カスタム クエリのテスト](/ja/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/testing-custom-queries)」を参照してください。