おもしろプラグイン:IntelliJEvalプラグイン

http://plugins.jetbrains.com/plugin/?idea&pluginId=7173


地味すぎてあまり注目されてないけど、実はスゴいIntelliJEval。何してくれるかというと、こんなことしてくれる。


普通のプラグインもその気になればgroovyで書けるんで前者はそれほどスゴくないんだけど、後者がなによりスゴイ!!要するにマクロみたいな気分でIntelliJプラグインが作れるのだ。うっは、スゲェww


IntelliJに限らずIDEプラグインを作ったことある人ならわかると思いますが、プラグイン開発ってのは結構めんどいです。IntelliJの場合だと、ちょっと試してみるにもサンドボックス用のIntelliJを立ち上げて、動作確認しないといけない。最初の1回くらいだけど、サンドボックスIntelliJJDKの設定したり、プロジェクト読み込ませたりと手間もかかるし、結果的に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