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