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

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

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

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

Code scanning is available for organization-owned repositories where GitHub Advanced Security is enabled. 詳しい情報については、「GitHub Advanced Security について」を参照してください。

ノート: この機能を使用するには、サイト管理者がyour GitHub Enterprise Server instanceの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分析ワークフローを編集する必要があるかもしれません。 code scanningの設定とワークフローファイルの編集に関する一般的な情報については、「code scanningの設定」及び「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 ステップの動作は、抽出を実行するオペレーティングシステムによって異なります。 Windowsでは、autobuildステップは以下のアプローチを使ってC/C++のための適切なビルド方法を自動検出しようとします。

  1. ルートに最も近いソリューション (.sln) またはプロジェクト (.vcxproj) ファイルで MSBuild.exe を呼び出します。 autobuild が最上位ディレクトリから同じ(最短)深度で複数のソリューションまたはプロジェクトファイルを検出した場合、それらすべてをビルドしようとします。
  2. ビルドスクリプトのように見えるスクリプト、つまり build.batbuild.cmdおよび build.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.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のためのワークフローの構文」を参照してください。

複数のコンパイル言語を含むリポジトリでは、言語に固有のビルドコマンドを指定できます。 たとえば、リポジトリがC/C++、C#、Javaを含んでおり、autobuildが正しく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が動作しない場合は、your site administratorにお問い合わせください。

このドキュメントは役立ちましたか?

プライバシーポリシー

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

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

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

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

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