Qodana 2024.1 ヘルプ

JVM

すべての Qodana リンターは、特定のプログラミング言語とフレームワーク用に設計された IDE に基づいています。Python プロジェクトを分析するには、次のリンターを使用できます。

  • JVM 用の Qodana は IntelliJ IDEA Ultimate に基づいており、Ultimate および Ultimate Plus ライセンスでライセンスされています。

  • Qodana Community for JVM および Qodana Community for Android は、IntelliJ IDEA Community に基づいており、Community ライセンスに基づいてライセンスされます。

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

始める前に

Qodana を実行する前に、プロジェクト用に JDK を構成できます。

Qodana の実行

JetBrains IDE

IntelliJ IDEA で Qodana を実行し、保存および分析の目的でインスペクションレポートを Qodana クラウドに送信できます。

  1. IntelliJ IDEA で、ツール | Qodana | Qodana でコード分析を試してみるに移動します。

  2. Qodana の実行ダイアログでは、Qodana を設定できます。

    Configuring Qodana in the Run Qodana dialog

    このダイアログには次のコンポーネントが含まれています。

    名前

    説明

    qodana.yaml ファイル

    テキストフィールドでは、このファイルで Qodana が使用するコード分析を設定できます。利用可能な設定オプションの詳細について

    インスペクションの結果を Qodana クラウドに送信するオプション

    Qodana Cloud にレポートを送信する場合は、このオプションをチェックして、Qodana クラウドで生成されたプロジェクトトークンを貼り付けることができます。

    qodana.yaml をプロジェクトルートに保存するオプション

    このオプションをチェックすると、このダイアログで作成した Qodana 設定をプロジェクトのプロジェクトルートの qodana.yaml ファイルに保存できます。

    Qodana 解析ベースラインの使用オプション

    ベースライン機能を使用すると、特定の問題の分析をスキップできます

    コードを分析するには、実行をクリックします。

  3. 問題ツールウィンドウのサーバーサイド解析タブで、インスペクションの結果を確認します。

CI/CD

Qodana を実行する前に、Qodana クラウドアカウントを作成します。Qodana Cloud で、ライセンスの識別と検証に Qodana が使用するプロジェクトトークンを生成します。Qodana Cloud で、インスペクションレポートを確認できます。

以下のように Qodana GitHub のスキャンアクション(英語)を使用して Qodana を実行できます。

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

  2. GitHub UI のアクションタブで、新しいワークフローを設定し、.github/workflows/code_quality.yml ファイルを作成します。

  3. mainmaster ブランチ、およびリリースブランチとリポジトリに届くプルリクエストをインスペクションするには、このワークフロー構成を .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@v2024.1 env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

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

これらのプラグインが Jenkins インスタンスにインストールされていることを確認してください。

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

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

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

プロジェクトリポジトリのルートディレクトリに、Jenkinsfile を作成します。

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

pipeline { environment { QODANA_TOKEN=credentials('qodana-token') } agent { docker { args ''' -v "${WORKSPACE}":/data/project --entrypoint="" ''' image 'jetbrains/qodana-jvm<-community><-android>:2024.1' } } stages { stage('Qodana') { steps { sh '''qodana''' } } } }

プロジェクトリポジトリが GitLab CI/CD からアクセスできることを確認してください。

プロジェクトのルートディレクトリに .gitlab-ci.yml ファイルを作成し、次の構成を保存します。

qodana: image: name: jetbrains/qodana-jvm<-community><-android>:2024.1 entrypoint: [""] cache: - key: qodana-2024.1-$CI_DEFAULT_BRANCH-$CI_COMMIT_REF_SLUG fallback_keys: - qodana-2024.1-$CI_DEFAULT_BRANCH- - qodana-2024.1- paths: - .qodana/cache variables: QODANA_TOKEN: $qodana_token script: - qodana --cache-dir=$CI_PROJECT_DIR/.qodana/cache

このスニペットでは:

ローカルで実行する他の方法

Qodana をローカルで実行するには 2 つのオプションがあります: Qodana CLI(英語) を実行するか、Qodana の Docker イメージを直接使用することができます。Qodana リンターは Docker コンテナーで配布されるため、Docker をローカルマシンにインストールする必要があります。
Linux を使用している場合は、現在の非 root ユーザー(英語)で Docker を実行できるはずです。詳細についてはインストールページ(英語)を確認してください。

Qodana をローカルで実行する方法の例を次に示します。

qodana scan \ -e QODANA_TOKEN="<cloud-project-token>" \ -l jetbrains/qodana-jvm<-community><-android>:2024.1

ここで、QODANA_TOKEN 変数はプロジェクトトークンを参照します。

-l オプションを省略すると、デフォルトで JVM リンターの Qodana が実行されます。

まず、Docker Hub からイメージをプルします (最新バージョンを取得する場合にのみ必要です)。

docker pull jetbrains/qodana-jvm<-community><-android>:2024.1

source-directory がプロジェクトのルートを指し、QODANA_TOKENプロジェクトトークンを参照して、ローカル分析を開始します。

docker run \ -v <source-directory>/:/data/project/ \ -e QODANA_TOKEN="<cloud-project-token>" \ jetbrains/qodana-jvm<-community><-android>:2024.1

ブラウザーで Qodana クラウド(英語)を開き、分析結果を調べて分析を再構成します。詳細については、インスペクションレポートセクションを参照してください。

分析結果を調べる

JetBrains IDE

以下に説明するように、Qodana クラウドから最新の Qodana レポートを IDE に読み込むことができます。

  1. IDE で、ツール | Qodana | Qodana にログインに移動します。

  2. 設定ダイアログで、ログインをクリックします。

    Connecting to Qodana Cloud

    これにより、認証ページにリダイレクトされます。

  3. ローカルプロジェクトをリンクする Qodana クラウドプロジェクトを選択します。

    Linking the project to Qodana Cloud
  4. 最も関連性の高い Qodana レポートを常にロードしますオプションをチェックすると、Qodana クラウドから最も実際的で関連性の高いレポートを受け取ることができます。

    Enabling to load the most relevant reports

    この場合、IDE は現在のリビジョン ID (HEAD) に対応するリビジョン ID を持つレポートを Qodana クラウドから検索して取得します。このレポートが見つからなかった場合、IDE は現在のリビジョン ID (HEAD) に最も近いリビジョンを持つ前のレポートを選択します。それ以外の場合、IDE は Qodana クラウドから利用可能な最新のレポートを取得します。

  5. 問題ツールウィンドウのサーバーサイド解析タブで、分析結果を表示します。

Qodana クラウド

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

Analysis report example

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

Qodana 構成を拡張

分析範囲の調整

Qodana は、GitHub(英語) でホストされる 2 つの定義済みプロファイルをすぐに使用できます。

  • qodana.starter はデフォルトのプロファイルであり、より包括的な qodana.recommended プロファイルのサブセットです。

  • qodana.recommended は CI/CD パイプラインでの実行に適しており、主にデフォルトの IntelliJ IDEA Ultimate プロファイルを実装します。詳細については、PyCharm のドキュメントを参照してください。

YAML および XML 形式の構成を使用して、Qodana プロファイルをカスタマイズできます。

構成の基本について詳しくは、Qodana を自分好みに設定するセクションを参照してください。完全なガイドは、カスタム YAML プロファイルおよびカスタム XML プロファイルセクションで入手できます。

ベースラインの有効化

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

JetBrains IDE

  1. IDE で、問題ツールウィンドウに移動します。

  2. 問題ツールウィンドウで、サーバーサイド解析タブをクリックします。

  3. サーバーサイド解析タブで、ローカルで実行ボタンをクリックします。

  4. 開いたダイアログで、詳細な構成セクションを展開し、ベースラインファイルへのパスを指定して、実行をクリックします。

CI/CD

このスニペットには、SARIF 形式のベースラインファイルへのパスを指定する args: --baseline,qodana.sarif.json 行が含まれています。

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@v2024.1 with: args: --baseline,qodana.sarif.json env: QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

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-jvm<-community><-android>:2024.1' } } stages { stage('Qodana') { steps { sh ''' qodana \ --baseline <path/to/qodana.sarif.json> ''' } } } }

script ブロックの --baseline <path/to/qodana.sarif.json> 行を使用して、ベースライン機能を呼び出すことができます。

qodana: image: name: jetbrains/qodana-jvm<-community><-android>:2024.1 entrypoint: [""] cache: - key: qodana-2024.1-$CI_DEFAULT_BRANCH-$CI_COMMIT_REF_SLUG fallback_keys: - qodana-2024.1-$CI_DEFAULT_BRANCH- - qodana-2024.1- paths: - .qodana/cache variables: QODANA_TOKEN: $qodana_token - script: - qodana --baseline <path/to/qodana.sarif.json> --results-dir=$CI_PROJECT_DIR/.qodana/results --cache-dir=$CI_PROJECT_DIR/.qodana/cache artifacts: paths: - qodana/report/ expose_as: 'Qodana report'

ローカル実行

これらのスニペットでは、--baseline オプションによって、ベースラインを含む SARIF 形式のファイルへのパスが構成されます。

qodana scan \ -v <path_to_baseline>:/data/base/ \ -e QODANA_TOKEN="<cloud-project-token>" \ -l jetbrains/qodana-jvm<-community><-android>:2024.1 \ --baseline /data/base/qodana.sarif.json
docker run \ -v <source-directory>/:/data/project/ \ -v <path_to_baseline>:/data/base/ \ -e QODANA_TOKEN="<cloud-project-token>" \ jetbrains/qodana-jvm<-community><-android>:2024.1 \ --baseline /data/base/qodana.sarif.json

プルリクエストの分析

CI/CD

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

  2. GitHub UI のアクションタブで、新しいワークフローを設定し、.github/workflows/code_quality.yml ファイルを作成します。

  3. このスニペットを .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@v2024.1             env:               QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }}

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

qodana: image: name: jetbrains/qodana-jvm<-community><-android>:2024.1 entrypoint: [""] cache: - key: qodana-2024.1-$CI_DEFAULT_BRANCH-$CI_COMMIT_REF_SLUG fallback_keys: - qodana-2024.1-$CI_DEFAULT_BRANCH- - qodana-2024.1- paths: - .qodana/cache variables: QODANA_TOKEN: $qodana_token script: - > qodana --diff-start=$CI_MERGE_REQUEST_TARGET_BRANCH_SHA \ --results-dir=$CI_PROJECT_DIR/.qodana/results \ --cache-dir=$CI_PROJECT_DIR/.qodana/cache artifacts: paths: - .qodana/results expose_as: 'Qodana report'

ここで、--diff-start オプションは、比較のベースとして機能するコミットのハッシュを指定します。

ローカル実行

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

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

サポートされているテクノロジーと機能

へのサポート

名前

JVM 用 Qodana

JVM の Qodana コミュニティ

Android のための Qodana コミュニティ

プログラミング言語

Java

Kotlin

Groovy

✔リストのすべて

✔リストのすべて

✔リストのすべて

フレームワークおよびライブラリ

JavaBeans

JUnit

Lombok

TestNG

JPA

Reactive Streams

JavaFX

Java EE

JAX-RS

JSP

Spring

データベースと ORM

Hibernate ORM

MongoDB

Oracle

MySQL

PostgreSQL

SQL

SQL サーバー

✔リストのすべて

❌なし

❌なし

マークアップ言語

CSS

FreeMarker

HTML

JSON および JSON5

RELAX NG

XML

XPath

XSLT

YAML

TOML

スクリプト言語

シェルスクリプト

式言語 (EL)

ビルド管理

Ant

Gradle

Maven

✔リストのすべて

✔リストのすべて

✔リストのすべて

Qodana の特徴

ベースライン

クオリティゲート

コードカバレッジ

ライセンス監査

クイックフィックス

脆弱性チェッカー

✔リストのすべて

関連ページ:

価格モデル

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

Qodana クラウド

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

フォワードレポート

このセクションでは、このソフトウェアを使用して Qodana レポートを Qodana クラウドに転送する方法について説明します。Docker および Qodana CLI、Azure パイプライン、Bitbucket クラウド、CircleCI、GitHub アクション、GitLab CI/CD、Jenkins、Space Automation、TeamCity、これらすべての場合において、このドキュメント

プロジェクト

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

ベースライン

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

JetBrains IDE

JetBrains IDE で Qodana を実行して、コードベースをインスペクションできます。Qodana は、JetBrains Toolbox アプリ経由でインストールされたいくつかの JetBrains IDE (IntelliJ IDEA、PhpStorm、WebStorm、Rider、GoLand、PyCharm、Rider など) をサポートします。IDE を使用すると、次のことが可能になります。Qodana をローカルで実行する、Qodana クラウドに接続する、CI パイプライン...