Skip to main content

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

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

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

          `autobuild` または `manual` ビルド モードを使用してコンパイル型言語が分析される際、CodeQL では、分析中にビルドされたファイルのみがスキャンされます。 そのため、一部のソース コードが正しくコンパイルされていない場合、スキャンされるコード行の数は想定よりも少なくなります。 これは、いくつかの理由で発生します。
  1. CodeQL の autobuild 機能では、ヒューリスティックを使用してリポジトリにコードがビルドされます。 ただし、このアプローチではリポジトリの分析が不完全になることがあります。 たとえば、1 つのリポジトリに複数の build.sh コマンドが存在する場合、autobuild ステップで実行されるコマンドは 1 つのみであるため、一部のソース ファイルがコンパイルされない可能性があります。したがって、分析が完了しない可能性があります。

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

CodeQL 分析でスキャンされるコード行が予想よりも少ない場合、ワークフローでビルド モードが指定されている場合はビルド モードを manual に変更してビルド コマンドを指定する、ワークフローに autobuild ステップが含まれる場合は autobuild ステップをビルド コマンドに置き換える、または CodeQL データベース内のソース ファイルのコピーを調べることをお試しください。

          `manual` ビルド プロセスに変更する

          `autobuild` プロセスを、運用環境で使用するのと同じビルド コマンドに置き換えます。 これにより、CodeQL では、スキャンするすべてのソース ファイルをコンパイルする方法を正確に認識できます。

ビルド ステップの定義方法の詳細については、「コンパイル済み言語の CodeQL コード スキャン」を参照してください。

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

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

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

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

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