Skip to main content

コンパイル済み言語の CodeQL コード スキャン

          CodeQLでコンパイル済み言語の分析方法、使用可能なビルド オプション、必要に応じてデータベース生成プロセスをカスタマイズする方法について説明します。

この機能を使用できるユーザーについて

書き込み アクセスを持つユーザー if advanced setup is already enabled

Code scanning は、次のリポジトリの種類で使用できます。

  • GitHub.com 上のパブリックリポジトリ
  • GitHub Team、GitHub Enterprise Cloud、または GitHub Enterprise Server 上の組織所有リポジトリ。 GitHub Code Security が 有効になっています。

メモ

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

ビルド モードを比較する

ビルド モードの特性なしAutobuild手動
既定のセットアップと組織レベルの有効化に使用はい (C# および Java)はい (none がサポートされていない場所)いいえ
分析はユーザー構成なしで成功はいVariableいいえ
分析の完全性生成されたコードが分析されないVariableユーザー制御
分析の正確性よしよし最高

ビルド モードを選択する

          code scanningを初めて、または複数のリポジトリで設定する場合は、既定のセットアップを使用することをお勧めします。 既定のセットアップでは、 CodeQL データベースを生成してコードを分析するために使用できる最も簡単な方法が使用されるため、できるだけ早くアラートの修正を開始できます。 最初のアラートを解決したら、リスクの高いリポジトリ用の手動のビルド プロセスを使用して高度なセットアップに切り替えることができます。

言語固有の autobuild 動作、ランナーの要件、コンパイル済み言語のビルド モードの詳細については、 コンパイル済み言語の CodeQL ビルド オプションと手順 を参照してください。

複数言語リポジトリで複数のビルド モードを使用する

複数のコンパイル型言語を持つリポジトリの場合は、言語ごとに異なるビルド モードを使用できます。 たとえば、リポジトリに C/C++、C#、Javaが含まれている場合は、1 つの言語 (ここでは C/C++) に手動でビルド手順を指定できます。 このワークフローでは、言語ごとに異なるビルド モードを指定します。

strategy:
  matrix:
    include:
      # Analyzes C and C++ code using the commands in `Build C and C++ code`
      - language: c-cpp
        build-mode: manual
      # Analyzes C# code by automatically detecting a build
      - language: csharp
        build-mode: autobuild
      # Analyzes Java code directly from the codebase without a build
      - language: java-kotlin
        build-mode: none # analyzes Java only
steps:
- name: Checkout repository
  uses: actions/checkout@v5

# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
  uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
- if: ${{ matrix.build-mode == 'manual' }}
  name: Build C and C++ code
  run: |
    echo 'If you are using a "manual" build mode for one or more of the' \
      'languages you are analyzing, replace this with the commands to build' \
      'your code, for example:'
    echo ' make bootstrap'
    echo ' make release'
    exit 1
          CodeQLの最新バージョンでサポートされている言語、ライブラリ、フレームワークの詳細については、[](https://codeql.github.com/docs/codeql-overview/supported-languages-and-frameworks)ドキュメントでCodeQLを参照してください。 最新バージョンのCodeQLを実行するためのシステム要件については、[](https://codeql.github.com/docs/codeql-overview/system-requirements/#additional-software-requirements)ドキュメントのCodeQLを参照してください。

の依存関係キャッシュを有効にする CodeQL

既定のセットアップ ワークフローでは、依存関係キャッシュは、パブリック リポジトリとプライベート リポジトリ内の GitHubホストランナーに対してのみ有効になります。

高度なセットアップ ワークフローの場合、依存関係キャッシュは既定で無効になっています。 CodeQLの依存関係キャッシュを有効にするには、高度なセットアップ ワークフローのdependency-caching アクションのCodeQL設定を使用します。 この設定は、次の値を受け入れます。

  •         `false`
            /
            `none`
            /
            `off`: 依存関係キャッシュが無効 (既定)
    
  •         `restore`: 既存のキャッシュのみを復元し、新しいキャッシュを格納しない
    
  •         `store`: 新しいキャッシュのみを格納し、既存のキャッシュを復元しない
    
  •         `true`
            /
            `full`
            /
            `on`: 既存のキャッシュを復元し、新しいキャッシュを格納する
    

たとえば、次の設定では、 CodeQL アクションの依存関係キャッシュが有効になります。

    # Initializes CodeQL with dependency caching enabled
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: java
        dependency-caching: true

          `none`ビルド モードを使用するCodeQL

          C# および Java
          CodeQL、リポジトリに Kotlin コードも含まれている場合を除き、code scanningの既定のセットアップを有効にするときにビルドを必要とせずにデータベースを作成します。 リポジトリにJavaコードに加えて Kotlin コードが含まれている場合、Kotlin 分析にはビルドが必要であるため、自動ビルド プロセスで既定のセットアップが有効になります。

ビルドなしで CodeQL データベースを作成すると、次の場合に autobuild または手動のビルド手順を使用する場合よりも、精度の低い結果が得られる場合があります。

  • ビルド スクリプトが依存関係情報をクエリできないため、依存関係の推測が不正確です。

  • 通常、リポジトリはビルド プロセス中にコードを生成します。

            `autobuild` または手動のビルド手順を使用するには、高度なセットアップを使用します。
    

メモ

Java分析では、build-modenone に設定されていて、Kotlin コードがリポジトリに見つかった場合、Kotlin コードは分析されず、警告が生成されます。 「コンパイル済み言語の CodeQL ビルド オプションと手順」を参照してください。

          `autobuild` をCodeQLで使用する

          CodeQLアクションでは、`autobuild`を使用して、次の場合にコンパイルされた言語を分析します。
  • 既定のセットアップが有効になっており、言語は none ビルドには対応していません (C# および Java ではサポートされています)。
  • 詳細設定が有効になっており、ワークフローで build-mode: autobuild が指定されている。
  • 高度なセットアップが有効で、ワークフローに autobuild アクション (github/codeql-action/autobuild@v4) を使用した言語用の Autobuild ステップがある。

          `build-mode` オプションを使用します
# Initializes the CodeQL tools for scanning.
name: Analyze
strategy:
  matrix:
    include:
      # Analyze C and C++ code
      - language: c-cpp
        build-mode: autobuild
      # Analyze Go code
      - language: go
        build-mode: autobuild

steps:
  - uses: github/codeql-action/init@v4
    with:
      languages: ${{ matrix.language }}
      build-mode: ${{ matrix.build-mode }}

自動構築手順を使用する

    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v4

ビルド手順を手動で指定する

手動のビルド手順は、高度なセットアップを有効にした場合にのみ指定できます。「コード スキャンの詳細設定を構成する」を参照してください。

autobuild が失敗した場合、または autobuild プロセスによってビルドされたソース ファイルとは異なるソース ファイルのセットを分析する場合は、次の操作を行う必要があります。

  • ワークフローで言語のビルド モードを指定する場合は、ビルド モードを manual に変更します。
  • ワークフローに autobuild ステップが含まれている場合は、ワークフロー内の autobuild ステップを削除するかコメントにします。

次に、run ステップをコメント解除し、使用するビルド プロセスを手動で指定します。 C/C++、C#、Go、Java、Kotlin、Swift、CodeQL は、指定したビルド ステップによってビルドされたソース コードを分析します。

ワークフローを更新して、build-modemanual と定義します。

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
    build-mode: manual
- uses: github/codeql-action/analyze@v4
  with:
    category: "/language:${{ matrix.language }}"

もしくは「Autobuild」ステップをコメントアウトして、ワークフローを更新します。

    # Autobuild attempts to build any compiled languages.
    # - name: Autobuild
    #  uses: github/codeql-action/autobuild@v4

ビルド コマンドを追加する

手動ビルドが有効になっている場合は、ワークフローの run ステップをコメント解除し、リポジトリに適したビルド コマンドを追加します。 run ステップでは、オペレーティング システムのシェルを使用してコマンド ライン プログラムが実行されます。 これらのコマンドを変更し、別のコマンドを追加してビルド プロセスをカスタマイズできます。

- run: |
    make bootstrap
    make release
          `run` キーワードについて詳しくは、「[AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun)」をご覧ください。

コンパイルされた言語の手動ビルド手順を追加しても、 code scanning がリポジトリで動作していない場合は、 サイト管理者にお問い合わせください。