code scanning の解析で、ビルド時間を短縮するための方法がいくつかあります。
メモリまたはコアを増やす
code scanning の解析に GitHub でホストされたランナーを使用している場合は、より大きなランナー (larger runner) へのアップグレードを検討してください。 これらは、標準ランナーよりも RAM、CPU、ディスク領域が多い GitHub ホスト ランナーです。 より大きなランナー (larger runner) と code scanning の詳細については、"より大きなランナーの概要" と "大きなランナーをデフォルトのセットアップ用に設定する"を参照してください。
セルフホストランナーを使用して code scanning の解析を実行している場合、ランナーのメモリやコア数を増やすことができます。 解析の高度なセットアップで CodeQL を使用している場合は、CodeQL に推奨されるハードウェア リソースを参照することで、セルフホステッド ランナーがこれらの要件を満たしていることを確認できます。 詳しくは、「CodeQL を実行するための推奨ハードウェア リソース」を参照してください。
マトリックスビルドを使用して分析を並列化する
複数のジョブを含むワークフローの解析を高速化するために、マトリックスを使用するようにワークフローを変更できます。 詳しくは、「Running variations of jobs in a workflow」を参照してください。
デフォルトの 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
要素を使用して実行する追加のクエリ スイートまたは追加のクエリが定義されているかどうかを確認します。 追加のクエリ スイートまたはクエリを無効にして試験を行うことができます。 詳しくは、「コード スキャン用の高度なセットアップのカスタマイズ」を参照してください。