# コード スキャン分析に時間がかかりすぎる

code scanning の構成を微調整すると、解析時間を最小限に抑えることができます。

code scanning の解析で、ビルド時間を短縮するための方法がいくつかあります。

## メモリまたはコアを増やす

GitHub の解析に code scanning でホストされたランナーを使用している場合は、より大きなランナー (larger runner) へのアップグレードを検討してください。 これらは、標準ランナーよりも RAM、CPU、ディスク領域が多い GitHub ホスト ランナーです。 より大きなランナー (larger runner) と code scanning の詳細については、「[より大きなランナーの使用](/ja/actions/using-github-hosted-runners/about-larger-runners)」と「[大きなランナーをデフォルトのセットアップ用に設定する](/ja/code-security/code-scanning/managing-your-code-scanning-configuration/configuring-larger-runners-for-default-setup)」を参照してください。

セルフホストランナーを使用して code scanning 解析を実行している場合、ランナーのメモリやコア数を増やすことができます。 解析の高度なセットアップで CodeQL を使用している場合は、CodeQL に推奨されるハードウェア リソースを参照することで、セルフホステッド ランナーがこれらの要件を満たしていることを確認できます。 詳しくは、「[CodeQL を実行するための推奨ハードウェア リソース](/ja/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/recommended-hardware-resources-for-running-codeql)」をご覧ください。

## マトリックスビルドを使用して分析を並列化する

複数のジョブを含むワークフローの解析を高速化するために、マトリックスを使用するようにワークフローを変更できます。 詳しくは、「[ワークフローでのジョブのバリエーションの実行](/ja/actions/using-jobs/using-a-matrix-for-your-jobs)」をご覧ください。

既定の CodeQL 分析ワークフローでは、言語のマトリックスを使います。これにより、各言語の解析が並列で実行されます。 ただし、高度なセットアップで CodeQL を使用していて、「CodeQL の初期化」手順で解析する言語を直接指定している場合、各言語の解析は順番に行われます。 この構成では、マトリックスを使用するように高度なセットアップ ワークフローを変更することで、解析を高速化できます。 例については、「[CodeQL の高度なセットアップで一部の言語が分析されませんでした](/ja/code-security/code-scanning/troubleshooting-code-scanning/some-languages-were-not-analyzed)」のワークフロー抜粋を参照してください。

## 1 つのワークフローで分析されるコードの量を減らす

通常、分析時間は、分析対象のコードの量に比例します。 高度なセットアップで CodeQL を使用している場合は、一度に解析されるコードの量を減らすことで、解析時間を短縮できます。 たとえば、テスト コードを除外したり、一度にコードのサブセットのみを解析する解析を複数のワークフローに分割したりします。

`build-mode: autobuild`または`build-mode: manual`を使用する場合、Java、Kotlin、Go、C、C++、C# などのコンパイル済み言語の場合、CodeQL はワークフロー実行中にビルドされたすべてのコードを分析します。 分析するコードの量を制限するには、`run` ブロックで独自のビルド ステップを指定して、分析するコードのみをビルドします。 独自のビルド ステップの指定と、`paths` イベントや `paths-ignore` イベントでの `pull_request` フィルターまたは `push` フィルターの使用を組み合わせることで、特定のコードが変更されたときにのみワークフローが実行されるようにすることができます。 詳しくは、「[GitHub Actions　のワークフロー構文](/ja/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)」をご覧ください。

JavaScript、Python、TypeScript などの言語の場合、CodeQL はソース コードをコンパイルせずに分析します。また、 `build-mode: none`を使用してコンパイルされた言語の場合は、分析するコードの量を制限する追加の構成オプションを指定できます。 詳しくは、「[コード スキャンのワークフロー構成オプション](/ja/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#specifying-directories-to-scan)」をご覧ください。

CodeQL 分析を複数のワークフローに分割する場合でも、リポジトリ内のすべてのコードを分析する `schedule` で実行されるワークフローを少なくとも 1 つ用意することをお勧めします。 CodeQL はコンポーネント間のデータフローを分析するため、一部の複雑なセキュリティ動作は完全なビルドでのみ検出される場合があります。

##

```
          `schedule` イベント中にのみ実行する

          `push` または `pull_request` イベントの間は、分析が遅くなる場合があります。 その場合は、分析が`schedule` イベントでのみトリガーするように設定できます。 CodeQL の解析に code scanning を使用している場合は、高度なセットアップ ワークフローを使用して構成できますが、デフォルトのセットアップでは構成できません。 詳しくは、「[AUTOTITLE](/actions/learn-github-actions/understanding-github-actions#events)」をご覧ください。
```

## ワークフローが実行するクエリまたはルールを確認する

解析時間を短縮するもう 1 つの方法は、pull request で実行されるワークフローで重要と思われるクエリまたはルールのみを実行することです。 code scanning にサード パーティ製ツールを使用する場合は、そのツールのドキュメントを参照してください。

CodeQL には、言語ごとに 2 つのメイン クエリ スイートを使用できます。 CodeQL データベースのビルドを最適化してもプロセスに時間がかかりすぎる場合は、実行するクエリの数を減らすことで対処できます。 デフォルトのクエリ スイートは自動的に実行されます。品質と速度の間で可能な限り最良の妥協点が提供されます。

高度なセットアップで CodeQL を使用している場合は、デフォルトのクエリに加えて、追加のクエリまたはクエリ スイートが実行される場合があります。 ワークフローで、`queries` 要素を使用して実行する追加のクエリ スイートまたは追加のクエリが定義されているかどうかを確認します。 追加のクエリ スイートまたはクエリを無効にして試験を行うことができます。 詳しくは、「[コード スキャンのワークフロー構成オプション](/ja/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning#using-queries-in-ql-packs)」をご覧ください。