Qodana 2024.1 ヘルプ

.NET 用 Qodana

official JetBrains project

.NET 用 Qodana リンターの Docker イメージは、さまざまな使用シナリオをサポートするために提供されています。

  • 継続的インテグレーションの一環として分析を定期的に実行する (CI ベースの実行 )

  • シングルショット分析 (たとえば、ローカルで実行)。

Rider コードインスペクションに精通しており、エディター外での静的解析で何を期待できるかを知っている場合は、次のセクションをスキップして既存のプロファイルの使用から続行できます。

現場での作業を開始したばかりの場合は、提供されているデフォルトのセットアップを続行することをお勧めします。コードベースで実行される最も一般的なチェックの結果が表示されます。後で、ニーズに合わせて調整することができます。

Qodana for .NET リンターは 2 つの方法を使用して実行できます。Qodana CLI(英語) が最も簡単な方法です。必要に応じて、インストールページ(英語)を確認して、Qodana CLI をインストールします。あるいは、「Docker イメージ」タブから Docker コマンドを使用することもできます。

分析をローカルで実行する

Qodana CLI(英語) はネイティブモードで実行できます。これは、.NET フレームワークをターゲットにしている場合、またはプライベート NuGet フィードがある場合に、.NET リンターの Qodana に推奨される方法です。

qodana scan \    --ide QDNET

ここで、--ide オプションは JetBrains IDE バイナリファイルをダウンロードして使用します。

または、次の構成を qodana.yaml ファイルに保存します。

ide: QDNET

次のコマンドを使用して Qodana を実行します。

qodana scan

これは、.NET リンターの Qodana の Dockerized バージョンを実行する方法です。

  1. Docker Hub からイメージをプルします (latest バージョンに更新する場合にのみ必要です)。

    docker pull jetbrains/qodana-dotnet:2024.1
  2. 次のコマンドを実行します。

    docker run \ -v <source-directory>/:/data/project/ \ -v <output-directory>/:/data/results/ \ -e QODANA_TOKEN="<cloud-project-token>" \ jetbrains/qodana-dotnet:2024.1

    ここで、source-directoryoutput-directory は、それぞれプロジェクトソースコードディレクトリと分析結果ディレクトリへの完全なローカルパスです。QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターに必要なプロジェクトトークンを参照します。

このコマンドはソースコードの分析を実行し、Web サーバーを起動して結果を簡単に表示します。ブラウザーで Qodana クラウド(英語)を開いて、インスペクションの結果を調べます。ここで分析を再構成することもできます。詳細については、インスペクションレポートを参照してください。

ユーザーインターフェースが不要で、生データを確認する場合は、次のコマンドを使用します。

docker run \ -v <source-directory>/:/data/project/ \ -v <output-directory>/:/data/results/ \ -e QODANA_TOKEN="<cloud-project-token>" \ jetbrains/qodana-dotnet:2024.1

output-directory には必要な結果がすべて含まれます。テクニカルガイドの説明に従って、コマンドをさらに調整できます。

解析を連続して数回実行する場合は、docker run で再度使用する前に結果ディレクトリをクリーンアップしていることを確認してください。

プライベート NuGet フィードを使用して、.NET 用の Qodana を実行できます。

docker run \    -v <source-directory>/:/data/project/ \    -e QODANA_TOKEN="<cloud-project-token>" \    -e QODANA_NUGET_URL=<private-NuGet-feed-URL> \    -e QODANA_NUGET_USER=<login> \    -e QODANA_NUGET_PASSWORD=<plaintext-password> \    -e QODANA_NUGET_NAME=<name-of-private-NuGet-feed> \    jetbrains/qodana-dotnet:2024.1 \    --show-report

プライベート NuGet フィードを使用するための構成例は、GitHub(英語) Web サイトで入手できます。

プロジェクトのルートディレクトリで次のコマンドを実行してコードをインスペクションし、インスペクションレポートをローカルで表示します。

ユーザーインターフェースが不要で、生データを確認する場合は、次のコマンドを使用します。

qodana scan \ -e QODANA_TOKEN="<cloud-project-token>" \ -l jetbrains/qodana-dotnet:2024.1 \ --results-dir <output-directory>

output-directory は、SARIF 形式のレポートが保存されるディレクトリを指定します。QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターに必要なプロジェクトトークンを参照します。

CI で分析を実行する

次のコマンドを汎用シェルエグゼキュータのタスクとして使用します。

docker run \ -v <source-directory>/:/data/project/ \ -v <output-directory>/:/data/results/ \ -e QODANA_TOKEN="<cloud-project-token>" \ jetbrains/qodana-dotnet:2024.1

ここで、source-directoryoutput-directory は、それぞれプロジェクトソースコードディレクトリと分析結果ディレクトリへのフルパスです。QODANA_TOKEN 変数は、Ultimate と Ultimate Plus リンターに必要なプロジェクトトークンを参照します。

クオリティゲート機能を使用して、特定の問題数に達したときにビルドを失敗させること、およびベースライン機能を使用して、新しい Qodana for .NET の実行をベースラインとして選択された初期実行と比較することを検討してください。非 root として実行するもサポートされています。

プロジェクトのルートディレクトリで次のコマンドを実行します。

qodana scan \ -e QODANA_TOKEN="<cloud-project-token>" \ -l jetbrains/qodana-dotnet:2024.1 \ --results-dir <output-directory>

これにより、インスペクションの結果が output-directory で指定されたディレクトリに保存されます。

--fail-threshold オプション(英語)を使用して、クオリティゲート機能を適用し、特定の問題数に達したときにビルドを失敗させることもできます。

ベースライン機能は、--baseline および --baseline-include-absent オプションを使用して、.NET の新しい Qodana の実行を初期実行と比較します。

GitHub で分析を実行する

GitHub では、Qodana は Qodana Scan GitHub アクションとして実装されます。Qodana Scan GitHub アクションを構成するには、ワークフロー構成を含む .github/workflows/code_quality.yml ファイルを保存します。

name: Qodana on: workflow_dispatch: pull_request: push: branches: - main - 'releases/*' jobs: qodana: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2024.1

このワークフローを使用すると、Qodana はメインブランチ、リリースブランチ、リポジトリに届くプルリクエストで実行されます。

Qodana Scan は実験用であるため、with セクションで pr-mode パラメーターを追加構成する必要がある場合があります。

pr-mode: false

デフォルトでは、Qodana Scan は Qodana for .NET リンターの実験モードを使用します。問題が発生した場合は、バグトラッカーで問題を報告(英語)できます。

Qodana クラウドで承認し、レポートを Qodana クラウドに転送するには、次の手順に従います。

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

  2. GitHub ワークフローで、次のスニペットを追加して Qodana Scan アクションを呼び出します。

    - name: 'Qodana Scan' uses: JetBrains/qodana-action@v2024.1 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

プルリクエストを分析する

マージやプルリクエストなどの変更セットに対して増分分析を実行できます。

たとえば、特定のコミット内での作業を終了し、変更を分析したい場合は、--diff-start オプションを使用できます。

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

2 つのコミット間の変更セットをインスペクションするには、--diff-start--diff-end の両方のオプションを使用します。

qodana scan \    -e QODANA_TOKEN="<cloud-project-token>" \    --diff-start=<GIT_START_HASH> \    --diff-end=<GIT_END_HASH>
docker run \    -v $(pwd):/data/project/ \    -e QODANA_TOKEN="<cloud-project-token>" \    jetbrains/qodana-dotnet:2024.1 \    --diff-start=<GIT_START_HASH> \    --diff-end=<GIT_END_HASH>

既存のプロファイルの使用

このセクションは、Rider インスペクションプロファイルによるコード分析の構成に慣れているユーザーを対象としています。

コンテナー内のプロファイルを /data/profile.xml にマッピングすることで、既存のプロファイルへの参照を渡すことができます。

docker run \    -v <source-directory>/:/data/project/ \    -v <inspection-profile.xml>:/data/profile.xml \    -e QODANA_TOKEN="<cloud-project-token>" \    jetbrains/qodana-dotnet:2024.1

コンテナー内でプロファイルをマッピングすることで、既存のプロファイルへの参照を渡すことができます。

qodana scan \    -l jetbrains/qodana-dotnet:2024.1 \    --profile-path <path-to-profile>

qodana.yaml 経由で設定する

Qodana は分析構成の qodana.yaml ファイルを自動的に認識するため、追加のパラメーターを渡す必要はありません。qodana.yaml ファイルでは、ide: QDNET を保存して、Qodana をネイティブモードで実行できます。

インスペクションプロファイルへの参照は、特定の順序で解決されます。形式については、「YAML ファイル」を参照してください。

特定のソリューションまたはプロジェクトを分析する

デフォルトでは、Qodana は単一のソリューションファイルを見つけて使用しようとします。ソリューションファイルが存在しない場合は、プロジェクトファイルを見つけようとします。プロジェクトに複数のソリューションファイルが含まれている場合は、--solution オプションとソリューションファイルへの相対パスを使用して正確なファイル名を指定する必要があります。例: Qodana が常に MySolution.sln ソリューションファイルを分析するようにするには、次を使用できます。

--property=qodana.net.solution=MySolution.sln

あるいは、solution オプションとソリューションファイルへの相対パスを使用して、 qodana.yaml ファイルでソリューションファイル名を指定することもできます。

dotnet: solution: MySolution.sln

プロジェクトにソリューションファイルが含まれておらず、複数のプロジェクトファイルが含まれている場合は、--project オプションとプロジェクトファイルへの相対パスを使用する必要があります。例: MyProject.csproj プロジェクトファイルの場合、次を使用できます。

--property=qodana.net.project=MyProject.csproj

あるいは、project オプションを使用して、 qodana.yaml ファイルでプロジェクトファイル名を指定することもできます。

dotnet: project: MyProject.csproj

ソリューションを構成する

ソリューション構成は、ソリューション内のどのプロジェクトをビルドするか、およびソリューション内の特定のプロジェクトにどのプロジェクト構成を使用するかを定義します。

新しく作成された各ソリューションには Debug 構成と Release 構成が含まれており、カスタム構成で補完できます。

--property 構成オプションを使用して、現在のソリューションの構成を切り替えることができます。例: これを使用して Release 構成に切り替えます。

--property=qodana.net.configuration=Release

あるいは、qodana.yaml で構成を指定することもできます。

dotnet: configuration: Release

デフォルトでは、ソリューションプラットフォームは Any CPU に設定されています。--property オプションを使用してこれをオーバーライドできます。

--property=qodana.net.platform=x86

あるいは、qodana.yaml でプラットフォームを指定することもできます。

dotnet: platform: x86

プライベート NuGet リポジトリを使用してプロジェクトをインスペクションする

Qodana for .NET は、Windows 認証などを使用したプライベート NuGet リポジトリの認証をサポートしていません。この制限を克服するには、以下に示すように、必要なパッケージをすべて Qodana キャッシュ内に配置します。

  1. ローカルファイルシステムに、キャッシュを含むフォルダーを作成します。例: C:/Temp/QodanaCache にすることができます。

  2. --cache-dir C:/Temp/QodanaCache オプションを使用した Qodana の実行

  3. デフォルトで %userprofile%\.nuget\packages フォルダーに含まれるすべての NuGet パッケージを C:/Temp/QodanaCache/nuget にコピーします。カスタムパッケージフォルダーがある場合は、%userprofile%\.nuget\packages ではなく、そのフォルダーからパッケージをコピーします。

  4. --cache-dir C:/Temp/QodanaCache を使用して Qodana をもう一度実行します。

使用統計

JetBrains EAP ユーザー契約(英語)によると、ユーザーエクスペリエンスをさらに向上させるために、サードパーティのサービスを使用して機能の使用状況を分析できます。すべてのデータは匿名で収集されます。使用する Docker コマンドのオプションを調整することで、使用状況統計のレポートを無効にできます。詳細については、テクニカルガイドを参照してください。

関連ページ:

.NET 用 Qodana

Qodana for .NET は Rider に基づいており、.NET プロジェクトの静的分析を提供します。Rider のすべての機能が組み込まれており、次のことに役立ちます。異常なコードと考えられるバグを検出、デッドコードを削除する、スペルの問題をハイライトする、全体的なコード構造を改善する、コーディングのベストプラクティスを紹介する、インスペクションの結果を Qodana クラウドにアップロードする、Qodana for .NET は、C、C++、C#、VB.NET、JavaScript、Typ...

コードインスペクション

JetBrains Rider は、サポートされているすべての言語で 2500 を超えるコードインスペクションを提供します。これらのインスペクションは、開いているすべてのファイルの設計時にコードの問題を検出してハイライトするために適用されます。また、特定の範囲内のすべてのコードの問題を検出するために適用されます。インスペクション JetBrains Rider が提供するコードの種類を調べるには、異なる言語の JetBrains Rider コードインスペクションの全リストをご覧ください。コードイ...

インスペクションレポート

Qodana を使用すると、ローカルまたは Qodana クラウドで、インタラクティブでユーザーフレンドリーな形式でインスペクションレポートを確認できます。各レポートには次のタブが含まれています。実際の問題は、Qodana が最新のインスペクション中に検出した問題を明らかにします、ベースラインには、ベースラインとしてマークされ、それ以降修正されていない問題がリストされます。構成により、将来の使用に備えて Qodana を構成できます、ライセンス監査は

ベースライン

ベースラインは、特定の Qodana 実行時に取得され、ファイルに含まれているコードベースの問題のスナップショットです。ベースライン機能を使用すると、現在のコードとベースラインの状態を比較し、新しい問題、変更されていない問題、解決された問題を確認できます。この機能は、Community、Ultimate、Ultimate Plus ライセンスとその試用版で利用可能なすべてのリンターでサポートされています。使い方:ベースラインなしで Qodana を実行すると、現在の実行時に検出された問題を確認...

Qodana クラウド

Qodana を複数のプロジェクトまたはリポジトリで実行する場合、特にコードベースが複数のサーバーと仮想プライベートネットワークに分散されていて、各チームが独立して作業している場合は、すべての分析レポートを 1 か所に読み込んで集約すると便利です。このような場合、すべての Qodana インスタンスからレポート情報を収集して表示するための集中型ソリューションが役立ちます。Qodana クラウドは、さまざまな Qodana レポートを蓄積し、プロジェクトの進捗状況を一元的に追跡するのに役立つクラウ...

プロジェクト

プロジェクトは、Qodana レポートを蓄積します。各プロジェクトは、プロジェクトトークンによって一意に識別されます。このトークンは、Qodana レポートのアップロードに使用されます。プロジェクトの作成:オンボーディング段階では、Qodana Cloud がすでに最初のプロジェクトの作成を支援しているため、これらの手順は追加のプロジェクトを作成する場合にのみ適用されます。チームページで、ボタンをクリックします。以下で説明するウィザードの手順に従います。Qodana Cloud からアクセスでき...