{"meta":{"title":"CodeQL ワークスペースについて","intro":"CodeQL ワークスペースを使用することで、複数の関連する CodeQL パックを統合して開発及び管理し、ソースから直接それらの依存関係を解決できます。","product":"セキュリティとコードの品質","breadcrumbs":[{"href":"/ja/enterprise-cloud@latest/code-security","title":"セキュリティとコードの品質"},{"href":"/ja/enterprise-cloud@latest/code-security/concepts","title":"Concepts"},{"href":"/ja/enterprise-cloud@latest/code-security/concepts/code-scanning","title":"コード スキャン"},{"href":"/ja/enterprise-cloud@latest/code-security/concepts/code-scanning/codeql","title":"CodeQL"},{"href":"/ja/enterprise-cloud@latest/code-security/concepts/code-scanning/codeql/about-codeql-workspaces","title":"CodeQL ワークスペース"}],"documentType":"article"},"body":"# CodeQL ワークスペースについて\n\nCodeQL ワークスペースを使用することで、複数の関連する CodeQL パックを統合して開発及び管理し、ソースから直接それらの依存関係を解決できます。\n\n## CodeQL ワークスペースについて\n\nCodeQL ワークスペースは、通常、相互に依存する一連のライブラリとクエリ パックを開発するために使用されます。 CodeQL ワークスペースを使用すると、クエリを解決する CodeQL コマンドを実行するときに、ワークスペース内のすべての CodeQL パックを相互に \"ソース依存関係\" として使用できます。\\_\\_ これにより、複数の関連する CodeQL パックの開発、保守、発行が容易になります。 CodeQL パックの詳細については、[「AUTOTITLE」](/ja/enterprise-cloud@latest/code-security/codeql-cli/getting-started-with-the-codeql-cli/customizing-analysis-with-codeql-packs)を参照してください。\n\nワークスペースは、関連するパックを一緒に開発して発行できるように、一般的に 1 つの Git リポジトリに格納されます。\n\n## ソース依存関係\n\nCodeQL ワークスペースでは、ワークスペースに含まれるすべてのパックが相互の**ソース依存関係**として扱われます。 これは、CodeQL パッケージ キャッシュからではなく、ローカル ファイル システムから直接解決されることを意味します。\n\nワークスペース パックはソースから解決するため:\n\n* 1 つのパックのローカル変更は、ワークスペース内の他のパックにすぐに表示されます。\n* ワークスペースで見つかった依存関係は、パッケージ キャッシュ内のバージョンをオーバーライドします。\n* ```\n          `qlpack.yml` ファイルのバージョン制約はワークスペースの依存関係では無視されます。これは、ワークスペースのコンテンツによってバージョンが決定されるためです。\n  ```\n\nこの動作は、複数の関連パックを同時に開発する場合に特に便利です。 例えば次が挙げられます。\n\n* 依存関係はまだ発行されておらず、ローカルにのみ存在します。\n* 複数のパック間で調整された変更を行っており、テスト中に互いに解決する必要があります。\n\nワークスペースの外部では、依存関係はパッケージ キャッシュから解決され、 `qlpack.yml`で定義されているバージョンの制約と一致する必要があります。 ワークスペース内では、代わりに解像度によってローカル ソース コンテンツが優先されます。\n\n## CodeQL ワークスペースとクエリ解決\n\nワークスペースの依存関係モデルは、パックのインストールと発行方法に影響します。\n\n* インストール中、ワークスペースで見つかった依存関係はパッケージ キャッシュにダウンロードされず、 `codeql-pack.lock.yml` ファイルに書き込まれません。\n* 発行時に、ワークスペースによって提供される依存関係は、パッケージ キャッシュのバージョンではなく、ローカル ソース コンテンツを使用してバンドルされます。\n\nたとえば、ワークスペース内のパック ディレクトリで `codeql pack install` を実行すると、パッケージ キャッシュにダウンロードしたり、 `codeql-pack.lock.yml` ファイルに記録したりする代わりに、ワークスペース内で見つかった依存関係が使用されます。 「[CodeQL パックの作成と操作](/ja/enterprise-cloud@latest/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/creating-and-working-with-codeql-packs#adding-and-installing-dependencies)」を参照してください。\n\n### Example\n\nCodeQL ワークスペースは、`codeql-workspace.yml` という名前の YAML ファイルで定義されます。 次の `codeql-workspace.yml` ファイルを考えてみます。\n\n```yaml\nprovide:\n  - \"**/qlpack.yml\"\n```\n\nさらに、ワークスペース内の次の CodeQL ライブラリ パック `qlpack.yml` ファイルと、\n\n```yaml\nname: my-company/my-library\nlibrary: true\nversion: 1.0.0\n```\n\nワークスペース内の次の CodeQL ライブラリ パック `qlpack.yml` ファイルについても考えてみましょう。\n\n```yaml\nname: my-company/my-queries\nversion: 1.0.0\ndependencies:\n  my-company/my-library: \"*\"\n  codeql/cpp-all: ~0.2.0\n```\n\nCodeQL クエリ パック `dependencies` の `my-company/my-queries` ブロックは、ライブラリ パックのバージョンとして `\"*\"` を指定していることに注意してください。 ライブラリ パックは `codeql-workspace.yml` でソース依存関係として既に定義されているため、ライブラリ パックのコンテンツは常にワークスペース内から解決されます。 この場合、定義するバージョン制約はすべて無視されます。 ソースの依存関係に `\"*\"` を使用すると、バージョンがワークスペースから継承されていることが明示的になります。\n\nクエリ パック ディレクトリから `codeql pack install` を実行すると、`codeql/cpp-all` の適切なバージョンがローカル パッケージ キャッシュにダウンロードされます。 また、`codeql-pack.lock.yml` の解決済みバージョンを含む `codeql/cpp-all` ファイルが作成されます。 ソース依存関係から解決されるため、ロック ファイルには `my-company/my-library` のエントリは含まれません。\n`codeql-pack.lock.yml` ファイルは次のようになります。\n\n```yaml\ndependencies:\n  codeql/cpp-all:\n    version: 0.2.2\n```\n\nクエリ パック ディレクトリから `codeql pack publish` を実行すると、パッケージ キャッシュからの `codeql/cpp-all` 依存関係とワークスペースからの `my-company/my-library` が `my-company/my-queries` にバンドルされ、GitHub コンテナー レジストリに発行されます。\n\n##\n\n```\n          `codeql-workspace.yml` ファイルの例\n```\n\nCodeQL ワークスペースは、`codeql-workspace.yml` という名前の YAML ファイルで定義されます。 このファイルには、`provide` ブロックと、必要に応じて `ignore` および `registries` ブロックが含まれます。\n\n* ```\n          `provide` ブロックには、ワークスペースで使用可能な CodeQL パックを定義する glob パターンの一覧が含まれます。\n  ```\n\n* ```\n          `ignore` ブロックには、ワークスペースで使用できない CodeQL パックを定義する glob パターンの一覧が含まれます。\n  ```\n\n* ```\n          `registries` ブロックには、CodeQL パックの発行に使用されるコンテナー レジストリを制御する GHES URL とパッケージ パターンの一覧が含まれます。 「[AUTOTITLE](/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/publishing-and-using-codeql-packs#working-with-codeql-packs-on-ghes)」を参照してください。\n\n          `provide` または `ignore` セクションの各エントリは、`qlpack.yml` ファイルの場所にマップする必要があります。 すべての glob パターンは、ワークスペース ファイルを含むディレクトリを基準にして定義されます。 このファイルで受け入れられるパターンの一覧については、「[@actions/glob](https://github.com/actions/toolkit/tree/main/packages/glob#patterns)」を参照してください。\n  ```\n\nたとえば、次の `codeql-workspace.yml` ファイルは、`codeql-packs` ディレクトリ内のパックを除き、`experimental` ディレクトリ内で再帰的に検出されたすべての CodeQL パックを含むワークスペースを定義しています。\n`registries` ブロックは、`codeql/\\*` パックを `https://ghcr.io/v2/` からダウンロードする必要があることを指定します。これは、GitHub の既定のコンテナー レジストリです。 他のすべてのパックは、`GHE_HOSTNAME` のレジストリからダウンロードし、そこに発行する必要があります。\n\n```yaml\nprovide:\n  - \"*/codeql-packs/**/qlpack.yml\"\nignore:\n  - \"*/codeql-packs/**/experimental/**/qlpack.yml\"\n\nregistries:\n - packages: 'codeql/*'\n   url: https://ghcr.io/v2/\n\n - packages: '*'\n   url: https://containers.GHE_HOSTNAME/v2/\n```\n\nワークスペース ディレクトリで `codeql pack ls` を実行することで、ワークスペースに含まれるパックを一覧表示できます。\n\n##\n\n```\n          `${workspace}` ファイルのバージョン範囲として `qlpack.yml` を使用する\n```\n\nワークスペース内の CodeQL パックでは、特殊な `${workspace}`、`~${workspace}``^${workspace}` バージョン範囲プレースホールダーを使用できます。 これらのプレースホルダーは、このパックが現在ワークスペース内にある指定されたパックのバージョンに依存していることを示します。 このプレースホルダーは通常、ライブラリ パック内の依存関係に使用され、公開時に `qlpack.yml` ファイルの依存関係に、発行時のワークスペースの状態が反映されます。\n\n### Example\n\n同じワークスペース内の次の 2 つのライブラリ パックを考慮する:\n\n```yaml\nname: my-company/my-library\nlibrary: true\nversion: 1.2.3\ndependencies:\n  my-company/my-library2: ${workspace}\n```\n\n```yaml\nname: my-company/my-library2\nlibrary: true\nversion: 4.5.6\n```\n\nGitHub Container Registry に `my-company/my-library` を発行すると、発行された `my-company/my-library2` ファイルの `qlpack.yml` 依存関係のバージョンが `4.5.6` として書き込まれます。\n\n同様に、依存関係がソース パックで `my-company/my-library2: ^${workspace}` であり、その後、パックが発行されると、発行された `my-company/my-library2` ファイルの `qlpack.yml` 依存関係のバージョンは、`^4.5.6` として書き込まれ、バージョン `>= 4.5.6` と `< 5.0.0` はすべて、このライブラリ パックと互換性があることを示します。\n\n依存関係がソース パックで `my-company/my-library2: ~${workspace}` であり、その後、パックが発行されると、発行された `my-company/my-library2` ファイルの `qlpack.yml` 依存関係のバージョンは、`~4.5.6` として書き込まれ、バージョン `>= 4.5.6` と `< 4.6.0` はすべて、このライブラリ パックと互換性があることを示します。"}