コンパイル型言語で用いる CodeQL のワークフローを設定する

GitHub が CodeQL分析ワークフロー を使用してコンパイル型言語で記述されたコードの脆弱性やエラーをスキャンする方法を設定できます。

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

Code scanningは、GitHub Advanced Securityのライセンスを持っているなら利用できます。 詳しい情報については、「GitHub Advanced Security について」を参照してください。

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

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

GitHub がリポジトリに対して code scanning を実行できるようにするには、GitHub Actions ワークフローをリポジトリに追加します。 Note: This article refers to code scanning powered by CodeQL, not to code scanning resulting from the upload of third-party static analysis tools. 詳しい情報については、「リポジトリに対する code scanning をセットアップする」を参照してください。

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

CodeQL の autobuild について

コードスキャンは、1 つ以上のデータベースに対してクエリを実行することにより機能します。 各データベースには、リポジトリにあるすべてのコードを 1 つの言語で表わしたものが含まれています。 コンパイル型言語の C/C++、C#、および Java では、このデータベースを生成するプロセスに、コードのビルドとデータの抽出が含まれています。 CodeQLは、プロジェクトをセットアップするためにGoのプロジェクトのビルドも実行します。 ただし、他のコンパイル言語とは対照的に、リポジトリ内のGoのファイルはビルドされるものだけでなく、すべてが展開されます。 ビルドが処理しないGoのファイルの展開をスキップするために、カスタムのビルドコマンドを使うこともできます。

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

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

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

C/C++

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

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

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

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、Linux (制限なし)
ビルドシステムGradle、Maven、Ant

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

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

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

リポジトリ内の C/C++、C#、またはJava のコードに非標準のビルドプロセスがある場合、 autobuild が失敗することがあります。 ワークフローからautobuildステップを取り除き、手動でビルドのステップを追加する必要があるでしょう。 リポジトリのGoのファイルで展開するものを指定したい場合には、ビルドのステップを追加しなければなりません。ワークフローファイルの編集方法については、「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."

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

If you added manual build steps for compiled languages and code scanning is still not working on your repository, contact サイト管理者.

このドキュメントは役立ちましたか?プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

問題がまだ解決していませんか?

GitHubコミュニティで質問するサポートへの連絡