コンパイル言語の分析について
コンパイルされた言語が 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 データベースに含まれているソース コードのコピーを調べることで、一部のソース ファイルが分析されていない理由を理解できる場合があります。 アクション ワークフローからデータベースを取得するには、init ワークフロー ファイルのCodeQL ステップを変更し、debug: trueを設定します。
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
debug: true
これにより、ローカル コンピューターにダウンロードできるアクション成果物としてデータベースがアップロードされます。 詳しくは、「ワークフロー成果物を使ったデータの格納と共有」をご覧ください。
アーティファクトには、src.zipと呼ばれる CodeQL によってスキャンされたソース ファイルのアーカイブされたコピーが含 _ まれます _。 リポジトリ内のソース コード ファイルと src.zip 内のファイルを比較すると、不足しているファイルの種類を確認できます。 分析されていないファイルの種類がわかったら、 CodeQL 分析のワークフローを変更する必要がある可能性がある方法を理解しやすくなります。