Skip to main content
ドキュメントへの更新が頻繁に発行されており、このページの翻訳はまだ行われている場合があります。 最新の情報については、「英語のドキュメント」を参照してください。
現在、GitHub AE は限定的リリースです。

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

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

この機能を使用できるユーザー

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

Code scanning は、GitHub AE の Organization 所有のリポジトリで利用できます。 これは GitHub Advanced Security の機能です (ベータ リリース中は無料)。 詳しくは、「GitHub Advanced Security について」を参照してください。

CodeQL 分析ワークフローとコンパイル型言語について

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

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

CodeQL の autobuild について

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

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

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

: 必要なソフトウェアをセルフホステッド ランナーにインストールする必要があります。 セルフホステッド ランナーの詳細については、「自分のランナーをホストする」を参照してください。

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@v2

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

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

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

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