Skip to main content

code scanning 分析に時間がかかりすぎる

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

Note

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

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

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

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

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

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

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

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

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

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

ソース コードをコンパイルせずに CodeQL で分析される JavaScript、Python、TypeScript などの言語の場合、追加の構成オプションを指定して分析するコードの量を制限できます。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」を参照してください。

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

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

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

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

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

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

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