JetBrains系IDEを使って日常的にコードを書いていますが、ふとJetBrains系IDEプラグインを作ってみたくなりました。
とはいえ、JetBrains系IDEプラグインの作り方がよく分からなかったので調べてみたところ、 IntelliJ Platform Plugin Template
というリポジトリを使うと簡単に作成できそうだと分かりました。
https://github.com/JetBrains/intellij-platform-plugin-template
そこで、IntelliJ Platform Plugin Template
を使って、「コンテキストメニューからダイアログを表示する」だけのHello world的なJetBrains系IDEのプラグインを作ってみたことから、メモを残します。
目次
- 環境
- IntelliJ Platform Plugin Templateを元にした環境構築
- 「コンテキストメニューからダイアログを開く」機能を追加する
- 動作確認
- ソースコード
- Github Actionsの様子
環境
なお、ローカルではJava/Kotlinを使った開発をしていないことから、Javaまわりは何もインストールしていない状態でした。
IntelliJ Platform Plugin Templateを元にした環境構築
まずは、READMEのGetting startedの内容から始めます。
https://github.com/JetBrains/intellij-platform-plugin-template?tab=readme-ov-file#getting-started
最初にリポジトリの Use this template
ボタンをクリックし、プラグイン名を hello_jetbrains_plugin
とするなど、必要な事項を入力して自分のリポジトリへとcloneしました。
できあがったリポジトリは以下です。
https://github.com/thinkAmi-sandbox/hello_jetbrains_plugin
続いて、 IntelliJ Platform Plugin Template
のREADMEに従い、 Get from VCS
機能でソースコードをローカルに clone & 開きます。
今までこの機能を使ったことがなかったのですが、簡単にcloneとセットアップができました。
引き続きREADMEに従い、WindowsへJavaのSDKをインストールします。
バージョンとベンダーを選べますが、ひとまず
- Javaは
17
- ベンダーは
JetBrains Runtime version 17.0.9
- 深い意味はなく、とりあえずJetBrainsが提供しているものにしてみました
を選んでおきました。
この時点でプラグインを起動できるため、 Run Plugin
を実行してみます。
すると、プラグインがインストールされた状態でIntelliJ IDEAが起動しました。
「コンテキストメニューからダイアログを開く」機能を追加する
IntelliJ Platform Plugin TemplateのREADMEにはプラグインの作り方は記載されていなかったので、別のドキュメントを探すことにしました。
まず、 IntelliJ Platform SDK のドキュメントを見に行きましたが、量に圧倒されてしまいました。
IntelliJ Platform SDK | IntelliJ Platform Plugin SDK
そこで、まずは簡単なプラグインを作るところから始めようということで、チュートリアル的に書かれている以下のブログを読みました。
- Kotlin + GitHub Template ではじめる、初めての IntelliJ IDEA プラグイン開発
- IntelliJ IDEAのプラグインを作ってみた
- KotlinによるIntelliJ Platform Plugin開発で、道具箱に磨きをかけよう!
- 同じ著者のSpeakerDeck版。微妙に中身が違う。
上記のブログを読んだところ、「エディタコンテキストメニューからダイアログを表示する」プラグインを作るのが最初の一歩として良さそうに感じましたので、作っていきます。
まずは、公式SDKドキュメントに
The action implementation determines the contexts in which an action is available, and its functionality when selected in the UI.
https://plugins.jetbrains.com/docs/intellij/basic-action-system.html
とあるような、アクションと呼ばれる機能を作成してみます。
そこで、 src/main/kotlin/com/github/thinkami/hellojetbrainsplugin/actions/HelloAction.kt
ファイルを作成し、 AnAction
を継承したActionのクラスを実装します。
ダイアログの表示は Messages.showMessageDialog
を使うことで実現できます。
package com.github.thinkami.hellojetbrainsplugin.actions import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.ui.Messages class HelloAction: AnAction() { override fun actionPerformed(e: AnActionEvent) { Messages.showMessageDialog(buildString { append("ハロー") }, "ワールド", null) } }
続いて、
Registration determines where an action appears in the IDE UI. Once implemented and registered, an action receives callbacks from the IntelliJ Platform in response to user gestures.
https://plugins.jetbrains.com/docs/intellij/basic-action-system.html
のように、アクションを呼び出す方法を定義します。
今回は「エディタのコンテキストメニューから上記のActionを起動する」設定を定義します。
そこで、 src/main/resources/META-INF/plugin.xml
を開き、末尾にActionの呼び出しを追加します。
<idea-plugin> ... </applicationListeners> <actions> <action id="com.github.thinkami.hellojetbrainsplugin.actions.HelloAction" class="com.github.thinkami.hellojetbrainsplugin.actions.HelloAction" text="Hello Action" description="hello world action"> <add-to-group group-id="EditorPopupMenu" anchor="first" /> </action> </actions> </idea-plugin>
動作確認
先ほどと同様、 Run Plugin
を実行し、IntelliJ IDEAを起動します。
今回の機能はエディタでコンテキストメニューを開く必要があるため、適当なKotlinプロジェクトを探してみます。
すると、 Kotlin Programming Tutorial for Beginners
と書かれているリポジトリがありました。
https://github.com/smartherd/KotlinTutorial
今回はこれを使うことにして、 Get from VCS
機能にてローカルにclone・プロジェクトを開きます。
適当なkotlinのファイルを開き、エディタ上で右クリックしてコンテキストメニューを表示したところ、 Hello Action
というメニューがありました。
このメニューをクリックしたところ、Hello world的なダイアログが表示されました。
以上より、今回やりたかったことは実現できました。
ソースコード
Githubにあげました。
https://github.com/thinkAmi-sandbox/hello_jetbrains_plugin
今回のプルリクはこちら。
https://github.com/thinkAmi-sandbox/hello_jetbrains_plugin/pull/9
Github Actionsの様子
ちなみに、プルリクを作ったところ、IntelliJ Platform Plugin Template に設定されていたようで、Github ActionsによるCIが自動実行されました。
最終的にはこんな感じになりました。