おもしろプラグイン:IntelliJEvalプラグイン
http://plugins.jetbrains.com/plugin/?idea&pluginId=7173
地味すぎてあまり注目されてないけど、実はスゴいIntelliJEval。何してくれるかというと、こんなことしてくれる。
普通のプラグインもその気になればgroovyで書けるんで前者はそれほどスゴくないんだけど、後者がなによりスゴイ!!要するにマクロみたいな気分でIntelliJのプラグインが作れるのだ。うっは、スゲェww
IntelliJに限らずIDEのプラグインを作ったことある人ならわかると思いますが、プラグイン開発ってのは結構めんどいです。IntelliJの場合だと、ちょっと試してみるにもサンドボックス用のIntelliJを立ち上げて、動作確認しないといけない。最初の1回くらいだけど、サンドボックス用IntelliJにJDKの設定したり、プロジェクト読み込ませたりと手間もかかるし、結果的にIntelliJを2つ同時起動するようなモノなのでマルチモニタとかじゃないとやってられない。
作るプラグインが、ちょっとしたコマンド系だったら面倒の方が多くて正直挫ける。orz
IntelliJEvalの使い方
- プラグインをインストールする
- Pluginsツールウィンドウを開いて「+」を押して、プラグインを登録する
- 登録方法は「新規作成/Githubから/既存のファイルを登録」の3種類
- あとサンプル登録ってのもある
- プラグイン選んで、横向きの「▲」ボタンで実行
プラグインの本体は「plugin.groovy
」ってファイルで、この中にあれこれ記述した内容がプラグインとして即実行される。なんで、元々IntelliJのプラグインの仕組みやら作り方を知ってないと、そもそもなんだかわかんないと思う。:-)
ただサンプルが豊富にあるので、それらを眺めているウチにだんだん分かってくると思うけど。
プラグインの作り方
...は、IntelliJのプラグインサイトとか読んでねw
IntelliJEvalに登録するプラグイン(plugin.groovy
)の本体はIntelliJEvalの管理ディレクトリ(config
*1/plugins/intellij-eval-plugins/〜
)にあるけど、今開いてるプロジェクトで編集できる。ただ、IntelliJEvalに必要なライブラリが足りてないはずなので、それを付け足してあげる。
どうやってやるかは、Pluginsツールウィンドウの歯車アイコンから
- Add IntelliJEval Jar to Project
- Add IDEA Jars to Project
「IntelliJEval Jar」で後述するIntelliJEval用プラグインのライブラリが、「IDEA Jars」でIntelliJのプラグイン開発に必要なOpen APIやGroovyが加わる。IntelliJ以外で試してないから詳細はわかんないけど、プラグインはGroovyで開発するんで、一緒に開くプロジェクトもJavaプロジェクト、つまりIntelliJじゃないとまともに開発できないと思う。
#そもそも、プラグイン開発はIntelliJじゃないと出来ないし。
んで、plugin.groovy
。とりあえずPluginUtilという便利メソッドを持つユーティリティクラスをstaticインポートするらしい。
あとはアクションを登録するなり、インスペクタやツールウィンドウを登録するなりご自由に、という仕組みらしい。ただし、IntelliJEvalがIntelliJのプラグイン種別をすべてサポートしているってワケでもないので、IntelliJEvalじゃ出来そうにないのは素直に普通にプラグインとして作ろう。
ちなみに、サンプルに入っている「helloWorldAction」の中身を見ると、たったこれっぽっち。
import static intellijeval.PluginUtil.* registerAction("HelloWorldAction", "alt shift H") { show("Hello IntelliJ from action") } show("Loaded 'HelloWorldAction'<br/>Use alt+shift+H to run it")
このregisterAction()
やshow()
が前述したPluginUtilクラスが提供する便利メソッド。で、ホントに便利w
このサンプルを実行すると「HelloWorldAction」っていうアクションが「ALT+SHIFT+H」に登録される。面白い事に、Settings->Keymap->Otherを探すと、ホントにそのアクションが登録されてる。当たり前と言えば当たり前なんだけど、やっぱりスゴいと思う。
正直、便利アクションの追加みたいな小っちゃめのプラグインだったらIntelliJEvalで作るだけで十分なんじゃないかと思うくらい。ちょっと旬を過ぎちゃったけど過去に作った「File status barプラグイン改」をIntelliJEvalで書き直してみたのがこれ。
→ IntelliJEval版FileStatusBarプラグイン · GitHub
IntelliJEvalのクセ覚えるまで試行錯誤したけど、それすらすぐできるのでとっても楽チン。これでまっとうなプラグインを作るも良しだし、プラグイン開発のちょっとした確認用に使うも良しだな。あんまり便利なんで、IntelliJの標準に取り込んで欲しいくらいだわ(せっかくならKotlin版もあれば、Kotlin流行るかも。
ちなみにプラグインのGithubサイトには、他のプラグインのコードも公開されとるようで、中にはずいぶん凝ったヤツもあってなかなか興味深い。
→ GitHub - dkandalov/live-plugin: IntelliJ plugin for writing plugins at runtime