Qodana 2024.1 ヘルプ

YAML ファイル

デフォルトでは、Qodana はプロジェクトのルートディレクトリに含まれる qodana.yaml ファイルから構成を読み取ります。--config オプションを使用してこのファイル名を上書きできます。詳細については、カスタム構成ファイルを参照してください。便宜上、このセクションではデフォルトの qodana.yaml 名を使用して参照します。

qodana.yaml で適用された構成は、デフォルトのインスペクションプロファイル設定と Qodana リンターのデフォルト構成を上書きします。HTML レポートセクションを使用して構成することができ、すべての変更が自動的に適用されます。

qodana.yaml の JSON スキーマは SchemaStore(英語) プロジェクトで公開されており、IDE での完成と基本的な検証が可能です。

このカスタマイズされた構成を使用して後続のチェックを実行するには、ファイルをプロジェクトのルートディレクトリに保存します。あるいは、qodana.yaml 構成ファイルを手動で編集することもできます。このセクションでは、必要な設定について説明します。

カスタムコマンドを実行する

qodana.yamlbootstrap キーを使用すると、Qodana は分析を実行する前にアクションを実行できます。

apt ツールを使用して特定のパッケージを Qodana コンテナーにインストールするには、次の行を qodana.yaml に追加します。

bootstrap: apt install <package_name>

スクリプトを実行するには、prepare-qodana.sh スクリプトファイルをプロジェクトディレクトリに保存し、qodana.yaml で実行を指定します。

bootstrap: sh ./prepare-qodana.sh

ユースケースの詳細については、「プロジェクトを準備する」セクションを参照してください。

プロファイルを設定する

プロファイルの呼び出しについては、インスペクションプロファイルセクションで説明します。カスタムプロファイルに関する情報もここで提供されます。

パスを分析範囲から除外する

インスペクションごとに、またはすべてのインスペクションに対して一度に、ファイルとパスを分析から除外できます。インスペクション ID に関する情報は、インスペクトペディア (英語) Web サイトで入手できます。

プロジェクト内のすべてのパスを分析範囲から除外するには、paths ノードを省略します。

サンプル

指定されたプロジェクトパスのすべてのインスペクションを除外します。

exclude: - name: All paths: - asm-test/src/main/java/org - asm/Visitor.java - benchmarks

パターンを使用することもできます。例:

exclude: - name: All patterns: - "**/.test/test.js"

指定されたプロジェクトパスの ID で指定されたインスペクションを除外します。

exclude: - name: Annotator - name: AnotherInspectionId paths: - relative/path - another/relative/path - name: All paths: - asm-test/src/main/java/org - asm - benchmarks - tools

特定のインスペクション ID は、HTML レポートのプロファイル設定、またはインスペクションプロファイルを含む .xml ファイルで見つけることができます。

インスペクションを分析範囲に含める

選択したプロファイルに含まれていないインスペクションによって、特定のディレクトリのファイルを分析するように Qodana に指示できます。これはインスペクションごとに実行できます。プロジェクト内のすべてのパスをインスペクションスコープに含めるには、paths ノードを省略します。インスペクション ID に関する情報は、インスペクトペディア (英語) Web サイトで入手できます。

サンプル

この例では、インスペクションを含まない empty プロファイルが指定されており、SomeInspectionId インスペクションが tools ディレクトリの分析範囲に明示的に含まれています。その結果、SomeInspectionId インスペクションによって実行されるチェック、tools ディレクトリの内容のみが Qodana の実行に含まれます。

profile: name: empty include: - name: SomeInspectionId paths: - tools

品質ゲートを設定する

品質ゲートを構成するには、いくつかのオプションがあります。

まず、失敗しきい値を追加して、プロジェクト内の問題の総数を制御できます。これはすべてのリンターでサポートされています。

failThreshold: <number>

.NET の Qodana コミュニティを除くすべてのリンターでは、次の構成を使用できます。

failureConditions: severityThresholds: any: <number> # Total problems critical: <number> # Critical and other severities high: <number> moderate: <number> low: <number> info: <number> testCoverageThresholds: fresh: <number> # Fresh code coverage total: <number> # Total code coverage

この構成では、設定制限を 1 つだけ超えるとビルドが失敗します。

severityThresholds:any オプションを使用すると、問題の総数を構成できます。severityThresholds:critical などのオプションを使用すると、問題の重大度ごとに品質ゲートを構成できます。testCoverageThresholds:fresh および testCoverageThresholds:total オプションを使用すると、複数のリンターでサポートされる合計コードカバレッジと新しいコードカバレッジを構成できます。

デフォルトの実行シナリオをオーバーライドする

script: name: <script-name> parameters: <parameter>: <value>

標準の Qodana 動作をオーバーライドできます。これは、PHP バージョンの移行の場合に役立ちます。この観点からコードをインスペクションするには、php-migration シナリオを実行します。

デフォルトでは、Qodana は default シナリオを採用します。これは、通常の Qodana がこの設定と同等に実行されることを意味します。

script: name: default

さまざまな構成オプションの例

version: 1.0 failThreshold: 0 profile: name: qodana.recommended include: - name: SomeInspectionId exclude: - name: Annotator - name: AnotherInspectionId paths: - relative/path - another/relative/path - name: All paths: - asm-test/src/main/java/org - benchmarks - tools

上の例

  • SomeInspectionId インスペクションは、プロファイルでは無効になっていますが、すべてのパスに対して明示的に有効になっています

  • Annotator インスペクションはすべてのパスで無効になります

  • AnotherInspectionId インスペクションは relative/path および another/relative/path では無効です

  • これらのパスではインスペクションは実行されません: asm-test/src/main/java/orgbenchmarkstools

リンターを指定する

linter オプションを使用すると、使用するリンターを指定できます。例:

linter: jetbrains/qodana-jvm-android:2024.1

JDK のバージョンを設定する

これらのリンターの JDK バージョンを構成できます。

projectJDK オプションを使用して、JDK バージョンを指定します。例:

projectJDK: 11

または:

projectJDK: 1.8

次の名前を使用して JDK を指定することもできます。

projectJDK: corretto-19

JDK の構成の詳細については、「JDK を設定する」セクションを参照してください。

PHP のバージョンを設定する

PHP 用の Qodana リンターを実行する前に、PHP バージョンを構成できます。

php: version: "X.x"

健全性チェックを無効にする

デフォルトでは、Qodana では健全性チェックが有効になっています。次のスニペットを使用して無効にできます。

disableSanityInspections: true

ライセンス監査を構成する

Qodana のバージョン 2024.1 以降では、ライセンス監査機能がデフォルトで有効になっています。CheckDependencyLicenses インスペクションを除外することで無効にすることができます。

exclude: - name: CheckDependencyLicenses

依存関係を無視する

依存関係を無視して、関連する問題をレポートから非表示にします。

dependencyIgnores: - name: "enry"

ここで、name は無視する依存関係の名前です。

上の例では、enry 依存関係が分析から完全に除外されています。考えられるライセンス関連の問題は無視されるため、依存関係はレポートにまったく含まれません。これは、レポートでメンションする必要のない内部依存関係をすばやく非表示にできます。

ライセンスを許可または禁止する

事前定義されたライセンス互換性マトリックスをオーバーライドします。

licenseRules: - keys: - "PROPRIETARY-LICENSE" - "MIT" prohibited: - "BSD-3-CLAUSE-NO-CHANGE" allowed: - "ISC" - keys: [ "Apache-2.0" ] prohibited: - "MIT"

ここで、keys はプロジェクトライセンスです。依存関係ライセンスの識別子は allowed または prohibited で指定されます。

依存関係ライセンスをオーバーライドする

依存関係ライセンス識別子をオーバーライドします。

dependencyOverrides: - name: "jaxb-runtime" version: "2.3.1" url: "https://github.com/javaee/jaxb-v2" licenses: - key: "CDDL-1.1" url: "https://github.com/javaee/jaxb-v2/blob/master/LICENSE" - key: "GPL-2.0-with-classpath-exception" url: "https://github.com/javaee/jaxb-v2/blob/master/LICENSE"

ここで、name は依存関係の名前、version は依存関係のバージョン、licenses は再定義された依存関係ライセンスのリストです。

上の例では、CDDL-1.1、クラスパス例外付きの GPL-2.0 を検出し、jaxb-runtime の他のライセンス (2.3.1 のみ) を検出しないように Qodana に「指示」しています。これは、依存関係がデュアルライセンスであり、一部のライセンスを省略したい場合、依存関係ソースからライセンスを正しく検出できない場合に便利です。

カスタム依存関係

現在、Qodana によるライセンス監査は、JPS、Maven、Gradle、npm、yarn、composer プロジェクトでのみ可能です。レポートに記載する必要があるがプロジェクトソースからは検出できない依存関係を含めるには、customDependencies を使用して指定します。

customDependencies: - name: ".babelrc JSON Schema (.babelrc-schema.json)" version: "JSON schema for Babel 6+ configuration files" licenses: - key: "Apache-2.0" url: "https://github.com/SchemaStore/schemastore/blob/master/LICENSE"

クイックフィックスを構成する

fixesStrategy オプションを使用すると、利用可能な即効性のある戦略の中から選択できます。

fixesStrategy: cleanup/apply

汚染分析を構成する

qodana.yaml ファイルで、PhpVulnerablePathsInspection インスペクションを分析範囲に含めます

include: - name: PhpVulnerablePathsInspection

あるいは、qodana.yamlinspections セクションを使用することもできます。

inspections: - inspection: PhpVulnerablePathsInspection enabled: true

脆弱性チェッカーを構成する

脆弱性チェッカー機能の使用を開始するには、VulnerableLibrariesGlobal インスペクションを有効にします。

include: - name: VulnerableLibrariesGlobal

プラグインを管理する

インスペクション中にダウンロードして呼び出すプラグインを指定できます。

plugins: - id: <plugin.id>

ここで、<plugin-id>JetBrains マーケットプレイス(英語)のプラグイン ID を表します。例: Grazie Professional(英語) の場合、プラグイン ID は com.intellij.grazie.pro になります。プラグイン ID を見つけるには、プラグインページで概要タブをクリックし、追加情報セクションに移動します。

プラグインキャッシュは /data/cache/plugins ディレクトリに保存されます。

プラグインに必要なサードパーティソフトウェアをインストールするには、次の方法があります。

  • bootstrap キーを使用する

  • FROM jetbrains/qodana... で始まるカスタム Dockerfile を開発します。GitHub(英語) で利用可能な Qodana Dockerfile の例を使用できます。

関連ページ:

シェルコマンド

このセクションでは、Qodana の Docker イメージと Qodana CLI ツールを構成する方法について説明します。どちらのツールもローカルと CI/CD パイプラインで使用できます。いくつかのオプションは、Qodana CLI でのみ使用できます。場合によっては、このセクションでも説明されているファイルを使用して構成できます。Qodana のバージョン 2022.3 以降、Ultimate と Ultimate Plus リンターではプロジェクトトークンを参照するために変数が必要です。Qoda...

インスペクションプロファイル

インスペクションプロファイルは、インスペクション、これらのインスペクションが分析するファイルスコープ、およびインスペクションの重大度を定義します。このセクションでは、既存の Qodana プロファイルを使用する方法、独自のプロファイルを作成する方法、Qodana を使用してプロジェクトを分析するためのプロファイルを設定する方法について説明します。既存の Qodana プロファイル:すぐに使用できる Qodana プロファイルは次のとおりです。プロファイルのサブセット。Qodana ではデフォル...

PHP バージョンの移行

ある PHP バージョンから別のバージョンへの移行がコードの品質にどのような影響を与えるかを確認するには、Qodana シナリオを使用します。このシナリオを実行すると、新しい PHP バージョンにアップグレードした後に発生するコードベースの問題を確認できます。この機能は PHP 用の Qodana リンターによってサポートされており、Ultimate および Ultimate Plus ライセンスとその試用版で利用できます。このシナリオは、ファイルで構成することも、CLI を使用して呼び出すこともでき...

ライセンス監査

プロジェクトのライセンスが依存関係のライセンスと互換性があることを確認するのは決して簡単な作業ではありませんが、これは法的な目的のために必要です。このプロセスを自動化して間違いを避けるために、現在いくつかの Qodana リンターによってサポートされているライセンス監査機能を使用できます。JVM 用 QodanaMaven および GradlePHP 用の QodanaComposerJS 用 Qodananpm および YarnPython 用 QodanapipGo 用 QodanaGo モ...