Skip to main content

コンパイル済み言語の CodeQL ワークフローを構成する

GitHub による CodeQL analysis workflowの使用方法を構成すると、コンパイル型言語で脆弱性とエラーが記述されているコードをスキャンできます。

Who can use this feature

If you have write permissions to a repository, you can configure code scanning for that repository.

Code scanning は、GitHub Enterprise Server の Organization 所有のリポジトリで利用できます。 この機能には、GitHub Advanced Security のライセンスが必要です。 詳細については、「GitHub Advanced Security について」を参照してください。

Note: Your site administrator must enable code scanning for your GitHub Enterprise Server instance before you can use this feature. If you want to use GitHub Actions to scan your code, the site administrator must also enable GitHub Actions and set up the infrastructure required. For more information, see "Configuring code scanning for your appliance."

CodeQL analysis workflowとコンパイル型言語について

GitHub がリポジトリに対して code scanning を実行できるようにするには、GitHub Actions ワークフローをリポジトリに追加します。 CodeQL code scanning では、CodeQL analysis workflowを追加できます。 詳細については、「リポジトリの code scanning の設定」を参照してください。

通常、code scanning のデフォルトのワークフローを編集する必要はありません。 ただし、必要な場合にはワークフローを編集して設定の一部をカスタマイズできます。 たとえば、GitHub の CodeQL analysis workflowを編集すると、スキャンの頻度、スキャンする言語やディレクトリ、CodeQL code scanning を使ったコード内での検索対象を指定できます。 コードのコンパイルに特定のコマンド セットを使う場合にも、CodeQL analysis workflowの編集が必要となる場合があります。 code scanning の構成とワークフロー ファイルの編集に関する一般的な情報については、「code scanning を構成する」および「GitHub Actions について学ぶ」をご覧ください。

CodeQL の autobuild について

Code scanning は、1 つ以上のデータベースに対してクエリを実行することにより機能します。 各データベースには、リポジトリにあるすべてのコードを 1 つの言語で表わしたものが含まれています。
コンパイル型言語の C/C++、C#、Java では、このデータベースを生成するプロセスに、コードのビルドとデータの抽出が含まれています。 これらの言語では、CodeQL は、ビルドされたリポジトリ内のソース ファイルを分析します。 これらの言語の場合は、autobuild を無効にし、その代わりにカスタム ビルド コマンドによってビルドされたファイルのみを分析するためにこれらのカスタム コマンドを使用できます。

サポートされているコンパイル言語の場合、CodeQL analysis workflowの autobuild アクションを使ってコードをビルドできます。 これにより、C/C++、C#、Java の明示的なビルド コマンドを指定する必要がなくなります。

ワークフローで language マトリックスを使っている場合、autobuild はマトリックスに列記された各コンパイル型言語のビルドを試行します。 マトリックスがない場合、autobuild は、サポートされているコンパイル型言語で、リポジトリ内のソース ファイルの数が最も多いもののビルドを試みます。 Go を除いて、明示的にビルドコマンドを使用しない限り、リポジトリにある他のコンパイル型言語の解析は失敗します。

: GitHub Actions にセルフホステッド ランナーを使う場合は、autobuild プロセスを使うために追加のソフトウェアをインストールすることが必要になる場合があります。 さらに、リポジトリに特定のバージョンのビルドツールが必要な場合は、手動でインストールする必要があります。 詳しくは、「GitHub ホステッド ランナーの概要」をご覧ください。

C/C++

サポートされているシステムの種類システム名
オペレーティング システムWindows、macOS、Linux
ビルドシステムWindows: MSbuild スクリプトと build スクリプト
Linux と macOS: Autoconf、Make、CMake、qmake、 Meson、Waf、SCons、Linux Kbuild、build の各スクリプト

autobuild ステップの動作は、抽出を実行するオペレーティング システムによって異なります。 Windows の autobuild ステップでは、以下の方法を使って C/C++ に適したビルド方法の自動検出が試みられます。

  1. ルートに最も近いソリューション (.sln) またはプロジェクト (.vcxproj) ファイルで MSBuild.exe を呼び出します。 autobuild が最上位ディレクトリから同じ (最短) 深度で複数のソリューションまたはプロジェクト ファイルを検出した場合、それらすべてのビルドが試みられます。
  2. ビルド スクリプトのように見えるスクリプト、つまり build.batbuild.cmdbuild.exe を、この順番で呼び出します。

Linux と macOS の autobuild ステップでは、リポジトリ内にあるファイルが確認されて、使われているビルド システムが特定されます。

  1. ルートディレクトリでビルドシステムを探します。
  2. 何も見つからない場合は、C/C++ のビルドシステムで一意のディレクトリをサブディレクトリで検索します。
  3. 適切なコマンドを実行してシステムを設定します。

C#

サポートされているシステムの種類システム名
オペレーティング システムWindows と Linux
ビルドシステム.NET と MSbuild、およびビルドスクリプト

autobuild プロセスは、次の方法を使って C# に適したビルド方法の自動検出を試みます。

  1. ルートに最も近いソリューション (.sln) またはプロジェクト (.csproj) ファイルで dotnet build を呼び出します。
  2. ルートに最も近いソリューションまたはプロジェクト ファイルで、MSbuild (Linux) または MSBuild.exe (Windows) を呼び出します。 autobuild が最上位ディレクトリから同じ (最短) 深度で複数のソリューションまたはプロジェクト ファイルを検出した場合、それらすべてのビルドが試みられます。
  3. ビルド スクリプトのように見えるスクリプト、つまり buildbuild.sh (Linux の場合、この順序で) または build.batbuild.cmdand build.exe (Windows の場合、この順序で) を呼び出します。

Java

サポートされているシステムの種類システム名
オペレーティング システムWindows、macOS、Linux (制限なし)
ビルドシステムGradle、Maven、Ant

autobuild プロセスは、この戦略を適用して、Java コードベース用のビルド システムの特定を試みます。

  1. ルートディレクトリでビルドファイルを検索します。 Gradle、Maven、Ant の各ビルドファイルを確認します。
  2. 最初に見つかったビルドファイルを実行します。 Gradle ファイルと Maven ファイルの両方が存在する場合は、Gradle ファイルが使用されます。
  3. それ以外の場合は、ルートディレクトリの直接サブディレクトリ内でビルドファイルを検索します。 1 つのサブディレクトリにのみビルドファイルが含まれている場合は、そのサブディレクトリで識別された最初のファイルを実行します(1 と同じ環境設定を使用)。 複数のサブディレクトリにビルドファイルが含まれている場合は、エラーを報告します。

コンパイル言語のビルドステップを追加する

autobuild が失敗した場合、または autobuild プロセスによってビルドされたものとは異なるソース ファイルのセットを分析する場合は、ワークフローから autobuild ステップを削除し、ビルド ステップを手動で追加する必要があります。 C/C++、C#、Go、Java プロジェクトの場合、CodeQL では、指定したビルド ステップによってビルドされたソース コードを分析します。ワークフロー ファイルの編集方法については、「code scanning を構成する」をご覧ください。

autobuild ステップを削除したら、run ステップをコメント解除して、リポジトリに適したビルド コマンドを追加します。 ワークフローの run ステップでは、オペレーティング システムのシェルを使ってコマンド ライン プログラムが実行されます。 これらのコマンドを変更し、別のコマンドを追加してビルド プロセスをカスタマイズできます。

- run: |
    make bootstrap
    make release

run キーワードについて詳しくは、「GitHub Actions のワークフロー構文」をご覧ください。

リポジトリに複数のコンパイル済み言語が含まれている場合は、言語固有のビルド コマンドを指定できます。 たとえば、リポジトリに C/C++、C#、Java が含まれていて、autobuild によって C/C++ と C# は正しくビルドされるが、Java のビルドは失敗する場合は、ワークフローの init ステップの後で次の構成を使用できます。 これにより、C/C++ と C# には autobuild をそのまま使用しつつ、Java のビルド ステップを指定します。

- if: matrix.language == 'cpp' || matrix.language == 'csharp' 
  name: Autobuild
  uses: github/codeql-action/autobuild@v1

- if: matrix.language == 'java' 
  name: Build Java
  run: |
    make bootstrap
    make release

if 条件について詳しくは、「GitHub Actions のワークフロー構文」をご覧ください。

autobuild でコードがビルドされない理由に関するその他のヒントとテクニックについては、「CodeQL ワークフローのトラブルシューティング」をご覧ください。

コンパイル言語にマニュアルのビルドステップを追加しても、リポジトリで依然としてcode scanningが動作しない場合は、サイト管理者にお問い合わせください。