Skip to main content

CodeQL によってスキャンされた行が予想よりも少ない

CodeQL によって分析されたコードが予想よりも少ない場合は、カスタム ビルド コマンドを使用する必要がある場合があります。

コンパイル言語の分析について

C/C++、C#、Go、Java、Kotlin、および Swift などのコンパイル型言語の場合、 CodeQL は、分析中にビルドされたファイルのみをスキャンします。 そのため、一部のソース コードが正しくコンパイルされていない場合、スキャンされるコード行の数は想定よりも少なくなります。 これは、いくつかの理由で発生します。

  1. CodeQL の autobuild 機能では、ヒューリスティックを使用してリポジトリにコードがビルドされます。 ただし、このアプローチではリポジトリの分析が不完全になることがあります。 たとえば、1 つのリポジトリに複数の build.sh コマンドが存在する場合、autobuild ステップで実行されるコマンドは 1 つのみであるため、一部のソース ファイルがコンパイルされない可能性があります。したがって、分析が完了しない可能性があります。

  2. 一部のコンパイラは CodeQL で動作せず、コードの分析中に問題が発生する可能性があります。 たとえば、ベンダー固有の C コンパイラのほとんどは、CodeQL では認識されません。 C コードを分析するには、認識されるコンパイラ (GCC、Clang、MSVC など) を使ってコンパイルする必要があります。

CodeQL 分析で予想よりも少ないコード行がスキャンされる場合は、ワークフローに autobuild ステップが含まれる場合は autobuild ステップをビルド コマンドに置き換えるか、CodeQL データベース内のソース ファイルのコピーを検査してみてください。

autobuild ステップを置き換える

autobuild プロセスを、運用環境で使用するのと同じビルド コマンドに置き換えます。 これにより、CodeQL では、スキャンするすべてのソース ファイルをコンパイルする方法を正確に認識できます。 ビルド ステップの定義の詳細については、「「コンパイル済み言語の CodeQL コード スキャン」を参照してください。

CodeQL データベース内のソース ファイルのコピーを調べる

CodeQL データベースに含まれるソース コードのコピーを調べることで、一部のソース ファイルが分析されていない理由を理解できる場合があります。 Actions ワークフローからデータベースを取得するには、CodeQL ワークフロー ファイルの init ステップを変更し、debug: true を設定します。

- name: Initialize CodeQL
  uses: github/codeql-action/init@v2
  with:
    debug: true

これにより、ローカル コンピューターにダウンロードできるアクション成果物としてデータベースがアップロードされます。 詳しくは、「ワークフローからのデータの格納と共有」を参照してください。

成果物には、CodeQL によってスキャンされたソース ファイルのアーカイブされたコピー (src.zip と呼ばれる) が含まれます。 リポジトリ内のソース コード ファイルと src.zip 内のファイルを比較すると、不足しているファイルの種類を確認できます。 分析されていないファイルの種類がわかったら、CodeQL 分析のワークフローをどのように変更する必要があるかを容易に理解できます。