やらなイカ?

たぶん、iOS/Androidアプリの開発・テスト関係。

IntelliJ plugin から他のプラグインを使用する

IntelliJ (JetBrains IDE) ファミリー向けのプラグイン開発において、他のプラグイン(例えばGitを操作するための Git4Idea *1 など)や、Riderなど言語別IDEの機能を使う設定について。

基本的なことは公式ドキュメントの下記ページに載っており、それに沿って補足していきます。

プラグイン依存関係 / IntelliJ プラットフォーム SDK プラグイン開発ガイド

build.gradle

build.gradleの intellij ブロック内に plugins の設定を追加します。

Git4Ideaを使用する例 (Kotlin) :

intellij {
  version = "2020.1"
  setPlugins("git4idea")
}

Gradleでビルドおよび runIde タスクを実行するとき、この設定が使われます。 このとき、ここで記述したプラグインの依存関係については自動的に解決されます。

しかし、 test タスクでユニットテストを実行するときは、プラグインの依存関係が解決されないという制限があります。 上例の git4idea には依存先がないのですが、例えば android を使用する場合は次のように android が依存するすべてのプラグインを書く必要があります。

intellij {
  version = "2020.1"
  setPlugins("android", "junit", "Groovy", "gradle")
}

詳しくは下記 Issue を参照してください。この問題が修正される気配は無さそうに見えます。

Install plugin dependencies transitive dependencies automatically for tests. · Issue #38 · JetBrains/gradle-intellij-plugin · GitHub

plugin.xml

plugin.xml には <depends> で依存するプラグインを宣言する必要があります。 com.intellij.modules.platform の下に追加していきましょう。

<depends>com.intellij.modules.platform</depends>
<depends>Git4Idea</depends>

これはランタイムで使用される設定です。ここに書く名称についてはコード補完が効きます。

なお、プラグインの依存を必須にしない場合、 <depends>optional 属性を指定できます。 これは試していないので、公式ドキュメントを参照してください。

classpath

以上でプラグインのビルド・配布はできるのですが、IntelliJ IDEA上で開発を進めるにはclasspathも設定する必要があります。

File > Project Structure... を開き、SDKs > 11(使用しているJDKバージョンによりますが、ここではAmazon Corretto 11)を選択、classpathタブの"+"クリックで必要なjarファイルを選択します。

f:id:nowsprinting:20200419195750p:plain

jarファイルは、IntelliJ IDEAインストールディレクトリ/plugins/下にあります。 Git4Ideaの場合、plugins/git4idea/lib/下に4つのjarファイルがありますが、ディレクトリごと選択すれば大丈夫です*2

参考

プラグイン開発に関しては、公式ドキュメントにある程度の情報が載っています。日本語版もちゃんと更新されています*3

IntelliJ プラットフォーム SDK / IntelliJ プラットフォーム SDK プラグイン開発ガイド

IntelliJ Platform SDK / IntelliJ Platform SDK DevGuide

少し込み入った話になると、ヘルプセンターがヒットしたりはします。

IDEs Support (IntelliJ Platform) | JetBrains

本稿のclasspathの件はここにありました。

How to build and use git4idea as a library in plugin – IDEs Support (IntelliJ Platform) | JetBrains

*1:Git4Ideaはビルトインされているのでインストール不要なプラグインですが、プラグインから使用するための設定は必要です

*2:はじめgit4idea.jarだけを選択していたところ、中途半端な解決しかされず悩みました…

*3:が、翻訳には限界があるので検索で探し当てるのは難しいです