ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

Configuring the CodeQL workflow for compiled languages

You can configure how GitHub uses the CodeQL analysis workflow to scan code written in compiled languages for vulnerabilities and errors.

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

Code scanning is available if you have a license for GitHub Advanced Security. 詳しい情報については、「GitHub Advanced Security について」を参照してください。

ここには以下の内容があります:

ノート: この機能を使用するには、サイト管理者がyour GitHub Enterprise Server instanceのcode scanningを有効にする必要があります。 コードをスキャンするためにGitHub Actionsを使いなら、サイト管理者はGitHub Actionsの有効化と、必要なインフラストラクチャのセットアップもしなければなりません。 詳しい情報については「アプライアンスのためのcode scanningの設定」を参照してください。

About the CodeQL analysis workflow and compiled languages

You set up GitHub to run code scanning for your repository by adding a GitHub Actions workflow to the repository. Note: This article refers to code scanning powered by CodeQL, not to code scanning resulting from the upload of third-party static analysis tools. For more information, see "Setting up code scanning for a repository."

通常、code scanning のデフォルトのワークフローを編集する必要はありません。 ただし、必要な場合にはワークフローを編集して設定の一部をカスタマイズできます。 たとえば、GitHubのCodeQL analysis workflowを編集して、スキャンの頻度、スキャンする言語やディレクトリ、CodeQL code scanningがコード中で探すものを指定できます。 コードのコンパイルに特定のコマンドセットを使っている場合にも、CodeQL analysis workflowを編集する必要があるかもしれません。 For general information about configuring code scanning and editing workflow files, see "Configuring code scanning" and "Learn GitHub Actions."

CodeQL の autobuild について

Code scanning works by running queries against one or more databases. Each database contains a representation of all of the code in a single language in your repository. For the compiled languages C/C++, C#, and Java, the process of populating this database involves building the code and extracting data. CodeQLは、プロジェクトをセットアップするためにGoのプロジェクトのビルドも実行します。 ただし、他のコンパイル言語とは対照的に、リポジトリ内のGoのファイルはビルドされるものだけでなく、すべてが展開されます。 Goではカスタムのビルドコマンドはサポートされていません。

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

If your workflow uses a language matrix, autobuild attempts to build each of the compiled languages listed in the matrix. Without a matrix autobuild attempts to build the supported compiled language that has the most source files in the repository. With the exception of Go, analysis of other compiled languages in your repository will fail unless you supply explicit build commands.

注釈: GitHub Actions にセルフホストランナーを使用する場合、autobuild プロセスを使用するために追加のソフトウェアをインストールする必要がある場合があります。 さらに、リポジトリに特定のバージョンのビルドツールが必要な場合は、手動でインストールする必要があります。 詳しい情報については、「GitHub ホストランナーの仕様」を参照してください。

C/C++

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

autobuild ステップの動作は、抽出を実行するオペレーティングシステムによって異なります。 On Windows, the autobuild step attempts to autodetect a suitable build method for C/C++ using the following approach:

  1. Invoke MSBuild.exe on the solution (.sln) or project (.vcxproj) file closest to the root. autobuild が最上位ディレクトリから同じ(最短)深度で複数のソリューションまたはプロジェクトファイルを検出した場合、それらすべてをビルドしようとします。
  2. Invoke a script that looks like a build script—build.bat, build.cmd, and build.exe (in that order).

On Linux and macOS, the autobuild step reviews the files present in the repository to determine the build system used:

  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.cmd、および build.exe(Windows の場合、この順序で)を呼び出します。

Java

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

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

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

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

リポジトリ内の C/C++、C#、またはJava のコードに非標準のビルドプロセスがある場合、 autobuild が失敗することがあります。 ワークフローからautobuildステップを取り除き、手動でビルドのステップを追加する必要があるでしょう。 For information on how to edit the workflow file, see "Configuring code scanning."

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

- run: |
  make bootstrap
  make release

run キーワードに関する詳しい情報については、「"GitHub Actionsのためのワークフローの構文」を参照してください。

If your repository contains multiple compiled languages, you can specify language-specific build commands. For example, if your repository contains C/C++, C# and Java, and autobuild correctly builds C/C++ and C# but fails to build Java, you could use the following configuration in your workflow, after the init step. This specifies build steps for Java while still using autobuild for C/C++ and C#:

- 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

For more information about the if conditional, see "Workflow syntax for GitHub Actions."

For more tips and tricks about why autobuild won't build your code, see "Troubleshooting the CodeQL workflow."

If you added manual build steps for compiled languages and code scanning is still not working on your repository, contact your site administrator.

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

OR, learn how to contribute.