{"meta":{"title":"コンパイル済み言語の CodeQL コード スキャン","intro":"CodeQLでコンパイル済み言語の分析方法、使用可能なビルド オプション、必要に応じてデータベース生成プロセスをカスタマイズする方法について説明します。","product":"セキュリティとコードの品質","breadcrumbs":[{"href":"/ja/code-security","title":"セキュリティとコードの品質"},{"href":"/ja/code-security/how-tos","title":"やり方"},{"href":"/ja/code-security/how-tos/find-and-fix-code-vulnerabilities","title":"コードの脆弱性を見つけて修正する"},{"href":"/ja/code-security/how-tos/find-and-fix-code-vulnerabilities/manage-your-configuration","title":"構成を管理する"},{"href":"/ja/code-security/how-tos/find-and-fix-code-vulnerabilities/manage-your-configuration/codeql-code-scanning-for-compiled-languages","title":"コンパイル済み言語の CodeQL"}],"documentType":"article"},"body":"# コンパイル済み言語の CodeQL コード スキャン\n\nCodeQLでコンパイル済み言語の分析方法、使用可能なビルド オプション、必要に応じてデータベース生成プロセスをカスタマイズする方法について説明します。\n\n## ビルド モードを比較する\n\n<div class=\"ghd-tool rowheaders\">\n\n| ビルド モードの特性             | なし                            | Autobuild                 | 手動     |\n| ---------------------- | ----------------------------- | ------------------------- | ------ |\n| 既定のセットアップと組織レベルの有効化に使用 | はい (C/C++、 C#、 Java および Rust) | はい (`none` がサポートされていない場所) | いいえ    |\n| 分析はユーザー構成なしで成功         | はい                            | Variable                  | いいえ    |\n| 分析の完全性                 | 生成されたコードが分析されない               | Variable                  | ユーザー制御 |\n| 分析の正確性                 | よし                            | よし                        | 最高     |\n\n</div>\n\n## ビルド モードを選択する\n\n```\n          code scanningを初めて、または複数のリポジトリで設定する場合は、既定のセットアップを使用することをお勧めします。 既定のセットアップでは、 CodeQL データベースを生成してコードを分析するために使用できる最も簡単な方法が使用されるため、できるだけ早くアラートの修正を開始できます。 最初のアラートを解決したら、リスクの高いリポジトリ用の手動のビルド プロセスを使用して高度なセットアップに切り替えることができます。\n```\n\n言語固有の `autobuild` 動作、ランナーの要件、コンパイル済み言語のビルド モードの詳細については、 [コンパイル済み言語の CodeQL ビルド オプションと手順](/ja/code-security/reference/code-scanning/codeql/codeql-build-options-and-steps-for-compiled-languages) を参照してください。\n\n## 複数言語リポジトリで複数のビルド モードを使用する\n\n複数のコンパイル型言語を持つリポジトリの場合は、言語ごとに異なるビルド モードを使用できます。 たとえば、リポジトリに C/C++、C#、Javaが含まれている場合は、1 つの言語 (ここでは C/C++) に手動でビルド手順を指定できます。 このワークフローでは、言語ごとに異なるビルド モードを指定します。\n\n```yaml\nstrategy:\n  matrix:\n    include:\n      # Analyzes C and C++ code using the commands in `Build C and C++ code`\n      - language: c-cpp\n        build-mode: manual\n      # Analyzes C# code by automatically detecting a build\n      - language: csharp\n        build-mode: autobuild\n      # Analyzes Java code directly from the codebase without a build\n      - language: java-kotlin\n        build-mode: none # analyzes Java only\nsteps:\n- name: Checkout repository\n  uses: actions/checkout@v5\n\n# Initializes CodeQL tools and creates a codebase for analysis.\n- name: Initialize CodeQL\n  uses: github/codeql-action/init@v4\n  with:\n    languages: ${{ matrix.language }}\n- if: ${{ matrix.build-mode == 'manual' }}\n  name: Build C and C++ code\n  run: |\n    echo 'If you are using a \"manual\" build mode for one or more of the' \\\n      'languages you are analyzing, replace this with the commands to build' \\\n      'your code, for example:'\n    echo ' make bootstrap'\n    echo ' make release'\n    exit 1\n```\n\n```\n          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を参照してください。\n```\n\n## の依存関係キャッシュを有効にする CodeQL\n\n既定のセットアップ ワークフローでは、依存関係キャッシュは、パブリック リポジトリとプライベート リポジトリ内の GitHubホストランナーに対してのみ有効になります。\n\n高度なセットアップ ワークフローの場合、依存関係キャッシュは既定で無効になっています。\nCodeQLの依存関係キャッシュを有効にするには、高度なセットアップ ワークフローの`dependency-caching` アクションのCodeQL設定を使用します。 この設定は、次の値を受け入れます。\n\n* `false`\n  /\n  `none`\n  /\n  `off`: 依存関係キャッシュが無効 (既定)\n* `restore`: 既存のキャッシュのみを復元し、新しいキャッシュを格納しない\n* `store`: 新しいキャッシュのみを格納し、既存のキャッシュを復元しない\n* `true`\n  /\n  `full`\n  /\n  `on`: 既存のキャッシュを復元し、新しいキャッシュを格納する\n\nたとえば、次の設定では、 CodeQL アクションの依存関係キャッシュが有効になります。\n\n```yaml\n    # Initializes CodeQL with dependency caching enabled\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v4\n      with:\n        languages: java\n        dependency-caching: true\n```\n\n##\n\n```\n          `none`ビルド モードを使用するCodeQL\n\n          C/C++、 C#、 Java および Rust\n          CodeQL、リポジトリに Kotlin コードも含まれている場合を除き、code scanningの既定のセットアップを有効にするときにビルドを必要とせずにデータベースを作成します。 リポジトリにJavaコードに加えて Kotlin コードが含まれている場合、Kotlin 分析にはビルドが必要であるため、自動ビルド プロセスで既定のセットアップが有効になります。\n```\n\nビルドなしで CodeQL データベースを作成すると、次の場合に `autobuild` または手動のビルド手順を使用する場合よりも、精度の低い結果が得られる場合があります。\n\n* ビルド スクリプトが依存関係情報をクエリできないため、依存関係の推測が不正確です。\n* 通常、リポジトリはビルド プロセス中にコードを生成します。\n\n  ```\n          `autobuild` または手動のビルド手順を使用するには、高度なセットアップを使用します。\n  ```\n\n> \\[!NOTE] Java分析では、`build-mode` が `none` に設定されていて、Kotlin コードがリポジトリに見つかった場合、Kotlin コードは分析されず、警告が生成されます。 「[コンパイル済み言語の CodeQL ビルド オプションと手順](/ja/code-security/reference/code-scanning/codeql/codeql-build-options-and-steps-for-compiled-languages#building-java-and-kotlin)」を参照してください。\n\n##\n\n```\n          `autobuild` をCodeQLで使用する\n\n          CodeQLアクションでは、`autobuild`を使用して、次の場合にコンパイルされた言語を分析します。\n```\n\n* 既定のセットアップが有効になっており、言語は `none` ビルドには対応していません (C/C++、 C#、 Java および Rust ではサポートされています)。\n* 詳細設定が有効になっており、ワークフローで `build-mode: autobuild` が指定されている。\n* 高度なセットアップが有効で、ワークフローに `autobuild` アクション (`github/codeql-action/autobuild@v4`) を使用した言語用の Autobuild ステップがある。\n\n###\n\n```\n          `build-mode` オプションを使用します\n```\n\n```yaml\n# Initializes the CodeQL tools for scanning.\nname: Analyze\nstrategy:\n  matrix:\n    include:\n      # Analyze C and C++ code\n      - language: c-cpp\n        build-mode: autobuild\n      # Analyze Go code\n      - language: go\n        build-mode: autobuild\n\nsteps:\n  - uses: github/codeql-action/init@v4\n    with:\n      languages: ${{ matrix.language }}\n      build-mode: ${{ matrix.build-mode }}\n```\n\n### 自動構築手順を使用する\n\n```yaml\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v4\n      with:\n        languages: ${{ matrix.language }}\n\n    - name: Autobuild\n      uses: github/codeql-action/autobuild@v4\n```\n\n## ビルド手順を手動で指定する\n\n手動のビルド手順は、高度なセットアップを有効にした場合にのみ指定できます。「[コード スキャンの詳細設定を構成する](/ja/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/configuring-advanced-setup-for-code-scanning#configuring-advanced-setup-for-a-repository)」を参照してください。\n\n`autobuild` が失敗した場合、または `autobuild` プロセスによってビルドされたソース ファイルとは異なるソース ファイルのセットを分析する場合は、次の操作を行う必要があります。\n\n* ワークフローで言語のビルド モードを指定する場合は、ビルド モードを `manual` に変更します。\n* ワークフローに `autobuild` ステップが含まれている場合は、ワークフロー内の `autobuild` ステップを削除するかコメントにします。\n\n次に、`run` ステップをコメント解除し、使用するビルド プロセスを手動で指定します。 C/C++、C#、Go、Java、Kotlin、Swift、CodeQL は、指定したビルド ステップによってビルドされたソース コードを分析します。\n\nワークフローを更新して、`build-mode` を `manual` と定義します。\n\n```yaml\n# Initializes the CodeQL tools for scanning.\n- name: Initialize CodeQL\n- uses: github/codeql-action/init@v4\n  with:\n    languages: ${{ matrix.language }}\n    build-mode: manual\n- uses: github/codeql-action/analyze@v4\n  with:\n    category: \"/language:${{ matrix.language }}\"\n```\n\nもしくは「Autobuild」ステップをコメントアウトして、ワークフローを更新します。\n\n```yaml\n    # Autobuild attempts to build any compiled languages.\n    # - name: Autobuild\n    #  uses: github/codeql-action/autobuild@v4\n```\n\n### ビルド コマンドを追加する\n\n手動ビルドが有効になっている場合は、ワークフローの `run` ステップをコメント解除し、リポジトリに適したビルド コマンドを追加します。\n`run` ステップでは、オペレーティング システムのシェルを使用してコマンド ライン プログラムが実行されます。 これらのコマンドを変更し、別のコマンドを追加してビルド プロセスをカスタマイズできます。\n\n```yaml\n- run: |\n    make bootstrap\n    make release\n```\n\n```\n          `run` キーワードについて詳しくは、「[AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun)」をご覧ください。\n```\n\n<!-- For \"no-build\" this is covered earlier in the article under \"About CodeQL build modes\". -->\n\nコンパイルされた言語の手動ビルド手順を追加しても、 code scanning がリポジトリで動作していない場合は、 [GitHub サポート ポータル](https://support.github.com)にお問い合わせください。"}