Qodana 2024.1 ヘルプ

FlexInspect

IntelliJ IDEA のバージョン 2024.1 以降では、IntelliJ API(英語) と Kotlin を使用して、プロジェクト固有の独自のインスペクションを開発できます。次のことが可能です。

  • ソースコードの PSI(英語) 表現にアクセスします。

  • 新しいインスペクションをオンザフライでデバッグします。

  • 期待どおりに動作しないコードフラグメントのハイライトなど、新しいカスタムインスペクションの動作を観察します。

FlexInspect を使用すると、すべての IntelliJ IDEA および Qodana インスペクションで使用される同じ API にアクセスできます。これにより、Qodana を使用してプロジェクト全体でこれらのインスペクションを実行し、チーム全体が定義した標準に準拠していることを確認できます。

Qodana をローカルで実行するセクションに従って、ファイルスコープ内で実行されるローカルインスペクションとプロジェクトスコープ内で実行されるグローバルインスペクションを開発でき、さらに CI パイプラインでコードをインスペクションすることもできます。現在、FlexInspect は、ネイティブまたは追加のプラグインを通じて、IntelliJ IDEA でカバーされるすべての言語をサポートしています。例: Java、Kotlin、JavaScript、TypeScript、PHP、Go、Python、Ruby、SQL、XML、CSS、YAML、JSON、Shell、Dockerfile がサポートされています。

前提条件

まず、IntelliJ IDEA がマシンにインストールされていることを確認します。

次に、IntelliJ IDEA のバージョンが、インスペクションを開発する言語をサポートしていることを確認します。IntelliJ IDEA は、デフォルトで Java と Kotlin をサポートしています。IntelliJ IDEA の Ultimate エディションは、JavaScriptTypeScript のデフォルトサポートも提供します。PHP(英語)Go(英語)Python(英語) などの他の言語のサポートを得るには、JetBrains マーケットプレイス(英語)からプラグインをインストールします。言語サポートに関する詳細情報は、IntelliJ IDEA ドキュメントポータルから入手できます。

すべてのインスペクションは Kotlin 言語を使用して開発されるため、独自のインスペクションの開発を開始する前に、Kotlin の基礎(英語)を知っておく必要があります。

使い方

インスペクションを Kotlin で記述し、プロジェクトの inspections ディレクトリに .inspection.kts ファイルとして保存します。各 .inspection.kts ファイルには、プログラム構造インターフェース(英語)または PSI によって提供される API を使用してコードをチェックするために使用される Kotlin コードが含まれています。IntelliJ IDEA は .inspection.kts ファイルを読み取り、インスペクションコードをオンザフライでコンパイルし、コンパイルされたインスペクションを実行します。

プログラム構造インターフェース (PSI)

PSI は、ソースファイルの構造に対応するコードの AST(英語) 表現です。Java コードの場合、PSI は、パッケージステートメントやインポートステートメント、クラスステートメント、メソッド呼び出し、その他のノードなどの Java ファイルの基本ブロックを反映します。FlexInspect は、コードの PSI ツリー表現を使用して、インスペクションを使用してインスペクションできるコードノードのリストを取得します。

IntelliJ IDEA では、PSI ビューアーツールウィンドウを使用して PSI 内を移動できます。これを行うには、PSI ビューアーで表示するファイルを開き、ツール | 現在ファイルの PSI 構造を表示に移動します。

PSI tree overview

インスペクションタイプ

IntelliJ IDEA を使用すると、ローカルインスペクションとグローバルインスペクションの両方を作成できます。

ローカルインスペクションはファイルレベルで動作し、プロジェクトの各ファイルを個別にインスペクションします。ローカルインスペクションを作成すると、IntelliJ IDEA はエディターで開かれたすべてのファイルに対してそれを実行します。

グローバルインスペクションはプロジェクトレベルで動作し、プロジェクトスコープをインスペクションの基礎として使用します。例: プロジェクトに特定のファイルが存在するかどうかを確認できるインスペクションを作成できます。グローバルインスペクションの実行方法の詳細については、ドキュメントの Qodana をローカルで実行するセクションを参照してください。

始め方

このセクションでは、Java クラスにコンストラクターメソッドがあるかどうかをインスペクションするサンプルインスペクションを作成する方法を示します。

インスペクションファイルを作成する

新しい .inspection.kts テンプレートファイルを作成するには、以下の手順に従います。

  1. プロジェクト内に inspections ディレクトリを作成します。

  2. IntelliJ IDEA のプロジェクトナビゲータで、inspections ディレクトリにマウスを移動し、ディレクトリを右クリックして、新規 | カスタムインスペクションに移動します。

  3. 表示されるダイアログで、インスペクションのベースとして使用できるさまざまなローカルおよびグローバルインスペクションテンプレートから選択できます。空のローカルテンプレートとグローバルテンプレートは、FlexInspect でサポートされているすべての言語に共通ですが、ローカルの Java、Kotlin、JavaScript、Typescript テンプレートは言語固有です。

    各ファイルには複数のインスペクションを含めることができ、.inspection.kts ファイルの命名方法としては CamelCase が推奨されることに注意してください。

上記の方法に従ってインスペクションを作成する方法を示すアニメーションを以下に示します。

Creating a template inspection

作成されたファイルにはすでにコード例と説明が含まれているため、これを使用して独自のインスペクションを開発できます。

コードの PSI ツリーを確認する

  1. IntelliJ IDEA で、インスペクションを使用して分析するファイルを開きます。

  2. ツール | 現在ファイルの PSI 構造を表示に移動します。ここで、ファイルの PSI ツリーを調べることができます。ファイルに含まれる PSI ノードには API が利用できます。これらの API は、PSI ツリー内で動作するアルゴリズムを生成できます。

例: メソッドがコンストラクターであるかどうかを確認するには、クラスの各メソッドで使用できる isConstructor() PSI メソッドを使用できます。

Reviewing a PSI tree of a file

インスペクションを作成する

すでに作成したテンプレートを使用して、インスペクションを開発できます。この例では、すべてのメソッドを反復処理し、isConstructor() メソッドを使用して、クラスにコンストラクターメソッドがあるかどうかを確認できます。コンストラクターメソッドがない場合、インスペクションは、クラスにコンストラクターメソッドがないことを示すエラーを生成します。

以下は、インラインコメントを含む NoConstructor.inspection.kts ファイルの Kotlin スニペットです。

import org.intellij.lang.annotations.Language import com.intellij.psi.PsiClass /** * Full HTML description of inspection: Describe here motivation, examples, etc. */ @Language("HTML") val htmlDescription = """ <html> <body> A class has no constructor </body> </html> """.trimIndent() val noConstructor = localInspection { psiFile, inspection -> val classes = psiFile.descendantsOfType<PsiClass>() classes.forEach { clazz -> // Ignore interfaces if (clazz.isInterface) { return@forEach } // Iterate all methods of a class, check if there is a constructor val hasConstructor = clazz.methods.any { method -> method.isConstructor } if (hasConstructor) { return@forEach } val className = clazz.qualifiedName val message = "The class $className has no constructor" inspection.registerProblem(clazz, message) } } listOf( InspectionKts( id = "NoConstructor", // inspection id (used in qodana.yaml) localTool = noConstructor, name = "The class has no constructor", // Inspection name, displayed in UI htmlDescription = htmlDescription, level = HighlightDisplayLevel.WARNING, ) )

IDE でインスペクションをテストする

インスペクションを作成した後、インスペクションファイルの上部にあるツールバーでコンパイルステータスを確認できます。インスペクションコードを変更する場合は、ツールバーの左側にある再コンパイルボタンを使用してインスペクションを明示的に再コンパイルするか、Alt+Shift+Enter (Windows) または⌥⇧↩ (macOS) ショートカットを使用する必要があります。
PSI ビューアーを使用してファイルを開き、インスペクションの例を確認することもできます。

FlexInspect toolbar

新しいインスペクションがコード上でどのように機能するかを確認するには、インスペクションがハイライトする問題を含むファイルを開きます。

Testing the inspection in IDE

Qodana を使用してカスタムインスペクションを実行する

FlexInspect はデフォルトのインスペクションプロファイルでサポートされています。

新しいインスペクションを使用してプロジェクト全体をローカルでインスペクションするには、Qodana をローカルで実行するセクションに従って Qodana を実行します。

Running Qodana locally with a new inspection

CI パイプラインでカスタムインスペクションを実行するには、CI システムとの統合セクションにアクセスして、特定の CI/CD ソリューションの手順を見つけます。インスペクションはプロジェクトの inspections ディレクトリにすでに含まれているため、コードのインスペクションにはすでに使用できます。

インスペクションファイルid フィールドのインスペクション名を使用して、 qodana.yaml ファイル内のカスタムインスペクションを無効または有効にすることができます。

関連ページ:

JetBrains IDE

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

CI システムとの統合

すべての Qodana リンターは Docker イメージとして利用できるため、任意の CI/CD ツールに統合して実行できます。Docker コンテナーの実行方法の詳細については、CI/CD システムのドキュメントを参照してください。いくつかのツールについては、ネイティブソリューションを提供しています。これまでに、次の CI/CD ツールの統合ガイドを開発しました。Azure パイプライン、Bitbucket クラウド、CircleCI、GitHub アクション、GitLab CI/CD、Jenk...

Kotlin 入門

Kotlin の使用を開始する前に、Kotlin プラグインが有効になっていることを確認してください。プラグインは IntelliJ IDEA にバンドルされており、デフォルトで有効になっています。プラグインが有効になっていない場合は、プラグインのインストールの説明に従って、設定のプラグインページでプラグインを有効にしてください。IntelliJ IDEA は、Kotlin に最高のサポートを提供します。これには、Kotlin 固有のプロジェクトテンプレート、コーディング支援、リファクタリング、...

JavaScript

IntelliJ IDEA を使用すると、JavaScript および Node.js を使用して最新の Web、モバイル、デスクトップアプリケーションを開発できます。IntelliJ IDEA は、React、Angular、Vue.js、その他のフレームワークもサポートし、Web 開発用のさまざまなツールとの緊密な統合を提供します。JavaScript 対応のコーディング支援には、キーワード、ラベル、変数、パラメーター、関数の補完、エラーと構文のハイライト、フォーマット、コードインスペクションおよ...

入門

Java 開発環境 IntelliJ IDEA の使い方や高等テクニック満載の JetBrains 日本語公式ヘルプ。最新の英語版ヘルプ内容が随時反映されます。

コードカバレッジ

コードカバレッジは、生成されたレポートを使用して、メソッド、クラス、ファイル内の全体的なコードカバレッジを計算します。また、これらのエンティティにおけるカバレッジの不足に関連する問題についても報告します。この機能は、次のリンターの Ultimate および Ultimate Plus ライセンスで利用できます。JVM 用 QodanaIntelliJ IDEA コードカバレッジエージェントが推奨ツールですが推奨される形式です。もサポートされています。JaCoCoJS 用 QodanaJestPHP...