Qodana 2026.1 ヘルプ

C / C++

C/C++ ファミリのリンターは、CMake などの一般的なビルドシステムをサポートするか、 compile_commands.json ファイル(英語)を提供する C および C++ プロジェクトを解析できます。この機能を提供するリンターは 2 種類あります。

特性

説明

リンター名

qodana-cpp

Docker イメージ

jetbrains/qodana-cpp:2026.1<-clangXX><-privileged> *

ライセンスに基づいて利用可能

Ultimate および Ultimate Plus ライセンス

発送方法

Docker イメージ

サポート

CLion が提供するインスペクションのフルセット:

  • Clang-Tidy(英語) インスペクションは Qodana コミュニティによって C/C++ リンター用にサポートされています

  • MISRA(英語) インスペクション

  • データフロー解析に基づくインスペクション

* オプションの -clangXX タグを使用して、Clang-Tidy(英語) のバージョン(15 ~ 18)を指定します。-privileged タグを使用すると、Qodana を特権モードで実行し、ルートアクセスを必要とするコマンドを実行できます。この場合、Qodana にはデフォルトで qodana ユーザーが付属しており、このユーザーはルート権限を持ち、パスワードは不要です。このモードを使用するには、-clangXX タグも指定する必要があります。

特性

説明

リンター名

qodana-clang

Docker イメージ

jetbrains/qodana-clang:2026.1-eap<-clangXX> *

ライセンスに基づいて利用可能

コミュニティライセンス

発送方法

Docker イメージ

サポート

Clang-Tidy(英語) - ベースインスペクション

* オプションの -clangXX タグを使用して、Clang-Tidy(英語) バージョン 15 〜 18 を指定します。

どちらのリンターも AMD64 および ARM64 アーキテクチャをサポートしています。

サポートされている機能のリストを表示するには、サポートされている機能セクションに移動します。

実装の詳細

C/C++ 用の Qodana コミュニティの Docker イメージは、Clang 16 を採用しています。リンターによって使用されるすべてのソフトウェアの詳細な説明については、 Dockerfile (英語) を参照してください。

C/C++ 向けの Qodana コミュニティは、プロジェクトディレクトリの build/compile_commands.json ファイル内のコンパイルコマンドを検索します。このファイルは通常、ビルドシステムによって生成されます。リンターは compile_commands.json ファイルを読み込んだ後、プロジェクトを分析し、分析レポートを生成してローカルに保存するか、Qodana クラウドにアップロードします。

始める前に

プロジェクトを準備する

  1. Clang-Tidy ベースのインスペクションは .clang-tidy ファイルで設定できます。GitHub(英語)Web サイトの設定例を参照してください。設定後、このファイルをプロジェクトルートに保存してください。

  2. .clang-tidy ファイルを開き、Qodana によって分析されるファイルとパスのリストを構成します。

  3. C/C++ 用の Qodana コミュニティの場合、CLion ドキュメントポータルに従って compile_commands.json を生成し、プロジェクトルートの build ディレクトリに保存する必要があります。

    CMake を使用する場合は、qodana.yaml ファイルで次の bootstrap オプションを指定して compilation database を生成することもできます。例:

    bootstrap: |   set -eux   cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

    Qodana for C/C++ リンターの場合は、この手順をスキップできます。CLion がサポートするビルドシステムを使用している場合、プロジェクトは自動的に構成されます。これには、build/ ディレクトリではなく、プロジェクトルートに配置された compile_commands.json ファイルも含まれます。

  4. プロジェクトで、 Dockerfile (英語) にこれまで記載されていない特定のパッケージが必要な場合は、次の bootstrap コマンドを qodana.yaml ファイルに追加して、必要なパッケージをインストールします。

    bootstrap: |   set -eux   sudo apt-get update   sudo apt-get install -y <required-packages>   cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
  5. 生の compile_commands.json ファイルを使用して、Qodana Community for C/C++ リンターまたは Qodana for C/C++ リンターの実行中に compile_commands.json ファイル内の分析パスを変更するには、分析のためのパスの変更セクションの指示に従ってください。

Qodana クラウド

C/C++ リンター用の Qodana では、ライセンスを識別および検証するために Qodana クラウドプロジェクトトークンが必要なので、次の手順に従って取得してください。

  1. Qodana クラウド(英語)に移動して、そこでアカウントを作成します。

  2. Qodana Cloud で、組織チームプロジェクトを作成します。

  3. プロジェクトカードには、このセクションで後で使用するプロジェクトトークンが記載されています。

ソフトウェアを準備する

GitHub UI の設定タブで、QODANA_TOKEN 暗号化シークレット(英語)を作成し、その値としてプロジェクトトークンを保存します。

  1. Jenkins で、次のプラグインが稼働していることを確認します。

    Docker がインストールされており、Jenkins からアクセスできることを確認します。

    該当する場合は、Docker ドキュメントの Docker を非 root ユーザーとして管理する(英語)セクションの説明に従って、jenkins ユーザーが Docker にアクセスできることを確認してください。

  2. Jenkins で、qodana-token 資格情報(英語)を作成し、プロジェクトトークンをその値として保存します。

  3. Jenkins で、Jenkins ドキュメントポータル(英語)の説明に従ってマルチブランチパイプラインプロジェクトを作成します。

  1. プロジェクトリポジトリが GitLab CI/CD からアクセスできることを確認します。

  2. GitLab CI/CD で、 QODANA_TOKEN (英語) 変数を作成し、プロジェクトトークンをその値として保存します。

TeamCity で、プロジェクトビルド構成を作成します。

Qodana を実行するマシンに Docker をインストールします。

Linux を使用している場合は、現在の非 root ユーザー(英語)で Docker を実行できるはずです。

GitHub の Qodana CLI(英語) ページの指示に従ってください。

このコマンドを実行して、Qodana の Docker イメージをプルします。

docker pull jetbrains/qodana-<cpp|clang>:2026.1<-eap><-clangXX><-privileged>

Qodana の実行

main、ブランチ、リリースブランチ、リポジトリに届くプルリクエストを分析するには、このワークフロー構成を .github/workflows/code_quality.yml ファイルに保存します。

name: Qodana on: workflow_dispatch: pull_request: push: branches: # Specify your branches here - main # The 'main' branch - 'releases/*' # The release branches jobs: qodana: runs-on: ubuntu-latest permissions: contents: write pull-requests: write checks: write steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit fetch-depth: 0 # a full history is required for pull request analysis - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2026.1 with: args: --image jetbrains/qodana-cpp:2026.1 # args: --image jetbrains/qodana-clang:2026.1-eap # Community version env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

ここで、Qodana がプルリクエストモード (そのプルリクエストにのみ表示された問題を報告) で動作する場合、チェックアウトには fetch-depth: 0 が必要です。

compile_commands.json (C/C++ 専用の Qodana コミュニティ) の場所をオーバーライドするには、プロジェクトルートからの相対的な場所を指定できます。構成は次のようになります。

name: Qodana on: workflow_dispatch: pull_request: push: branches: # Specify your branches here - main # The 'main' branch - 'releases/*' # The release branches jobs: qodana: runs-on: ubuntu-latest permissions: contents: write pull-requests: write checks: write steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit fetch-depth: 0 # a full history is required for pull request analysis - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2026.1 with: args: | --image,jetbrains/qodana-clang:2026.1-eap, --compile-commands,<path-to-compile_commands.json> env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

さらなる構成例については、GitHub アクションセクションを参照してください。

このスニペットを Jenkinsfile に保存します:

pipeline { environment { QODANA_TOKEN=credentials('qodana-token') } agent { docker { args ''' -v "${WORKSPACE}":/data/project --entrypoint="" ''' image 'jetbrains/qodana-cpp:2026.1' // image 'jetbrains/qodana-clang:2026.1-eap' # Community version } } stages { stage('Qodana') { steps { sh '''qodana''' } } } }

compile_commands.json (C/C++ 専用の Qodana コミュニティ) の場所をオーバーライドするには、プロジェクトルートからの相対的な場所を指定できます。構成は次のようになります。

pipeline { environment { QODANA_TOKEN=credentials('qodana-token') } agent { docker { args ''' -v "${WORKSPACE}":/data/project --entrypoint="" ''' image 'jetbrains/qodana-clang:2026.1-eap' } } stages { stage('Qodana') { steps { sh ''' qodana \ --compile-commands <path-to-compile_commands.json> ''' } } } }

さらなる構成例については、Jenkins セクションを参照してください。

プロジェクトのルートディレクトリで、このスニペットを .gitlab-ci.yml ファイルに保存します。

include: - component: $CI_SERVER_FQDN/qodana/qodana/qodana-gitlab-ci@v2026.1 inputs: image: jetbrains/qodana-<cpp|clang>:2026.1<-eap><-clangXX><-privileged>

C/C++ リンターの Qodana コミュニティの compile_commands.json ファイルの場所をオーバーライドするには、プロジェクトルートからの相対的な場所を指定します。構成は次のようになります。

include: - component: $CI_SERVER_FQDN/qodana/qodana/qodana-gitlab-ci@v2026.1 inputs: image: jetbrains/qodana-clang:2026.1-eap args: --compile-commands <path-to-compile_commands.json>

さらなる構成例については、GitLab CI/CD セクションを参照してください。

  1. TeamCity UI で、Qodana を実行するビルドの構成ページに移動します。

  2. ビルド設定ページで、ビルドステップページに移動します。

  3. ビルドステップページで、ビルドステップを追加ボタンをクリックしてください。

  4. 開いたページで、Qodana ランナーを選択します。

  5. 新しいビルドステップ: Qodana ページで、高度なオプションを表示をクリックし、Qodana ランナーを構成します。

    • ステップ名は、他のビルドステップの中でこのステップを一意に識別します。

    • ステップ ID は、他のビルドステップの中でこのステップを一意に識別します。

    • ステップ実行は、このビルドステップをトリガーするビルド条件を構成します。

    • 作業ディレクトリはビルドプロセスのディレクトリを設定します。詳細については、TeamCity のドキュメントを参照してください。バージョン管理設定タブで Checkout directory パラメーターが指定されている場合は、このフィールドを空のままにすることができます。

    • レポート ID はレポートを一意に識別し、単一のビルド内で複数の分析ステップが構成されている場合に複数のレポートを区別できるようにします。

    • レポートを TeamCity テストに転送するチェックボックスは、TeamCity UI の「テスト」タブで Qodana レポートの可用性を構成します。このオプションを使用すると、検出された他の問題とともにコードベースの問題を表示できます。

    • リンターQodana リンターを構成します。

      ここで、「カスタム」を選択し、下のフィールドで C/C++ リンターの Qodana を指定します。

    • バージョンはデフォルトで Latest に設定されています。

    • インスペクションプロファイル:インスペクションプロファイルを定義します:

    • クラウドトークンは、Qodana Cloud で生成されたプロジェクトトークンを構成します。

    • 追加の Docker 引数は、Docker イメージによって受け入れられる引数を設定します。詳細については、構成オプションセクションを参照してください。

    • 追加の Qodana 引数を使用すると、デフォルトの Qodana 機能を拡張できます。詳細については、オプションの種類セクションを参照してください。

      コンパイルコマンドデータベースの場所をオーバーライドするには、--compile-commands <path-to-compile_commands.json> コマンドを使用して、プロジェクトルートからの相対的な場所を指定します。

    • Qodana CLI バージョンでは、使用する Qodana CLI(英語) バージョンを指定できます。

  6. 保存ボタンをクリックしてください。

さらなる構成例については、TeamCity セクションを参照してください。

次のコマンドを実行します:

docker run \    -v <source-directory>/:/data/project/ \    -v <output-directory>/:/data/results/ \    -e QODANA_TOKEN="<cloud-project-token>" \    jetbrains/qodana-cpp:2026.1    # jetbrains/qodana-clang:2026.1-eap # Community version

このコマンドにおいて、source-directoryoutput-directory はそれぞれプロジェクトのソースコードディレクトリと分析レポートディレクトリへの完全なローカルパスです。QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターが必要とするプロジェクトトークンを参照します。QODANA_TOKEN 変数を省略した場合、分析レポートはプロジェクトルートの output-directory に保存された qodana.sarif.json ファイルに格納されます。

C/C++ リンターの Qodana コミュニティの compile_commands.json ファイルの場所をオーバーライドするには、プロジェクトルートからの相対的な場所を指定できます。構成は次のようになります。

docker run \    -v <source-directory>/:/data/project/ \    -v <output-directory>/:/data/results/ \    -e QODANA_TOKEN="<cloud-project-token>" \    jetbrains/qodana-clang:2026.1-eap \    --compile-commands <path-to-compile_commands.json>

ブラウザーで Qodana クラウド(英語)を開き、分析レポートを確認して分析を再設定してください。詳細については、ドキュメントの分析レポートのセクションを参照してください。

分析を連続して複数回実行する場合は、docker run で再度使用する前に、レポートディレクトリを必ずクリーンアップしてください。

分析レポートを参照する

Qodana がプロジェクトを分析し、分析レポートを Qodana クラウドにアップロードしたら、プロジェクト Qodana クラウド(英語)に移動して分析レポートを確認できます。

Analysis report example

Qodana レポート UI の詳細については、「分析レポート」セクションを参照してください。

Qodana 構成を拡張

分析範囲の調整

Qodana は分析設定として qodana.yaml ファイルを認識するため、追加のパラメーターを渡す必要はありません。C/C++ リンター用の Qodana では、以下の設定が可能です。

分析のためのパスの変更

このセクションの推奨事項は、C/C++ リンターの Qodana コミュニティと、C/C++ リンターの Qodana が生の compile_commands.json ファイルで構成されたプロジェクトを分析する特定のケースにのみ適用されます。

リンターの Docker コンテナーに含まれる compile_commands.json ファイル内の分析パスを変更するには、分析のブートストラップ段階でスクリプトを実行できます。例: 以下の Python スクリプトは、Qodana の Docker コンテナー内の compile_commands.json ファイル内のパスを変更する glob パターンと正規表現を使用します。

#!/usr/bin/env python3 import json from pathlib import Path   # Read existing compile_commands.json ------------------------------------------ REPO_ROOT = Path.cwd() COMPILE_COMMANDS_PATH = REPO_ROOT / "build/compile_commands.json"   with open(COMPILE_COMMANDS_PATH, "r", encoding="utf-8") as fd:     compile_commands = json.load(fd)   # Filter source files ---------------------------------------------------------- from itertools import chain   INCLUDE_GLOBS = [     "src/**/*",     "include/**/*", ] allowed_paths = (REPO_ROOT.glob(pattern) for pattern in INCLUDE_GLOBS) allowed_paths = set(chain.from_iterable(allowed_paths))   def keep_condition(cc_entry: dict):     path = Path(cc_entry["file"])     return path in allowed_paths   compile_commands = list(filter(keep_condition, compile_commands))   # Save the updated list of source files ---------------------------------------- COMPILE_COMMANDS_PATH.rename(COMPILE_COMMANDS_PATH.with_suffix(".old.json")) with open(COMPILE_COMMANDS_PATH, "w", encoding="utf-8") as fd:     json.dump(compile_commands, fd, ensure_ascii=False, indent="\t")
#!/usr/bin/env python3 import json from pathlib import Path   # Read existing compile_commands.json ------------------------------------------ REPO_ROOT = Path.cwd() COMPILE_COMMANDS_PATH = REPO_ROOT / "build/compile_commands.json"   with open(COMPILE_COMMANDS_PATH, "r", encoding="utf-8") as fd:     compile_commands = json.load(fd)   # Filter source files ---------------------------------------------------------- from itertools import chain   EXCLUDE_GLOBS = [     "src/**/*",     "include/**/*", ] allowed_paths = (REPO_ROOT.glob(pattern) for pattern in EXCLUDE_GLOBS) allowed_paths = set(chain.from_iterable(allowed_paths))   # Invert the list of paths ----------------------------------------------------- allowed_paths = set(REPO_ROOT.rglob("*")) - allowed_paths   def keep_condition(cc_entry: dict):     path = Path(cc_entry["file"])     return path in allowed_paths   compile_commands = list(filter(keep_condition, compile_commands))   # Save the updated list of source files ---------------------------------------- COMPILE_COMMANDS_PATH.rename(COMPILE_COMMANDS_PATH.with_suffix(".old.json")) with open(COMPILE_COMMANDS_PATH, "w", encoding="utf-8") as fd:     json.dump(compile_commands, fd, ensure_ascii=False, indent="\t")
#!/usr/bin/env python3 import json from pathlib import Path   # Read existing compile_commands.json ------------------------------------------ REPO_ROOT = Path.cwd() COMPILE_COMMANDS_PATH = REPO_ROOT / "build/compile_commands.json"   with open(COMPILE_COMMANDS_PATH, "r", encoding="utf-8") as fd:     compile_commands = json.load(fd)   # Filter source files using the regex ------------------------------------------ import re   INCLUDE_REGEX = re.compile(r"src\/(core|engine)\/.*$")   def keep_condition(cc_entry: dict):     path = cc_entry["file"]     return re.fullmatch(INCLUDE_REGEX, path)   compile_commands = list(filter(keep_condition, compile_commands))   # Save the updated list of source files ---------------------------------------- COMPILE_COMMANDS_PATH.rename(COMPILE_COMMANDS_PATH.with_suffix(".old.json")) with open(COMPILE_COMMANDS_PATH, "w", encoding="utf-8") as fd:     json.dump(compile_commands, fd, ensure_ascii=False, indent="\t")

スクリプトを実行するには、 qodana.yaml ファイルの bootstrap セクションを使用します。例:

bootstrap: | set -eux cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON python3 filter-script.py

ベースライン機能を有効にする

ベースライン機能を使用すると、特定の問題の分析をスキップできます。ベースラインに関する情報は、SARIF 形式のファイルに含まれています。

このスニペットを .github/workflows/code_quality.yml ファイルに保存します。

name: Qodana on: workflow_dispatch: pull_request: push: branches: # Specify your branches here - main # The 'main' branch - master # The 'master' branch - 'releases/*' # The release branches jobs: qodana: runs-on: ubuntu-latest permissions: contents: write pull-requests: write checks: write steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit fetch-depth: 0 # a full history is required for pull request analysis - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2026.1 with: args: | --image jetbrains/qodana-cpp:2026.1 --baseline <path/to/qodana.sarif.json> # args: --image jetbrains/qodana-clang:2026.1-eap --baseline <path/to/qodana.sarif.json> # Community version env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

このスニペットには、ベースラインを含む SARIF ファイルへのパスを指定する args: --baseline,<path/to/qodana.sarif.json> 行があります。

stages ブロックには、SARIF 形式のベースラインファイルへのパスを指定する --baseline <path/to/qodana.sarif.json> 行が含まれています。

pipeline { environment { QODANA_TOKEN=credentials('qodana-token') } agent { docker { args ''' -v "${WORKSPACE}":/data/project --entrypoint="" ''' image 'jetbrains/qodana-cpp:2026.1' // image 'jetbrains/qodana-clang:2026.1-eap' // Community version } } stages { stage('Qodana') { steps { sh ''' qodana \ --baseline <path/to/qodana.sarif.json> ''' } } } }

--baseline <path/to/qodana.sarif.json> 行はベースライン機能を呼び出します。

include: - component: $CI_SERVER_FQDN/qodana/qodana/qodana-gitlab-ci@v2026.1 inputs: image: jetbrains/qodana-<cpp|clang>:2026.1<-eap><-clangXX><-privileged> args: | --baseline qodana.sarif.json --fail-threshold <number-of-accepted-problems>
  1. TeamCity UI で、Qodana を実行するビルドの構成ページに移動します。

  2. ビルド設定ページで、ビルドステップページに移動します。

  3. ビルドステップページで、ビルドステップを追加ボタンをクリックしてください。

  4. 開いたページで、Qodana ランナーを選択します。

  5. 新しいビルドステップ: Qodana ページで、高度なオプションを表示をクリックし、Qodana ランナーを構成します。

    • ステップ名は、他のビルドステップの中でこのステップを一意に識別します。

    • ステップ ID は、他のビルドステップの中でこのステップを一意に識別します。

    • ステップ実行は、このビルドステップをトリガーするビルド条件を構成します。

    • 作業ディレクトリはビルドプロセスのディレクトリを設定します。詳細については、TeamCity のドキュメントを参照してください。バージョン管理設定タブで Checkout directory パラメーターが指定されている場合は、このフィールドを空のままにすることができます。

    • レポート ID はレポートを一意に識別し、単一のビルド内で複数の分析ステップが構成されている場合に複数のレポートを区別できるようにします。

    • レポートを TeamCity テストに転送するチェックボックスは、TeamCity UI の「テスト」タブで Qodana レポートの可用性を構成します。このオプションを使用すると、検出された他の問題とともにコードベースの問題を表示できます。

    • リンターQodana リンターを構成します。

      ここで、「カスタム」を選択し、下のフィールドで C/C++ リンターの Qodana を指定します。

    • バージョンはデフォルトで Latest に設定されています。

    • インスペクションプロファイル:インスペクションプロファイルを定義します:

    • クラウドトークンは、Qodana Cloud で生成されたプロジェクトトークンを構成します。

    • 追加の Docker 引数は、Docker イメージによって受け入れられる引数を設定します。詳細については、構成オプションセクションを参照してください。

    • 追加の Qodana 引数を使用すると、デフォルトの Qodana 機能を拡張できます。詳細については、オプションの種類セクションを参照してください。

      このフィールドでは、--baseline <path/to/qodana.sarif.json> オプションを使用してベースラインフィーチャを指定します。

    • Qodana CLI バージョンでは、使用する Qodana CLI(英語) バージョンを指定できます。

  6. 保存ボタンをクリックしてください。

--baseline オプションを呼び出してこのコマンドを実行します。

docker run \ -v <source-directory>/:/data/project/ \ -v <path_to_baseline>:/data/base/ \ -e QODANA_TOKEN="<cloud-project-token>" \ jetbrains/qodana-cpp:2026.1 \ --baseline /data/base/<path-relative-to-project-dir>/qodana.sarif.json # Replace image with jetbrains/qodana-clang:2026.1-eap for community version

品質ゲートの有効化

品質ゲートは以下に対して設定できます。

  • プロジェクトの問題の総数

  • 問題の重大度に応じた複数の品質ゲート。

このスニペットを qodana.yaml ファイルに保存します。

failureConditions: severityThresholds: any: 50 # Total number of problems in all severities critical: 1 # Severities high: 2 moderate: 3 low: 4 info: 5

プルリクエストの分析

Qodana 用 C/C++ リンターを使用してプルリクエストを分析できます。

Qodana Scan GitHub アクション(英語)はすべてのプルリクエストを自動的に分析するため、追加の構成を指定する必要はありません。この構成を .github/workflows/code_quality.yml ファイルに保存します。

name: Qodana on: workflow_dispatch: pull_request: push: branches: # Specify your branches here - main # The 'main' branch - 'releases/*' # The release branches jobs: qodana: runs-on: ubuntu-latest permissions: contents: write pull-requests: write checks: write steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit fetch-depth: 0 # a full history is required for pull request analysis - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2026.1 with: args: --image jetbrains/qodana-cpp:2026.1 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

プロジェクトのルートディレクトリに、次のスニペットを含む .gitlab-ci.yml ファイルを保存します。

include: - component: $CI_SERVER_FQDN/qodana/qodana/qodana-gitlab-ci@v2026.1 inputs: image: jetbrains/qodana-<cpp|clang>:2026.1<-eap><-clangXX><-privileged>

この構成により、マージリクエスト分析が可能になります。

プルリクエストとマージリクエストを分析するための TeamCity の構成に関する情報は、TeamCity ドキュメントポータルで入手できます。

コードの変更を分析するには、--diff-start オプションを使用し、比較のベースとなるコミットのハッシュを指定します。

qodana scan \ -e QODANA_TOKEN="<cloud-project-token>" \ -l jetbrains/qodana-cpp:2026.1 \ --diff-start=<GIT_START_HASH>
docker run \    -v $(pwd):/data/project/ \    -e QODANA_TOKEN="<cloud-project-token>" \    jetbrains/qodana-cpp:2026.1 \    --diff-start=<GIT_START_HASH>

設定タイムアウトの設定

qd.cpp.startup.timeout.minutes プロパティを使用すると、構成ステージのタイムアウトを設定できます。例:

name: Qodana on: workflow_dispatch: pull_request: push: branches: # Specify your branches here - main # The 'main' branch - 'releases/*' # The release branches jobs: qodana: runs-on: ubuntu-latest permissions: contents: write pull-requests: write checks: write steps: - uses: actions/checkout@v3 with: ref: ${{ github.event.pull_request.head.sha }} # to check out the actual pull request commit, not the merge commit fetch-depth: 0 # a full history is required for pull request analysis - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2026.1 with: args: | --linter qodana-cpp --property qd.cpp.startup.timeout.minutes=10 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

これは、Linux 上で Qodana を実行する例です。その他の例は、GitLab CI/CD のセクションに掲載されています。

プロジェクトのルートディレクトリに、次のスニペットを含む .gitlab-ci.yml ファイルを保存します。

include: - component: $CI_SERVER_FQDN/qodana/qodana/qodana-gitlab-ci@v2026.1 inputs: image: jetbrains/qodana-<cpp|clang>:2026.1<-eap><-clangXX><-privileged> args: --property qd.cpp.startup.timeout.minutes=10
qodana scan \    -e QODANA_TOKEN="<cloud-project-token>" \    --linter qodana-cpp \    --property qd.cpp.startup.timeout.minutes=10
docker run \    -v $(pwd):/data/project/ \    -e QODANA_TOKEN="<cloud-project-token>" \    jetbrains/qodana-<cpp|clang>:2026.1<-eap><-clangXX><-privileged> \    --property qd.cpp.startup.timeout.minutes=10

コンパイラーと環境を構成する

CMake プリセット(英語)を使用すると、特定のコンパイラーや環境に合わせて Qodana for C/C++ リンターをカスタマイズできます。各プリセットには、ターゲットビルドディレクトリ、キャッシュ変数、推奨ジェネレーター、コンパイラー、プロジェクトルートに含まれる CMakePresets.json ファイルのその他の configurePresets オブジェクトオプションなどの CLI オプションを保存できます。

以下は my-qodana-preset プリセット設定の例です。

{ "version": 3, "configurePresets": [ { "name": "my-qodana-preset", "generator": "Ninja", "binaryDir": "build", "cacheVariables": { "CMAKE_BUILD_TYPE": "Release", "CMAKE_C_COMPILER": "clang-16", "CMAKE_CXX_COMPILER": "clang++-16", "USE_OPENGL": true, "BUILD_EXTENSION": false } } ] }

my-qodana-preset プリセットを呼び出して Qodana を実行するには、 qodana.yaml ファイルに、cpp および cmakePreset セクションを使用する次の構成を保存します。

cpp: cmakePreset: my-qodana-preset

サポートされている機能

機能

リンターによってサポートされています

ライセンスに基づいて利用可能

ベースライン

Qodana を C/C++ に
C/C++ のための Qodana コミュニティ

コミュニティ、Ultimate、Ultimate プラス

クオリティゲート

Qodana を C/C++ に
C/C++ のための Qodana コミュニティ

コミュニティ、Ultimate、Ultimate プラス

インサイト

C/C++ 用 Qodana

Ultimate Plus

シングルサインオン

C/C++ 用 Qodana

Ultimate Plus

使用統計

JetBrains EAP ユーザー契約(英語)によれば、当社はユーザーエクスペリエンスをさらに向上させるために、サードパーティのサービスを使用して当社の機能の使用状況を分析することができます。すべてのデータは匿名で収集されます。統計を無効にするには、--no-statistics=true CLI オプションを使用します。

2026 年 6 月 02 日

関連ページ:

Qodana のエディション

ニーズに応じて、次の表に示す適切なライセンスを選択できます。Community フリー孤立した問題の解決に最適 Ultimate 詳細については、サブスクリプションのオプションと価格を参照してくださいさまざまなビジネスタスクを解決するために設計されています。試用版をご利用いただけます。Ultimate Plus 詳細については、サブスクリプションのオプションと価格を参照してください Ultimate ライセンスと同じ機能がすべて含まれていますが、追加機能と無制限の履歴データストレージも含まれています。試用...

C/C++ インスペクションのリスト

データフロー分析:定数条件メソッド制御とデータフローを分析して、常に true または false である条件と静的に定数値を持つ式を報告します。警告定数関数の結果戻り値が常に同じ定数に等しい関数を検出します。警告定数パラメーターパラメーターが常に同じ定数に等しい関数を検出します。警告ぶら下がりポインタ無効なデータを指すポインターを検出します。一般的なケースは、double-free および use-after-free の問題です。制限のリストについては、この親チケットを確認してください。警告無限...

Compilation database

CMake、Gradle、Makefile に基づいていないプロジェクトで作業している場合でも、CLion が提供する高度な IDE 機能を利用できます。1 つの方法は、非 CMake プロジェクトをインポートし、CLion にそれを単純な CMake 構造に変換させることです。別のオプションは、compilation database をロードしてプロジェクトを開くことです。compilation database を使用すると、CLion はプロジェクトファイルを検出し、インクルードパスやコンパ...

クイックスタート

Qodana Cloud の使用を開始するには、Qodana クラウド Web サイトに移動してください。JetBrains アカウントで続行するボタンをクリックして JetBrains アカウントを作成し、Qodana クラウドにログインできます。未登録ユーザーの場合は、Qodana によってすでに分析されたデモプロジェクトを調べることができます。レポートを詳しく調べるには、レポートセクションを参照してください。Qodana Cloud に初めてログインすると、組織、チーム、プロジェクトを作成す...

組織

組織は、Qodana クラウドのすべてのエンティティのトップレベルの構造を提供します。すべての組織は、特定の JetBrains アカウントに基づいて作成されます。選択に応じて、プライベートまたはパブリックになります。Qodana Cloud のすべてのアカウントは、デフォルトの組織となる組織に基づいています。Qodana Cloud UI の左上にあるリストを使用して、組織間を移動できます。組織を作成する:プライベート組織またはパブリック組織を作成できます。プライベート組織に保存されたレポー...

チーム

チームは、特定のプロジェクトを蓄積する組織の一部です。チームを使用すると、Qodana クラウドの専用プロジェクトごとにユーザーをグループ化できます。チームを作成する:プロジェクト設定段階で、Qodana Cloud はチームの作成を支援するため、この手順は追加のチームを作成する場合にのみ必要です。組織ページで、「」をクリックします。これにより、ダイアログが開きます。ダイアログで、チーム名と可視性を指定して、をクリックします。チームを移動する:組織ページでチームのタイルをクリックするか、左側...