CodeQL 分析でのビルドの実行に時間がかかりすぎる場合は、ビルド時間を短縮するための方法がいくつかあります。
メモリまたはコアを増やす
セルフホストランナーを使用して CodeQL 解析を実行している場合、ランナーのメモリやコア数を増やすことができます。
マトリックスビルドを使用して分析を並列化する
既定の CodeQL 分析ワークフローでは、言語のマトリックスを使います。これにより、各言語の解析が並列で実行されます。 「Initialize CodeQL」ステップで解析する言語を直接指定している場合、各言語の解析は順次行われます。 複数の言語で解析を高速化するには、マトリクスを使用するようワークフローを変更してください。 詳しくは、「一部の言語は CodeQL の高度なセットアップで分析されませんでした」のワークフロー抽出を参照してください。
1 つのワークフローで分析されるコードの量を減らす
通常、分析時間は、分析対象のコードの量に比例します。 たとえば、テストコードを除外したり、一度にコードのサブセットのみを分析する複数のワークフローに分析を分割したりするなど、一度に分析されるコードの量を減らすことで、分析時間を短縮できます。
Java、Kotlin、Go、C、C++、C# などのコンパイル言語の場合、CodeQL ではワークフローの実行中にビルドされたすべてのコードを分析します。 分析するコードの量を制限するには、run ブロックで独自のビルド ステップを指定して、分析するコードのみをビルドします。 独自のビルド ステップの指定と、pull_request イベントや push イベントでの paths フィルターまたは paths-ignore フィルターの使用を組み合わせることで、特定のコードが変更されたときにのみワークフローが実行されるようにすることができます。 詳しくは、「GitHub Actions のワークフロー構文」を参照してください。
ソース コードをコンパイルせずに CodeQL で分析されるJavaScript、Python、TypeScript などの言語の場合、追加の構成オプションを指定して分析するコードの量を制限できます。 詳しくは、「をカスタマイズして、コード スキャンの詳細設定を行う」を参照してください。
上記のように分析を複数のワークフローに分割する場合でも、リポジトリ内のすべてのコードを分析する schedule で実行されるワークフローを少なくとも 1 つ用意することをお勧めします。 CodeQL はコンポーネント間のデータフローを分析するため、一部の複雑なセキュリティ動作は完全なビルドでのみ検出される場合があります。
schedule イベント中にのみ実行する
push イベント中または pull_request イベント中の分析の実行に引き続き時間がかかりすぎる場合は、schedule イベントでのみ分析をトリガーすることをお勧めします。 詳しくは、「GitHub Actions を理解する」を参照してください。
ワークフローが実行されているクエリ スイートを確認する
既定では、言語ごとに 3 つの主要なクエリ スイートを使用できます。 CodeQL データベースのビルドを最適化してもプロセスに時間がかかりすぎる場合は、実行するクエリの数を減らすことで対処できます。 既定のクエリ スイートは自動的に実行されます。これには、誤検知結果の割合が最も低い最速のセキュリティ クエリが含まれています。
既定のクエリに加えて、追加のクエリまたはクエリ スイートを実行している可能性があります。 ワークフローで、queries 要素を使用して実行する追加のクエリ スイートまたは追加のクエリが定義されているかどうかを確認します。 追加のクエリ スイートまたはクエリを無効にして試験を行うことができます。 詳しくは、「をカスタマイズして、コード スキャンの詳細設定を行う」を参照してください。
メモ: JavaScript で security-extended または security-and-quality クエリ スイートを実行する場合、一部のクエリでは試験的なテクノロジが使用されます。 詳しくは、「Code scanningアラートについて」を参照してください。