IntelliJ Platform Plugin Template を使って IntelliJ Platform Pluginを開発している場合、 デフォルトでは Run Plugin
すると
ただ、
などはどうすればよいか気になったことから、調べたときのメモを残します。
目次
- 環境
- 起動するIDEをRubyMineに変更する
- 特定のJBRでRubyMineを起動する
- 起動するIDEの構成を IntelliJ IDEA Ultimate + 自作プラグイン + Rubyプラグインにする
- その他参考資料
- ソースコード
環境
また、今回の実装は、前回の記事の続きとして実装していきます。
IntelliJ Platform Pluginの開発にて、Kotlin UI DSL Version 2 や Swing を使って、ToolWindow上にコンポーネントを表示してみた - メモ的な思考的な
起動するIDEをRubyMineに変更する
Run Scriptで起動するIDEをRubyMineへ変更する方法については、IntelliJ Platform Plugin SDKの公式ドキュメントに記載がありました。
- RubyMine Plugin Development | IntelliJ Platform Plugin SDK
- Plugins Targeting IntelliJ Platform-Based IDEs | IntelliJ Platform Plugin SDK
これらによると、
build.gradle.kts
のうち、以下の項目を修正plugin.xml
にdepends
タグを追加
とすれば良さそうでしたので、ためしてみます。
build.gradle.kts の修正
build.gradle.kts
を見たところ、 intellij.plugins
の設定は以下のようになっていました。
intellij { // ... // Plugin Dependencies. Uses `platformPlugins` property from the gradle.properties file. plugins = properties("platformPlugins").map { it.split(',').map(String::trim).filter(String::isNotEmpty) } }
ソースコードのコメントに
Uses
platformPlugins
property from the gradle.properties file.
とあるように、定義済のキーに対する値を gradle.properties
へ設定すれば良さそうでした。
一方、 runIde.ideDir
の定義は存在しなかったため、
- キーを末尾に追加
- ただし、値を何も設定しない場合は、デフォルトのIntelliJ IDEAが起動できるようにする
intellij.plugins
同様、値についてはgradle.properties
へ設定
とします。
なお、 runIde
はドキュメントによると intellij
と同階層で定義してあったのでその通りにしたところ
[FUNCTION_EXPECTED] Expression 'runIde' cannot be invoked as a function. The function 'invoke()' is not found
というエラーが出て定義できませんでした。
そこで、stackoverflowの回答にある通り、 tasks
の中に入れたところエラーが解消されました。
creating Android Studio plugin using IntelliJ runIde
can not be invoked - Stack Overflow
ちなみに、 build.gradle.kts
の書式は
- Kotlin
ideDir.set(file(properties("ideDir")))
- Groovy
ideDir = file(properties("ideDir"))
のどちらでも問題なく動作しました。
まとめるとこんな感じになります。
tasks { // ... runIde { // executable other IDE // キーに対する値が存在するときだけ、 ideDir を設定 if (properties("ideDir").get().isNotEmpty()) { // Kotlin ideDir.set(file(properties("ideDir"))) // Groovy // ideDir = file(properties("ideDir")) } } }
gradle.properties の修正
続いて、build.gradle.kts
で定義したキーに対応する値を gradle.properties
へと記載します。
platformPlugins の設定
すでに platformPlugins =
としてキーが存在しているため、値だけ設定します。
設定する値は、以下に掲載されているRubyプラグインのバージョンになります。
https://plugins.jetbrains.com/plugin/1293-ruby/versions
なお、RubyプラグインのバージョンはRubyMineのバージョンとは異なるので注意が必要です。
今回は、RubyMine 2023.2.6 で動作するバージョン 232.10203.2
とともに、以下のように指定します。
platformPlugins = org.jetbrains.plugins.ruby:232.10203.2
ideDirの設定
こちらは、RubyMineをインストールしたディレクトリを指定します。
今回の場合、インストール済の RubyMine 2023.2.6 があるディレクトリを指定します。
なお、インストールしたディレクトリはバージョン表記ではなくビルド表記なので注意が必要です。
バージョン表記とビルド表記の比較は、以下のページにて確認できます。
https://www.jetbrains.com/ja-jp/ruby/download/other.html
今回使うバージョン 2023.2.6
に対するビルド表記は 232.10300.41
でした。
また、runIde.ideDir
にて指定すべきディレクトリ表記ですが、macOSの場合は以下のページに記載があります。
https://plugins.jetbrains.com/docs/intellij/rubymine.html#configuring-plugin-projects-targeting-rubymine
一方、今回はWindows環境なので調べてみたところ、手元のJetBrains ToolboxによるRubyMine 2023.2.6 のインストール先は以下でした。
(<USER_NAME
や ch-N
は環境により読み替えてください。)
C:\Users\<USER_NAME>\AppData\Local\JetBrains\Toolbox\apps\RubyMine\<ch-N>\232.10300.41
このパスをgradleでビルドするためには、バックスラッシュ \
はエスケープして設定します。
ideDir = C:\\Users\\<USER_NAME>\\AppData\\Local\\JetBrains\\Toolbox\\apps\\RubyMine\\<ch-N>\\232.10300.41
plugin.xml の修正
最後に、 plugin.xml
にてRubyプラグインが必要な旨を末尾に追記します。
<idea-plugin> <!-- ファイル末尾 --> <depends>com.intellij.modules.ruby</depends> </idea-plugin>
動作確認
以上で準備ができたので、 Run Plugin
にて別インスタンスのIDEを起動します。
すると、HelloToolWindowプラグインのあるRubyMine 2023.2.6 が起動しました。
また、IDEのRuntime versionは、IDEに同梱されている 17.0.9+8-b1166.2 amd64
でした。
特定のJBRでRubyMineを起動する
続いて、IDEのRuntime versionを特定のバージョンにして、Run Plugin できるよう設定を変更します。
特定のRuntime versionで実行には、 runIde.jbrVersion
を指定すると良さそうです。
- https://plugins.jetbrains.com/docs/intellij/ide-development-instance.html#using-a-jetbrains-runtime-for-the-development-instance
- https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#tasks-runide-jbrversion
そこで
- build.gradle.kts
- gradle.properties
の2ファイルを修正します。
build.gradle.kts に runIde.jbrVersion キーを追加
先ほど追加した runIde
キーの末尾に、jbrVersionキーを追加し、値を gradle.properties
から取得するようにします。
runIde { // 末尾に追加 if (properties("ideDir").get().isNotEmpty()) { jbrVersion.set(properties("jbrVersion")) } }
gradle.properties に jbrVersion キーと値を追加
こちらも末尾に追加します。
指定可能なJBRのバージョンは、READMEに記載されています。
https://github.com/JetBrains/JetBrainsRuntime/releases
今回は、 2023.2
系の JDK 17 ベースで起動したいことから、Latest JBR にある 17.0.10-b1000.48
のリンクをクリックします。
すると Realeses ページに飛ぶので、先頭の Release の次にある 17.0.10b1000.48
を使用します。
jbrVersion = 17.0.10b1000.48
動作確認
再度 Run Plugin
してRubyMineを起動すると、JBRのバージョンが切り替わっていました。
起動するIDEの構成を IntelliJ IDEA Ultimate + 自作プラグイン + Rubyプラグインにする
最後に、IntelliJ IDEA Ultimate でも起動できるよう設定します。
gradle.properties の修正
起動するIDEをRubyMineからIntelliJ IDEA Ultimateへ切り替えるだけなので、 gradle.properties
の ideDir
をIntelliJ IDEA Ultimate 2023.2.6 がインストールされているパスへと変更します。
ideDir = C:\\Users\\<UserName>\\AppData\\Local\\JetBrains\\Toolbox\\apps\\IDEA-U\\<ch-N>\\232.10300.40
動作確認
再度 Run Pliugin
を実行すると、IntelliJ IDEA Ultimate 2023.2.6 が起動しました。
プラグインページを見ると、自作プラグインとRubyプラグインがインストールされていることがわかります。
その他参考資料
JetBrains のビルド番号の情報
Build Number Ranges | IntelliJ Platform Plugin SDK
Gradle IntelliJ Pluginの情報
Gradle IntelliJ Plugin | IntelliJ Platform Plugin SDK
ソースコード
Githubにあげました。
https://github.com/thinkAmi-sandbox/hello_jetbrains_plugin
今回のプルリクはこちら。
https://github.com/thinkAmi-sandbox/hello_jetbrains_plugin/pull/11
なお、gradle.properties
の中に、個人のローカルPCのパスを指定しているため、今回のプルリクから gradle.properties
を gradle.properties.example
へと差し替えています。
その結果、 gradle.properties
が無い影響でCIがエラーになっています
そこで、もし実際に動かす場合には、 gradle.properties.example
を gradle.properties
ヘリネームし、自分の環境に合わせた設定へと変更する必要があります。
(2024/03/19 追記)
この後、gradle.properties.example
を使う代わりに、 local.properties
ファイルを使うことにしました。詳細は以下の記事に記載しています。
IntelliJ Platform Pluginの開発にて、開発環境にある公開したくない情報を local.properties に定義してビルドする - メモ的な思考的な
(2024/03/19 追記 ここまで)
また、「RubyMineのライセンスがないとサンプルコードが動かせない」という事態を避けるため、 plugin.xml
の定義はコメント化してあります。