Skip to main content

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2023-01-18. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise にアップグレードします。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせく� さい

コンパイル済み言語の 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 について」を参照してく� さい。

注: この機能を使うには、サイト管理者が の code scanning を有効にする必要があります。 コードをスキャンするためにGitHub Actionsを使いなら、サイト管理者はGitHub Actionsの有効化と、必要なインフラストラクチャのセットアップもしなければなりません。 詳細については、「アプライアンスでの code scanning の構成」を参照してく� さい。

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が動作しない� �合は、サイト管理者にお問い合わせく� さい。