{"meta":{"title":"CodeQL 分析用コードを準備する","intro":"コードの分析に必要なデータが含まれた CodeQL データベースを作成できます。","product":"セキュリティとコードの品質","breadcrumbs":[{"href":"/ja/code-security","title":"セキュリティとコードの品質"},{"href":"/ja/code-security/tutorials","title":"Tutorials"},{"href":"/ja/code-security/tutorials/customize-code-scanning","title":"コード スキャンをカスタマイズする"},{"href":"/ja/code-security/tutorials/customize-code-scanning/preparing-your-code-for-codeql-analysis","title":"分析用コードを準備する"}],"documentType":"article"},"body":"# CodeQL 分析用コードを準備する\n\nコードの分析に必要なデータが含まれた CodeQL データベースを作成できます。\n\n<!--The CodeQL CLI man pages include a link to a section in this article. If you rename this article,\nmake sure that you also update the MS short link: https://aka.ms/codeql-docs/indirect-tracing.-->\n\n## 分析用コードの準備について\n\nCodeQL を使用してコードを分析する前に、コードに対してクエリを実行するために必要なすべてのデータが含まれた CodeQL データベースを作成する必要があります。 CodeQL CLI を使用すると、CodeQL データベースを自分で作成できます。\n\nCodeQL の分析は、コードからリレーショナル データを抽出し、それを使用して [CodeQL データベース](https://codeql.github.com/docs/codeql-overview/codeql-glossary/#codeql-database)を構築することに依存しています。 CodeQL データベースには、コードベースに関するすべての重要な情報が含まれており、CodeQL クエリを実行することでそれを分析できます。\n\nCodeQL データベースを生成する前に、次のことを行う必要があります。\n\n1. CodeQL CLI をインストールして設定する。 詳しくは、「[CodeQL CLI を設定する](/ja/code-security/codeql-cli/getting-started-with-the-codeql-cli/setting-up-the-codeql-cli)」をご覧ください。\n2. 分析するコードをチェックアウトします。\n   * ブランチの場合は、分析するブランチのヘッドをチェックアウトします。\n   * pull requestは、pull request のヘッド コミットをチェックアウトするか、GitHub で生成された pull request のマージ コミットをチェックアウトします。\n3. コードベースの環境を設定し、依存関係が使用可能であることを確認します。\n4. コンパイル型言語で最適な結果を得るには、コードベースのビ–ルド コマンドを見つけます (存在する場合)。 通常、これは CI システムの構成ファイルで使用できます。\n\nコードベースの準備ができたら、`codeql database create` を実行してデータベースを作成できます。 詳細については、[「非コンパイル型言語のデータベースを作成する」](#creating-databases-for-non-compiled-languages)および[「コンパイル型言語のデータベースを作成する」](#creating-databases-for-compiled-languages)を参照してください。\n\n## 実行中 `codeql database create`\n\nプロジェクトのチェックアウト ルートから次のコマンドを実行すると、CodeQL データベースが作成されます。\n\n```shell\ncodeql database create <database> --language=<language-identifier>\n```\n\nユーザーは次のものを指定する必要があります。\n\n* `<database>`: 作成する新しいデータベースへのパス。 このコマンドを実行すると、このディレクトリが作成されます。既存のディレクトリを指定することはできません。\n* `--language`: どの言語のデータベースを作成するかを表す識別子。\n  `--db-cluster` と一緒に使用する場合は、オプションでコンマ区切りリストが受け入れられるか、複数指定できます。 CodeQL では、次の言語のデータベースの作成がサポートされています。\n\n  | Language | 識別子     | オプションの代替識別子 (存在する場合) |\n  | -------- | ------- | -------------------- |\n  | C/C++    | `c-cpp` |                      |\n\n  ```\n              `c` または `cpp` |\n  ```\n\n  \\| C# | `csharp` |\n  \\|  |\n  GitHub Actionsのワークフロー | `actions`\n  |\n  \\| Go | `go` |\n  \\| Java/Kotlin | `java-kotlin` |\n  `java` または `kotlin` |\n  \\| JavaScript/TypeScript | `javascript-typescript` |\n  `javascript` または `typescript` |\n  \\| Python | `python` |\n  \\| Ruby | `ruby` |\n  \\|  |\n  Rust | `rust`\n  |\n  \\| Swift | `swift` |\n\n  > \\[!NOTE]\n  > 代替識別子の 1 つを指定した場合、これは標準の言語識別子の使用と同じです。 たとえば、`javascript` の代わりに `javascript-typescript` を指定した場合、TypeScript コードの分析は除外されません。 代わりに、`--codescanning-config` CLI オプションを使って、`paths-ignore` 構成キーで除外対象のファイルを指定する構成ファイルを読み込むことができます。 「[コード スキャンのワークフロー構成オプション](/ja/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#custom-configuration-files)」を参照してください。\n  >\n  > または、それをサポートする言語の場合は、スキャン対象のファイルのみをビルドするカスタム ビルド コマンドを使います。 「[コンパイル型言語のデータベースの作成](/ja/code-security/codeql-cli/getting-started-with-the-codeql-cli/preparing-your-code-for-codeql-analysis#creating-databases-for-compiled-languages)」を参照してください。\n\nコードベースにビルド プロセスを呼び出すビルド コマンドまたはスクリプトがある場合は、次のように指定することをお勧めします。\n\n```shell\n   codeql database create <database> --command <build> \\\n         --language=<language-identifier>\n```\n\n### データベースを作成するためのオプション\n\nソース ファイルの場所、コードをコンパイルする必要があるかどうか、複数の言語の CodeQL データベースを作成するかどうかに応じて、追加のオプションを指定できます。\n\n| Option                                                            |                                                                                                                                                             必須                                                                                                                                                            | Usage                                                                                                                                     |\n| ----------------------------------------------------------------- | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------------- |\n| `<database>`                                                      | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-check\" aria-label=\"check icon\" role=\"img\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg> | CodeQLデータベースを作成するディレクトリの名前と場所を指定します。 既存のディレクトリを上書きしようとすると、コマンドは失敗します。 また `--db-cluster` を指定した場合は、これが親ディレクトリであり、分析される言語ごとにサブディレクトリが作成されます。 |\n| <code><span style=\"white-space: nowrap;\">--language</span></code> | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-check\" aria-label=\"check icon\" role=\"img\"><path d=\"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z\"></path></svg> | `c-cpp`、 `csharp`、 `go`、 `java-kotlin`、 `javascript-typescript`、 `python`、 `ruby`、 `rust` および `swift` のいずれかに、データベースを作成する言語の識別子を指定します。     |\n\n```\n          <code>\n          <span style=\"white-space: nowrap;\">\n          --db-cluster\n          </span>\n          </code> と一緒に使用する場合は、このオプションは、カンマ区切りのリストを許可するか、複数回指定できます。 |\n```\n\n\\| <code><span style=\"white-space: nowrap;\">--command</span></code> | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-x\" aria-label=\"x icon\" role=\"img\"><path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path></svg> |\n**推奨。** コードベースのビルド プロセスを呼び出すビルド コマンドまたはスクリプトを指定するために使用します。 コマンドは、現在のフォルダーまたは、定義されている場合は、<code><span style=\"white-space: nowrap;\">--source-root</span></code> で実行できます。 Pythonおよび JavaScript/TypeScript の分析には必要ありません。 |\n\\| <code><span style=\"white-space: nowrap;\">--build-mode</span></code> | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-x\" aria-label=\"x icon\" role=\"img\"><path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path></svg> |\n**推奨。**\n`--command` を指定しない場合は、C/C++、 C#、 Java および Rust を使用して、ビルド (`none`) なしで CodeQL データベースを作成するか、ビルド コマンド (`autobuild`) の自動検出を試行するかどうかを指定します。 既定では、自動ビルド検出が使用されます。 ビルド モードの比較については、[「CodeQL ビルド モード」](/ja/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#codeql-build-modes)を参照してください。 |\n\\| <code><span style=\"white-space: nowrap;\">--db-cluster</span></code> | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-x\" aria-label=\"x icon\" role=\"img\"><path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path></svg> | <code> <span style=\"white-space: nowrap;\">\n\\--language </span> </code> によって指定された言語ごとに 1 つのデータベースを生成するには、複数言語コードベースを使用します。 |\n\\| <code><span style=\"white-space: nowrap;\">--no-run-unnecessary-builds</span></code> | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-x\" aria-label=\"x icon\" role=\"img\"><path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path></svg> |\n**推奨。** CodeQL CLIがビルドをモニターする必要がない場合に、言語のビルドコマンドを抑制するために使います（たとえばPythonやJavaScript/TypeScript）。 |\n\\| <code><span style=\"white-space: nowrap;\">--source-root</span></code> | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-x\" aria-label=\"x icon\" role=\"img\"><path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path></svg> | リポジトリのチェックアウト ルートの外部で CLI を実行する場合に使用します。 既定では、`database create` コマンドで現在のディレクトリがソース ファイルのルート ディレクトリであると見なされます。別の場所を指定するためにこのオプションを使用します。 |\n\\| <code><span style=\"white-space: nowrap;\">--codescanning-config</span></code> | <svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-x\" aria-label=\"x icon\" role=\"img\"><path d=\"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z\"></path></svg> | \\[詳細設定]。 CodeQL データベースの作成方法と、後の手順で実行するクエリを指定する構成ファイルがある場合に使用します。 詳細については、「[コード スキャンのワークフロー構成オプション](/ja/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#custom-configuration-files)」および「[データベースの作成](/ja/code-security/codeql-cli/codeql-cli-manual/database-create#--codescanning-configfile)」を参照してください。 |\n\nエクストラクターのオプションを指定して、CodeQL データベースを作成するエクストラクターの動作をカスタマイズできます。 詳しくは、「[エクストラクターのオプション](/ja/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/extractor-options)」をご覧ください。\n\nデータベースの作成時に使用できるすべてのオプションの詳細については、[「AUTOTITLE」](/ja/code-security/codeql-cli/codeql-cli-manual/database-create)を参照してください。\n\n### 単一言語の例\n\nこの例では、`/checkouts/example-repo` でチェックアウトされたリポジトリの単一 CodeQL データベースを作成します。 JavaScript 抽出機能を使用して、リポジトリに JavaScript および TypeScript コードの階層表現を作成します。 結果のデータベースは `/codeql-dbs/example-repo` に格納されます。\n\n```shell\n$ codeql database create /codeql-dbs/example-repo --language=javascript-typescript \\\n    --source-root /checkouts/example-repo\n\n> Initializing database at /codeql-dbs/example-repo.\n> Running command [/codeql-home/codeql/javascript/tools/autobuild.cmd]\n    in /checkouts/example-repo.\n> [build-stdout] Single-threaded extraction.\n> [build-stdout] Extracting\n...\n> Finalizing database at /codeql-dbs/example-repo.\n> Successfully created database at /codeql-dbs/example-repo.\n```\n\n### 複数言語の例\n\nこの例では、`/checkouts/example-repo-multi` でチェックアウトされたリポジトリの CodeQL データベースを 2 つ作成します。 イベント プロセッサで使用されるものは次のとおりです。\n\n* `--db-cluster`: 複数の言語の分析を要求します。\n* `--language`: データベースを作成する言語を指定します。\n* `--command`: コードベースのビルド コマンド (ここでは `make`) をツールに伝えます。\n* `--no-run-unnecessary-builds`は、必要のない言語 (Python など) のビルド コマンドをスキップするようにツールに指示します。\n\n結果のデータベースは、`python` の `cpp` および `/codeql-dbs/example-repo-multi` サブディレクトリに格納されます。\n\n```shell\n$ codeql database create /codeql-dbs/example-repo-multi \\\n    --db-cluster --language python,c-cpp \\\n    --command make --no-run-unnecessary-builds \\\n    --source-root /checkouts/example-repo-multi\nInitializing databases at /codeql-dbs/example-repo-multi.\nRunning build command: [make]\n[build-stdout] Calling python3 /codeql-bundle/codeql/python/tools/get_venv_lib.py\n[build-stdout] Calling python3 -S /codeql-bundle/codeql/python/tools/python_tracer.py -v -z all -c /codeql-dbs/example-repo-multi/python/working/trap_cache -p ERROR: 'pip' not installed.\n[build-stdout] /usr/local/lib/python3.6/dist-packages -R /checkouts/example-repo-multi\n[build-stdout] [INFO] Python version 3.6.9\n[build-stdout] [INFO] Python extractor version 5.16\n[build-stdout] [INFO] [2] Extracted file /checkouts/example-repo-multi/hello.py in 5ms\n[build-stdout] [INFO] Processed 1 modules in 0.15s\n[build-stdout] <output from calling 'make' to build the C/C++ code>\nFinalizing databases at /codeql-dbs/example-repo-multi.\nSuccessfully created databases at /codeql-dbs/example-repo-multi.\n$\n```\n\n## 進行状況と結果\n\n指定したオプションに問題がある場合は、エラーが報告されます。 インタプリタ型言語の場合、C/C++、 C#、 Java および Rust に `--build-mode none` を指定すると、抽出の進行状況がコンソールに表示されます。 ソース ファイルごとに、抽出の成功または失敗がコンソールに表示されます。 コンパイル型言語がビルドされると、コンソールには、ビルド システムの出力が表示されます。\n\nデータベースが正常に作成されると、コマンドで指定したパスに新しいディレクトリが見つかります。\n`--db-cluster` オプションを使用して複数のデータベースを作成した場合は、言語ごとにサブディレクトリが作成されます。 各 CodeQL データベース ディレクトリには、リレーショナル データ (分析に必要) やソース アーカイブ (データベースの作成時に作られたソース ファイルのコピー) などの複数のサブディレクトリが含まれており、分析結果の表示に使用されます。\n\n## 非コンパイル型言語のデータベースの作成\n\nCodeQL CLI には、コンパイルされていない言語 (具体的には JavaScript (および TypeScript)、Python、Ruby) 用のデータベースを作成するエクストラクターが含まれています。 これらのエクストラクターは、javaScript、Python、または Ruby を `--language` オプションとして指定すると、`database create` の実行時に自動的に呼び出されます。 これらの言語のデータベースを作成するときは、追加の依存関係がすべて使用可能であることを確認する必要があります。\n\n> \\[!NOTE]\n> JavaScript、TypeScript、Python、Ruby `database create` を実行する場合は、`--command` オプションを指定しないでください。 そうでないと、通常のエクストラクター呼び出しがオーバーライドされ、空のデータベースが作成されます。 複数の言語のデータベースを作成し、そのうちの 1 つがコンパイル型言語である場合は、`--no-run-unnecessary-builds` オプションを使用して、コンパイルする必要のない言語のコマンドをスキップします。\n\n### JavaScript と TypeScript\n\nJavaScript のデータベースを作成するために、追加の依存関係は必要ありませんが、プロジェクトに TypeScript ファイルが含まれている場合は、Node.js 14 以降をインストールして、`PATH` としての `node` で使用できるようにする必要があります。 コマンド ラインで `--language=javascript-typescript` を指定して、JavaScript と TypeScript の両方のファイルを抽出できます。\n\n```shell\ncodeql database create --language=javascript-typescript --source-root <folder-to-extract> <output-folder>/javascript-database\n```\n\nここでは、`--source-root` パスを指定しています。これはデータベースの作成が実行される場所ですが、必ずしもコードベースのチェックアウト ルートではありません。\n\n既定では、`node_modules` および `bower_components` ディレクトリ内のファイルは抽出されません。\n\n### Python\n\nPython用のデータベースを作成するときは、次のことを確認する必要があります。\n\n* データ変数.product.prodname\\_codeql の抽出ツールには、Python 3 がインストールされており、使用可能です。\n* コードによって使用されるPythonのバージョンがインストールされている。\n\nコマンド ラインで `--language=python` を指定する必要があります。 例えば次が挙げられます。\n\n```shell\ncodeql database create --language=python <output-folder>/python-database\n```\n\nこれにより、コードのチェックアウト ルートから `database create` サブコマンドが実行され、`<output-folder>/python-database` に新しいPython データベースが生成されます。\n\n### Ruby\n\nRuby のデータベースを作成するには、追加の依存関係は必要ありません。 コマンド ラインで `--language=ruby` を指定する必要があります。 例えば次が挙げられます。\n\n```shell\ncodeql database create --language=ruby --source-root <folder-to-extract> <output-folder>/ruby-database\n```\n\nここでは、`--source-root` パスを指定しています。これはデータベースの作成が実行される場所ですが、必ずしもコードベースのチェックアウト ルートではありません。\n\n## コンパイル型言語のデータベースの作成\n\nほとんどのコンパイル型言語の場合、CodeQL からデータベースを生成するために必要なビルド システムを呼び出す必要があるため、CLI でビルド メソッドを使用できる必要があります。 この方法では、生成されたコードを含むデータベースが作成されます。 CodeQL には、コードベースを構築するための以下の 2 つの方法があります。\n\n* [ビルドの自動検出 (自動ビルド)](#automatically-detecting-the-build-system)\n* [ユーザー指定のビルド コマンド](/ja/code-security/codeql-cli/getting-started-with-the-codeql-cli/preparing-your-code-for-codeql-analysis#specifying-build-commands)\n\nさらに、C/C++、 C#、 Java および Rust には、コードをビルドしなくてもデータベースを生成できるオプションがあります。 これは、多数のリポジトリに対して code scanning を有効にする場合に特に便利です。 詳細については、[「CodeQL ビルド モード」](/ja/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#codeql-build-modes)を参照してください。\n\n### ビルド システムを自動検出する\n\nCodeQL CLI には、C/C++、C#、Go、Java、Kotlin、Swift コードの自動ビルダーが含まれます。 CodeQL の自動ビルダーを使用すると、ビルド コマンドを指定せずにコンパイル型言語のプロジェクトをビルドできます。 自動ビルダーが呼び出されると、CodeQL はソースでビルド システムの証拠を調べ、データベースの抽出に必要な最適なコマンドのセットを実行しようとします。 詳しくは、「[コンパイル済み言語の CodeQL コード スキャン](/ja/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages#about-autobuild)」をご覧ください。\n\n自動ビルダーは、`codeql database create` オプションを含めず `--command` を設定しない場合に、コンパイル型言語に対して `--build-mode none` を実行した際に、自動で呼び出されます。 たとえば、Swift コードベースの場合は、単に次のように実行します。\n\n```shell\ncodeql database create --language=swift <output-folder>/swift-database\n```\n\nコードベースで標準のビルド システムを使用するのであれば、多くの場合、自動ビルダーを利用することがデータベースを作成する最も簡単な方法です。 標準以外のビルド ステップを必要とするソースについては、コマンド ラインで各ステップを明示的に定義することが必要な場合があります。\n\n> \\[!NOTE]\n>\n> * Go データベースを構築する場合は、Go ツールチェーン (バージョン 1.11 以降) をインストールし、依存関係がある場合は、適切な依存関係マネージャー ([dep](https://golang.github.io/dep/) など) をインストールします。\n> * Go の自動ビルダーはリポジトリ内で、Go で記述されたコードの自動検出を試み、依存関係のフェッチを試みる際にのみビルド スクリプトを実行します。 CodeQL で強制的に、抽出をビルド スクリプトによってコンパイルされたファイルに制限するには、環境変数 `CODEQL_EXTRACTOR_GO_BUILD_TRACING=on` を設定するか、`--command` オプションを使用してビルド コマンドを指定します。\n\n### ビルド コマンドの指定\n\n次の例は、コンパイル型言語について指定できるビルド コマンドの一部を示すために設計されています。\n\n> \\[!NOTE]\n\n```\n          `--command` オプションで受け入れられる引数は 1 つです。複数のコマンドを使用する必要がある場合は、`--command` を複数回指定します。 サブコマンドとオプションを渡す必要がある場合は、正しく解釈されるように引数全体を引用符で囲む必要があります。\n```\n\n* `make` を使用してビルドされた C/C++ プロジェクト:\n\n  ```shell\n  # Disable parallel execution via `-j1` or other techniques: https://www.gnu.org/software/make/manual/make.html#Parallel-Execution\n  codeql database create cpp-database --language=c-cpp --command=make\n  ```\n\n* `dotnet build` を使用してビルドされた C# プロジェクト:\n\n  すべてのコードが確実にビルドされるように `/t:rebuild` を追加するか、事前に `dotnet clean` を実行することをお勧めします (ビルドされていないコードは CodeQL データベースに含まれません)。\n\n  ```shell\n  codeql database create csharp-database --language=csharp --command='dotnet build /t:rebuild'\n  ```\n\n* `CODEQL_EXTRACTOR_GO_BUILD_TRACING=on` 環境変数を使用してビルドされた Go プロジェクト:\n\n  ```shell\n  CODEQL_EXTRACTOR_GO_BUILD_TRACING=on codeql database create go-database --language=go\n  ```\n\n* カスタム ビルド スクリプトを使用してビルドされた Go プロジェクト:\n\n  ```shell\n  codeql database create go-database --language=go --command='./scripts/build.sh'\n  ```\n\n* Gradle を使用してビルドされたプロジェクトJava:\n\n  ```shell\n  # Use `--no-daemon` because a build delegated to an existing daemon cannot be detected by CodeQL.\n  # To ensure isolated builds without caching, add `--no-build-cache` on persistent machines.\n  codeql database create java-database --language=java-kotlin --command='gradle --no-daemon clean test'\n  ```\n\n* Maven を使用してビルドされたプロジェクトJava:\n\n  ```shell\n  codeql database create java-database --language=java-kotlin --command='mvn clean install'\n  ```\n\n* Ant を使用してビルドされたプロジェクトJava:\n\n  ```shell\n  codeql database create java-database --language=java-kotlin --command='ant -f build.xml'\n  ```\n\n* Cargo を使用して構築された Rust プロジェクト:\n\n  ```shell\n  codeql database create rust-database --language=rust\n  ```\n\n* Xcode プロジェクトまたはワークスペースからビルドされた Swift プロジェクト。 既定では、最大の Swift ターゲットがビルドされます。\n\n  プロジェクトがクリーン状態であり、使用できるビルド アーティファクトがないことを確認することをお勧めします。\n\n  ```shell\n  xcodebuild clean -all\n  codeql database create -l swift swift-database\n  ```\n\n* `swift build` を使用してビルドされた Swift プロジェクト:\n\n  ```shell\n  codeql database create -l swift -c \"swift build\" swift-database\n  ```\n\n* `xcodebuild` を使用してビルドされた Swift プロジェクト:\n\n  ```shell\n  codeql database create -l swift -c \"xcodebuild build -target your-target\" swift-database\n  ```\n\n  ```\n          `archive` と `test` オプション を `xcodebuild` に渡すことができます。 ただし、標準の `xcodebuild` コマンドが推奨されます。これは最も速く、スキャンが成功するために CodeQL が必要とするものが揃っています。\n  ```\n\n* カスタム ビルド スクリプトを使用してビルドされた Swift プロジェクト:\n\n  ```shell\n  codeql database create -l swift -c \"./scripts/build.sh\" swift-database\n  ```\n\n* Bazel を使用してビルドされたプロジェクト:\n\n  ```shell\n  # Navigate to the Bazel workspace.\n\n  # Before building, remove cached objects\n  # and stop all running Bazel server processes.\n  bazel clean --expunge\n\n  # Build using the following Bazel flags, to help CodeQL detect the build:\n  # `--spawn_strategy=local`: build locally, instead of using a distributed build\n  # `--nouse_action_cache`: turn off build caching, which might prevent recompilation of source code\n  # `--noremote_accept_cached`, `--noremote_upload_local_results`: avoid using a remote cache\n  # `--disk_cache=`: avoid using a disk cache. Note that a disk cache is no longer considered a remote cache as of Bazel 6.\n  codeql database create new-database --language=<language> \\\n  --command='bazel build --spawn_strategy=local --nouse_action_cache --noremote_accept_cached --noremote_upload_local_results --disk_cache= //path/to/package:target'\n\n  # After building, stop all running Bazel server processes.\n  # This ensures future build commands start in a clean Bazel server process\n  # without CodeQL attached.\n  bazel shutdown\n  ```\n\n> \\[!NOTE]\n> Go 用の Bazel ビルドは現在サポートされていません。\n\n* カスタム ビルド スクリプトを使用してビルドされたプロジェクト:\n\n  ```shell\n  codeql database create new-database --language=<language> --command='./scripts/build.sh'\n  ```\n\nこのコマンドにより、プロジェクトのビルドに必要なすべてのコマンドを含むカスタム スクリプトを実行します。\n\n<!-- Anchor to maintain the CodeQL CLI manual pages link: https://aka.ms/codeql-docs/indirect-tracing -->\n\n<a name=\"using-indirect-build-tracing\"></a>\n\n### 間接ビルド トレースの使用\n\nコンパイル型言語の CodeQL CLI 自動ビルダーが CI ワークフローで動作せず、`codeql database trace-command` でビルド コマンドの呼び出しをラップできない場合は、間接ビルド トレースを使用して CodeQL データベースを作成できます。 間接ビルド トレースを使用するには、CI システムで各ビルド アクションのカスタム環境変数を設定できる必要があります。\n\n間接ビルド トレースを使用して CodeQL データベースを作成するには、プロジェクトのチェックアウト ルートから次のコマンドを実行します。\n\n```shell\ncodeql database init ... --begin-tracing <database>\n```\n\nユーザーは次のものを指定する必要があります。\n\n* `<database>`: 作成する新しいデータベースへのパス。 このコマンドを実行すると、このディレクトリが作成されます。既存のディレクトリを指定することはできません。\n* `--begin-tracing`: ビルド コマンドがトレースされる環境を設定するために使用できるスクリプトを作成します。\n\n  ```\n          `codeql database init` コマンドの他のオプションを通常どおり指定できます。\n  ```\n\n> \\[!NOTE]\n> ビルドがWindowsで実行される場合は、`--trace-process-level <number>` または `--trace-process-name <parent process name>` を設定して、分析対象のコードのすべてのビルド ステップを監視する親 CI プロセスを指定する必要があります。\n\n```\n          `codeql database init` コマンドによりメッセージが出力されます。\n```\n\n```shell\nCreated skeleton <database>. This in-progress database is ready to be populated by an extractor. In order to initialise tracing, some environment variables need to be set in the shell your build will run in. A number of scripts to do this have been created in <database>/temp/tracingEnvironment. Please run one of these scripts before invoking your build command.\n\nBased on your operating system, we recommend you run: ...\n```\n\n```\n          `codeql database init` コマンドを使用すると、CodeQL で一連のビルド ステップをトレースできるようにするための環境変数と値が含まれたファイルと共に、`<database>/temp/tracingEnvironment` が作成されます。 これらのファイルには `start-tracing.{json,sh,bat,ps1}` のように名前が付けられます。 これらのファイルの 1 つを CI システムのメカニズムと共に使用して、今後の手順のための環境変数を設定します。 次のようにすることができます。\n```\n\n* JSON ファイルを読み取り、処理し、CI システムによって想定されている形式で環境変数を出力します。 たとえば、Azure DevOpsは `echo \"##vso[task.setvariable variable=NAME]VALUE\"` を想定しています。\n* または、CI システムで環境を永続化する場合は、適切な `start-tracing` スクリプトをソースとして、CI システムのシェル環境に CodeQL 変数を設定します。\n\nコードをビルドします。必要に応じて、`end-tracing.{json,sh,bat,ps1}` スクリプトが保存されているディレクトリにある `start-tracing` スクリプトを使用して環境変数の設定を解除してから、`codeql database finalize <database>` コマンドを実行します。\n\n間接ビルド トレースを使用して CodeQL データベースを作成したら、それを他の CodeQL データベースと同様に操作できます。 たとえば、データベースを分析し、コード スキャンを使用する場合は GitHub に結果をアップロードします。\n\n### 間接ビルド トレースを使用して CodeQL データベースを作成する例\n\n> \\[!NOTE]\n> Azure DevOps パイプラインを使用する場合、CodeQL データベースを作成する最も簡単な方法は、GitHub Advanced Security for Azure DevOps を使用することです。 ドキュメントについては、Microsoft Learn の[「GitHub Advanced Security for Azure DevOps を構成する」](https://learn.microsoft.com/en-us/azure/devops/repos/security/configure-github-advanced-security-features)を参照してください。\n\n次の例は、Azure DevOps パイプラインで間接ビルド トレースを使用して、 CodeQL データベースを作成する方法を示しています。\n\n```yaml\nsteps:\n    # Download the CodeQL CLI and query packs...\n    # Check out the repository ...\n\n    # Run any pre-build tasks, for example, restore NuGet dependencies...\n\n    # Initialize the CodeQL database.\n    # In this example, the CodeQL CLI has been downloaded and placed on the PATH.\n    - task: CmdLine@1\n       displayName: Initialize CodeQL database\n      inputs:\n          # Assumes the source code is checked out to the current working directory.\n          # Creates a database at `<current working directory>/db`.\n          # Running on Windows, so specifies a trace process level.\n          script: \"codeql database init --language csharp --trace-process-name Agent.Worker.exe --source-root . --begin-tracing db\"\n\n    # Read the generated environment variables and values,\n    # and set them so they are available for subsequent commands\n    # in the build pipeline. This is done in PowerShell in this example.\n    - task: PowerShell@1\n       displayName: Set CodeQL environment variables\n       inputs:\n          targetType: inline\n          script: >\n             $json = Get-Content $(System.DefaultWorkingDirectory)/db/temp/tracingEnvironment/start-tracing.json | ConvertFrom-Json\n             $json.PSObject.Properties | ForEach-Object {\n                 $template = \"##vso[task.setvariable variable=\"\n                 $template += $_.Name\n                 $template += \"]\"\n                 $template += $_.Value\n                 echo \"$template\"\n             }\n\n    # Execute the pre-defined build step. Note the `msbuildArgs` variable.\n    - task: VSBuild@1\n        inputs:\n          solution: '**/*.sln'\n          msbuildArgs: /p:OutDir=$(Build.ArtifactStagingDirectory)\n          platform: Any CPU\n          configuration: Release\n          # Execute a clean build, in order to remove any existing build artifacts prior to the build.\n          clean: True\n       displayName: Visual Studio Build\n\n    # Read and set the generated environment variables to end build tracing. This is done in PowerShell in this example.\n    - task: PowerShell@1\n       displayName: Clear CodeQL environment variables\n       inputs:\n          targetType: inline\n          script: >\n             $json = Get-Content $(System.DefaultWorkingDirectory)/db/temp/tracingEnvironment/end-tracing.json | ConvertFrom-Json\n             $json.PSObject.Properties | ForEach-Object {\n                 $template = \"##vso[task.setvariable variable=\"\n                 $template += $_.Name\n                 $template += \"]\"\n                 $template += $_.Value\n                 echo \"$template\"\n             }\n\n    - task: CmdLine@2\n       displayName: Finalize CodeQL database\n       inputs:\n          script: 'codeql database finalize db'\n\n    # Other tasks go here, for example:\n    # `codeql database analyze`\n    # then `codeql github upload-results` ...\n```\n\n## 次のステップ\n\n* CodeQL CLI を使用して、コードから作成したデータベースを分析する方法については、[「AUTOTITLE」](/ja/code-security/codeql-cli/getting-started-with-the-codeql-cli/analyzing-your-code-with-codeql-queries)を参照してください。"}