# CodeQL パックの作成と操作

CodeQL パックを使用して、CodeQLクエリとライブラリを作成、共有、依存、および実行できます。

##

```
          CodeQLパックとCodeQL CLIについて



          CodeQL パックは、 CodeQL クエリとライブラリの作成、共有、依存、および実行に使用されます。

          `pack`の CodeQL CLI コマンドを使用して、CodeQL パックの作成、パックへの依存関係の追加、依存関係のインストールまたは更新を行うことができます。 
          CodeQL コマンドを使用して、`pack` パックを発行およびダウンロードすることもできます。
```

##

```
          CodeQL パックの作成
```

プロジェクトのチェックアウト ルートから次のコマンドを実行して、 CodeQL パックを作成できます。

```shell
codeql pack init <scope>/<pack>
```

ユーザーは次のものを指定する必要があります。

* `<scope>`: 発行先のGitHub 組織またはユーザー アカウントの名前。

* `<pack>`: 作成するパックの名前。

  ```
          `codeql pack init` コマンドは、CodeQL パックのディレクトリ構造と構成ファイルを作成します。 既定では、コマンドによってクエリ パックが作成されます。 ライブラリ パックを作成する場合は、`qlpack.yml` プロパティを含めることでファイルをライブラリ パックとして明示的に宣言するように `library:true` ファイルを編集する必要があります。
  ```

##

```
          CodeQL モデル パックの作成
```

> \[!NOTE]
> CodeQL モデル パックは現在 パブリック プレビュー 段階であり、変更される可能性があります。 モデル パックは C/C++、C#、Java/Kotlin、Python、Ruby、Rust 分析でサポートされます。
>
> CodeQL 用 CodeQL 拡張機能の Visual Studio Code モデル エディターでは、C#、Java/Kotlin、Python、Ruby に対する依存関係のモデリングがサポートされています。

モデル パックを使用して code scanning 分析を拡張し、既定ではサポートされていないライブラリとフレームワークを認識できます。 モデル パックでは、データ拡張機能が使用されます。これは YAML として実装され、新しい依存関係のデータを追加する方法を記述します。 モデル パックを指定すると、そのパック内のデータ拡張機能が code scanning 分析に自動的に追加されます。 モデル パックとデータ拡張機能 CodeQL 詳細については、「 [AUTOTITLE」](/ja/code-security/codeql-for-vs-code/using-the-advanced-functionality-of-the-codeql-for-vs-code-extension/using-the-codeql-model-editor)を参照してください。

モデル パックは、CodeQL ファイルで次の特性を持つ`qlpack.yml` パックです。

* `library: true` を定義します。
* 依存関係がありません。
* 1 つ以上の `extensionTargets` があります。
* 1 つ以上のデータ拡張ファイルを指す `dataExtensions` プロパティがあります。

モデル パックは、指定されたバージョン範囲内にある場合、指定されたデータ拡張機能を、`extensionTargets` で指定された各クエリ パックに挿入します。 例えば次が挙げられます。

```yaml
name: my-repo/my-java-model-pack
version: 1.2.3
extensionTargets:
  codeql/java-all: ~1.2.3
  codeql/util: ~4.5.6
dataExtensions:
  - models/**/*.yml
```

この例では、モデル パックによって、`models/**/` のすべてのデータ拡張機能が、`codeql/java-all` から最大および `1.2.3` を含むバージョンの `1.3.0` クエリ パックと、`codeql/util` から最大および `4.5.6` を含むバージョンの `4.6.0` クエリ パックに挿入されます。 詳細については、npm のドキュメントの「[セマンティック バージョニングの使用](https://docs.npmjs.com/about-semantic-versioning#using-semantic-versioning-to-specify-update-types-your-package-can-accept)」、および[セマンティック バージョニング仕様書](https://semver.org/)」を参照してください。

モデル パックを作成したら、他の CodeQL パックと同じ方法で発行できます。 詳しくは、「[CodeQL パックを発行して使用する](/ja/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/publishing-and-using-codeql-packs)」をご覧ください。 その後、code scanning オプションを使用して、`--model-packs`分析でパブリッシュされたモデル パックを使用できます。 詳しくは、「[CodeQL パックを使った分析のカスタマイズ](/ja/code-security/codeql-cli/getting-started-with-the-codeql-cli/customizing-analysis-with-codeql-packs#using-model-packs-to-analyze-calls-to-custom-dependencies)」をご覧ください。

##

```
          CodeQL パックへの依存関係の追加とインストール
```

> \[!NOTE]
> これは、 CodeQL クエリ パックとライブラリ パックでのみサポートされます。

コマンド CodeQLを使用して、`codeql pack add` パックに依存関係を追加できます。 スコープ、名前、および (必要に応じて) 互換性のあるバージョン範囲を指定する必要があります。

```shell
codeql pack add <scope>/<name>@x.x.x <scope>/<other-name>
```

バージョン範囲を指定しない場合は、最新バージョンが追加されます。 それ以外の場合は、要求された範囲を満たす最新バージョンが追加されます。

このコマンドを実行すると、要求された依存関係で `qlpack.yml` ファイルが更新され、パッケージ キャッシュにダウンロードされます。 このコマンドを実行すると、ファイルが再フォーマットされ、すべてのコメントが削除されることに注意してください。

```
          `qlpack.yml` ファイルを手動で編集して依存関係を含め、コマンドを使用して依存関係をインストールすることもできます。
```

```shell
codeql pack install
```

このコマンドを実行すると、すべての依存関係がローカル ディスク上の共有キャッシュにダウンロードされます。

> \[!NOTE]
> \*
> `codeql pack add` と `codeql pack install` コマンドを実行すると、`codeql-pack.lock.yml` ファイルが生成または更新されます。 このファイルはバージョン管理にチェックインする必要があります。
> `codeql-pack.lock.yml` ファイルには、パックで使用される正確なバージョン番号が含まれています。 詳しくは、「[codeql-pack.lock.yml ファイルについて](/ja/code-security/codeql-cli/getting-started-with-the-codeql-cli/customizing-analysis-with-codeql-packs##about-codeql-packlockyml-files)」を参照してください。
>
> * 既定では、`codeql pack install`はContainer registryにGitHub.comからの依存関係をインストールします。
>   GitHub Enterprise Server ファイルを作成することで、Container registry`qlconfig.yml`から依存関係をインストールできます。 詳細については、[](/ja/enterprise-server@3.20/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/publishing-and-using-codeql-packs)ドキュメントの GitHub Enterprise Server を参照してください。

##

```
          CodeQL パックのディレクトリ構造の整理

          CodeQL パックには、ルート ディレクトリに `qlpack.yml` という名前のファイルが含まれている必要があります。 
          `qlpack.yml` ファイルでは、`name:` フィールドには、`<scope>/<pack>`の形式に従う値が必要です。ここで、`<scope>`はパックが発行されるGitHubの組織またはユーザー アカウントで、`<pack>`はパックの名前です。
```

さらに、 CodeQL テストを含むクエリ パックとライブラリ パックには、パックの解決された依存関係を含む `codeql-pack.lock.yml` ファイルが含まれています。 このファイルは、`codeql pack install` コマンドの呼び出し中に生成され、手動で編集するためのものではなく、バージョン管理システムに追加する必要があります。

パック内のその他のファイルとディレクトリは論理的に整理されます。 たとえば、通常は次のようになります。

* クエリは、特定のカテゴリのディレクトリに整理されます。
* 特定の製品、ライブラリ、フレームワークのクエリは、それぞれ独自のトップレベル ディレクトリに整理されます。

## ダウンロードした CodeQL パックのカスタマイズ

パックの変更を試す場合は、ソース コードを含むリポジトリをクローンすることをお勧めします。

使用できるソース リポジトリがなく、 Container registryからダウンロードしたパックに基づいて変更を行う必要がある場合は、これらのパックはダウンロード後に変更またはカスタマイズされるものではなく、今後、多くの通知なしに形式が変更される可能性があることに注意してください。 コンテンツを変更する必要がある場合は、パックをダウンロードした後に次の手順を行うことをお勧めします。

* \_
  \_ でパックの ''名前'' を変更して、変更されていないパックの結果との混同を避けるようにします。`qlpack.yml`

* アンパックされたディレクトリ構造内の任意の場所にある `*.qlx` という名前のファイルをすべて削除します。 これらのファイルにはプリコンパイル済みバージョンのクエリが含まれており、場合によっては、変更した QL ソースより優先して使用 CodeQL 。