C / C++
C/C++ ファミリのリンターは、CMake などの一般的なビルドシステムをサポートするか、 compile_commands.json ファイル(英語)を提供する C および C++ プロジェクトを解析できます。この機能を提供するリンターは 2 種類あります。
特性 | 説明 |
|---|---|
リンター名 |
|
Docker イメージ |
|
ライセンスに基づいて利用可能 | Ultimate および Ultimate Plus ライセンス |
発送方法 | Docker イメージ |
サポート | CLion が提供するインスペクションのフルセット:
|
* オプションの -clangXX タグを使用して、Clang-Tidy(英語) のバージョン(15 ~ 18)を指定します。-privileged タグを使用すると、Qodana を特権モードで実行し、ルートアクセスを必要とするコマンドを実行できます。この場合、Qodana にはデフォルトで qodana ユーザーが付属しており、このユーザーはルート権限を持ち、パスワードは不要です。このモードを使用するには、-clangXX タグも指定する必要があります。
特性 | 説明 |
|---|---|
リンター名 |
|
Docker イメージ |
|
ライセンスに基づいて利用可能 | コミュニティライセンス |
発送方法 | 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 クラウドにアップロードします。
始める前に
プロジェクトを準備する
Clang-Tidy ベースのインスペクションは
.clang-tidyファイルで設定できます。GitHub(英語)Web サイトの設定例を参照してください。設定後、このファイルをプロジェクトルートに保存してください。.clang-tidyファイルを開き、Qodana によって分析されるファイルとパスのリストを構成します。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=ONQodana for C/C++ リンターの場合は、この手順をスキップできます。CLion がサポートするビルドシステムを使用している場合、プロジェクトは自動的に構成されます。これには、
build/ディレクトリではなく、プロジェクトルートに配置されたcompile_commands.jsonファイルも含まれます。プロジェクトで、
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生の
compile_commands.jsonファイルを使用して、Qodana Community for C/C++ リンターまたは Qodana for C/C++ リンターの実行中にcompile_commands.jsonファイル内の分析パスを変更するには、分析のためのパスの変更セクションの指示に従ってください。
Qodana クラウド
C/C++ リンター用の Qodana では、ライセンスを識別および検証するために Qodana クラウドプロジェクトトークンが必要なので、次の手順に従って取得してください。
Qodana クラウド(英語)に移動して、そこでアカウントを作成します。
プロジェクトカードには、このセクションで後で使用するプロジェクトトークンが記載されています。
ソフトウェアを準備する
GitHub UI のタブで、QODANA_TOKEN 暗号化シークレット(英語)を作成し、その値としてプロジェクトトークンを保存します。
Jenkins で、次のプラグインが稼働していることを確認します。
Docker イメージを実行するには、Docker(英語) および Docker パイプライン(英語)が必要です
Jenkins プロジェクトでの Git 操作には Git(英語) が必要です
Docker がインストールされており、Jenkins からアクセスできることを確認します。
該当する場合は、Docker ドキュメントの Docker を非 root ユーザーとして管理する(英語)セクションの説明に従って、
jenkinsユーザーが Docker にアクセスできることを確認してください。Jenkins で、
qodana-token資格情報(英語)を作成し、プロジェクトトークンをその値として保存します。Jenkins で、Jenkins ドキュメントポータル(英語)の説明に従ってマルチブランチパイプラインプロジェクトを作成します。
プロジェクトリポジトリが GitLab CI/CD からアクセスできることを確認します。
GitLab CI/CD で、
QODANA_TOKEN(英語) 変数を作成し、プロジェクトトークンをその値として保存します。
Qodana を実行するマシンに Docker をインストールします。
Linux を使用している場合は、現在の非 root ユーザー(英語)で Docker を実行できるはずです。
GitHub の Qodana CLI(英語) ページの指示に従ってください。
このコマンドを実行して、Qodana の Docker イメージをプルします。
Qodana の実行
main、ブランチ、リリースブランチ、リポジトリに届くプルリクエストを分析するには、このワークフロー構成を .github/workflows/code_quality.yml ファイルに保存します。
ここで、Qodana がプルリクエストモード (そのプルリクエストにのみ表示された問題を報告) で動作する場合、チェックアウトには fetch-depth: 0 が必要です。
compile_commands.json (C/C++ 専用の Qodana コミュニティ) の場所をオーバーライドするには、プロジェクトルートからの相対的な場所を指定できます。構成は次のようになります。
さらなる構成例については、GitHub アクションセクションを参照してください。
このスニペットを Jenkinsfile に保存します:
compile_commands.json (C/C++ 専用の Qodana コミュニティ) の場所をオーバーライドするには、プロジェクトルートからの相対的な場所を指定できます。構成は次のようになります。
さらなる構成例については、Jenkins セクションを参照してください。
プロジェクトのルートディレクトリで、このスニペットを .gitlab-ci.yml ファイルに保存します。
C/C++ リンターの Qodana コミュニティの compile_commands.json ファイルの場所をオーバーライドするには、プロジェクトルートからの相対的な場所を指定します。構成は次のようになります。
さらなる構成例については、GitLab CI/CD セクションを参照してください。
TeamCity UI で、Qodana を実行するビルドの構成ページに移動します。
ページで、ボタンをクリックしてください。
開いたページで、 ランナーを選択します。
ページで、をクリックし、 ランナーを構成します。
は、他のビルドステップの中でこのステップを一意に識別します。
は、他のビルドステップの中でこのステップを一意に識別します。
は、このビルドステップをトリガーするビルド条件を構成します。
はビルドプロセスのディレクトリを設定します。詳細については、TeamCity のドキュメントを参照してください。タブで
Checkout directoryパラメーターが指定されている場合は、このフィールドを空のままにすることができます。はレポートを一意に識別し、単一のビルド内で複数の分析ステップが構成されている場合に複数のレポートを区別できるようにします。
チェックボックスは、TeamCity UI の「テスト」タブで Qodana レポートの可用性を構成します。このオプションを使用すると、検出された他の問題とともにコードベースの問題を表示できます。
は Qodana リンターを構成します。
ここで、「カスタム」を選択し、下のフィールドで C/C++ リンターの Qodana を指定します。
はデフォルトで
Latestに設定されています。はインスペクションプロファイルを定義します:
qodana.starter (default)はデフォルトプロファイルの 1 つです。Profile nameではプロファイルを指定できます。詳細については、既存の Qodana プロファイルセクションを参照してください。Profile pathを使用すると、カスタムプロファイルへのパスを指定できます。このオプションを使用するには、qodana.yamlファイルでもカスタムプロファイルを構成する必要があります。
は、Qodana Cloud で生成されたプロジェクトトークンを構成します。
は、Docker イメージによって受け入れられる引数を設定します。詳細については、構成オプションセクションを参照してください。
を使用すると、デフォルトの Qodana 機能を拡張できます。詳細については、オプションの種類セクションを参照してください。
コンパイルコマンドデータベースの場所をオーバーライドするには、
--compile-commands <path-to-compile_commands.json>コマンドを使用して、プロジェクトルートからの相対的な場所を指定します。では、使用する Qodana CLI(英語) バージョンを指定できます。
ボタンをクリックしてください。
さらなる構成例については、TeamCity セクションを参照してください。
次のコマンドを実行します:
このコマンドにおいて、source-directory と output-directory はそれぞれプロジェクトのソースコードディレクトリと分析レポートディレクトリへの完全なローカルパスです。QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターが必要とするプロジェクトトークンを参照します。QODANA_TOKEN 変数を省略した場合、分析レポートはプロジェクトルートの output-directory に保存された qodana.sarif.json ファイルに格納されます。
C/C++ リンターの Qodana コミュニティの compile_commands.json ファイルの場所をオーバーライドするには、プロジェクトルートからの相対的な場所を指定できます。構成は次のようになります。
ブラウザーで Qodana クラウド(英語)を開き、分析レポートを確認して分析を再設定してください。詳細については、ドキュメントの分析レポートのセクションを参照してください。
分析を連続して複数回実行する場合は、docker run で再度使用する前に、レポートディレクトリを必ずクリーンアップしてください。
分析レポートを参照する
Qodana がプロジェクトを分析し、分析レポートを Qodana クラウドにアップロードしたら、プロジェクト Qodana クラウド(英語)に移動して分析レポートを確認できます。

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 パターンと正規表現を使用します。
スクリプトを実行するには、 qodana.yaml ファイルの bootstrap セクションを使用します。例:
ベースライン機能を有効にする
ベースライン機能を使用すると、特定の問題の分析をスキップできます。ベースラインに関する情報は、SARIF 形式のファイルに含まれています。
このスニペットを .github/workflows/code_quality.yml ファイルに保存します。
このスニペットには、ベースラインを含む SARIF ファイルへのパスを指定する args: --baseline,<path/to/qodana.sarif.json> 行があります。
stages ブロックには、SARIF 形式のベースラインファイルへのパスを指定する --baseline <path/to/qodana.sarif.json> 行が含まれています。
--baseline <path/to/qodana.sarif.json> 行はベースライン機能を呼び出します。
TeamCity UI で、Qodana を実行するビルドの構成ページに移動します。
ページで、ボタンをクリックしてください。
開いたページで、 ランナーを選択します。
ページで、をクリックし、 ランナーを構成します。
は、他のビルドステップの中でこのステップを一意に識別します。
は、他のビルドステップの中でこのステップを一意に識別します。
は、このビルドステップをトリガーするビルド条件を構成します。
はビルドプロセスのディレクトリを設定します。詳細については、TeamCity のドキュメントを参照してください。タブで
Checkout directoryパラメーターが指定されている場合は、このフィールドを空のままにすることができます。はレポートを一意に識別し、単一のビルド内で複数の分析ステップが構成されている場合に複数のレポートを区別できるようにします。
チェックボックスは、TeamCity UI の「テスト」タブで Qodana レポートの可用性を構成します。このオプションを使用すると、検出された他の問題とともにコードベースの問題を表示できます。
は Qodana リンターを構成します。
ここで、「カスタム」を選択し、下のフィールドで C/C++ リンターの Qodana を指定します。
はデフォルトで
Latestに設定されています。はインスペクションプロファイルを定義します:
qodana.starter (default)はデフォルトプロファイルの 1 つです。Profile nameではプロファイルを指定できます。詳細については、既存の Qodana プロファイルセクションを参照してください。Profile pathを使用すると、カスタムプロファイルへのパスを指定できます。このオプションを使用するには、qodana.yamlファイルでもカスタムプロファイルを構成する必要があります。
は、Qodana Cloud で生成されたプロジェクトトークンを構成します。
は、Docker イメージによって受け入れられる引数を設定します。詳細については、構成オプションセクションを参照してください。
を使用すると、デフォルトの Qodana 機能を拡張できます。詳細については、オプションの種類セクションを参照してください。
このフィールドでは、
--baseline <path/to/qodana.sarif.json>オプションを使用してベースラインフィーチャを指定します。では、使用する Qodana CLI(英語) バージョンを指定できます。
ボタンをクリックしてください。
--baseline オプションを呼び出してこのコマンドを実行します。
品質ゲートの有効化
品質ゲートは以下に対して設定できます。
プロジェクトの問題の総数
問題の重大度に応じた複数の品質ゲート。
このスニペットを qodana.yaml ファイルに保存します。
プルリクエストの分析
Qodana 用 C/C++ リンターを使用してプルリクエストを分析できます。
Qodana Scan GitHub アクション(英語)はすべてのプルリクエストを自動的に分析するため、追加の構成を指定する必要はありません。この構成を .github/workflows/code_quality.yml ファイルに保存します。
プロジェクトのルートディレクトリに、次のスニペットを含む .gitlab-ci.yml ファイルを保存します。
この構成により、マージリクエスト分析が可能になります。
プルリクエストとマージリクエストを分析するための TeamCity の構成に関する情報は、TeamCity ドキュメントポータルで入手できます。
コードの変更を分析するには、--diff-start オプションを使用し、比較のベースとなるコミットのハッシュを指定します。
設定タイムアウトの設定
qd.cpp.startup.timeout.minutes プロパティを使用すると、構成ステージのタイムアウトを設定できます。例:
これは、Linux 上で Qodana を実行する例です。その他の例は、GitLab CI/CD のセクションに掲載されています。
プロジェクトのルートディレクトリに、次のスニペットを含む .gitlab-ci.yml ファイルを保存します。
コンパイラーと環境を構成する
CMake プリセット(英語)を使用すると、特定のコンパイラーや環境に合わせて Qodana for C/C++ リンターをカスタマイズできます。各プリセットには、ターゲットビルドディレクトリ、キャッシュ変数、推奨ジェネレーター、コンパイラー、プロジェクトルートに含まれる CMakePresets.json ファイルのその他の configurePresets オブジェクトオプションなどの CLI オプションを保存できます。
以下は my-qodana-preset プリセット設定の例です。
my-qodana-preset プリセットを呼び出して Qodana を実行するには、 qodana.yaml ファイルに、cpp および cmakePreset セクションを使用する次の構成を保存します。
サポートされている機能
使用統計
JetBrains EAP ユーザー契約(英語)によれば、当社はユーザーエクスペリエンスをさらに向上させるために、サードパーティのサービスを使用して当社の機能の使用状況を分析することができます。すべてのデータは匿名で収集されます。統計を無効にするには、--no-statistics=true CLI オプションを使用します。
関連ページ:
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 はチームの作成を支援するため、この手順は追加のチームを作成する場合にのみ必要です。組織ページで、「」をクリックします。これにより、ダイアログが開きます。ダイアログで、チーム名と可視性を指定して、をクリックします。チームを移動する:組織ページでチームのタイルをクリックするか、左側...