Skip to main content

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

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

メモ

この記事では、CodeQL アクションのバージョンと、このバージョンのCodeQL CLIの初期リリースに含まれる関連GitHub Enterprise Serverバンドルで使用できる機能について説明します。 企業で CodeQL アクションのより新しいバージョンを使用している場合は、この記事の GitHub Enterprise Cloud バージョン で最新の機能について説明します。 最新バージョンの使用方法については、「アプライアンスのコード スキャンの構成」を参照してください。

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

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

ランナーで使用できるメモリまたはディスク領域を増やすことができます。 CodeQL分析にcode scanningを使用している場合は、ランナーがこれらの要件を満たしていることを確認するために、CodeQLに推奨されるハードウェア リソースを確認できます。 詳しくは、「CodeQL を実行するための推奨ハードウェア リソース」をご覧ください。

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

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

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

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

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

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

ソース コードをコンパイルせずに分析CodeQL JavaScript、Python、TypeScript などの言語、またはbuild-mode: noneを使用してコンパイルされた言語の場合は、分析するコードの量を制限する追加の構成オプションを指定できます。 詳しくは、「コード スキャンのワークフロー構成オプション」をご覧ください。

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

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

push または pull_request イベントの間は、分析が遅くなる場合があります。 その場合は、分析がschedule イベントでのみトリガーするように設定できます。 CodeQL分析にcode scanningを使用している場合は、高度なセットアップ ワークフローを使用して構成できますが、既定のセットアップでは構成できません。 詳しくは、「GitHub Actionsについて」をご覧ください。

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

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

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

高度なセットアップで CodeQL を使用している場合は、既定のクエリに加えて、追加のクエリまたはクエリ スイートを実行している可能性があります。 ワークフローで、queries 要素を使用して実行する追加のクエリ スイートまたは追加のクエリが定義されているかどうかを確認します。 追加のクエリ スイートまたはクエリを無効にして試験を行うことができます。 詳しくは、「コード スキャンのワークフロー構成オプション」をご覧ください。