IntelliJ IDEAプラグインの開発 - 有用な情報とリンク集

【訳者前書き】
これは、Developing a plugin for IntelliJ IDEA – some useful tips and linksの翻訳です。
訳者自身はプラグインを作ったことがないので、訳に誤りがあるかもしれません(たぶんそんなに外していないとおもいますが)。


私が最初にIntelliJ IDEAプラグインを作ろうと考え始めた時の最大の問題は、どうやってそれを作り、一つに纏めるかというやり方について包括的な良いガイドが無いことでした。そこで、この投稿では、私が'Share with Pasie'プラグインをIntelliJリポジトリにリリースする過程で、役に立つ、特筆に値すると思った経験やリンクその他リソースを記します。

リンク集

いきなり、刺激的で超絶便利なプラグインを書き始めようとする前に、まず最初にいくつか読んでおくべきものがあります。下記は、見ておく価値のある場所の一覧です。


Getting Started - ここからスタートすべき。新しいプラグインを作るための最も基本的なイントロダクション。


Basics of plugin development – 2番目に見るべきページ。上記のページに似ているが、いくつか興味深い知識が得られる。


Plugin Development FAQ - 疑問や問題が生じたときに解決法や答えをみつけるのに最適


Open API forum - 本当にドツボにハマってしまったときに行くべき場所

コードを見せてくれ!

上のリンク集に挙げた場所は有用ではあるが、何かを動かしたり何か機能を実装するためには、
遅かれ早かれソースコードの中に飛び込まないといけないでしょう。

コンソールを開いて次のようにタイプします。

 git clone git://git.jetbrains.org/idea/community.git idea

あるいは、IntelliJ IDEA 10のソースコードをGrepCodeでチェックします。

私はどちらのやり方も使いました。プロジェクト全体をチェックアウトしてIDEAで使い方を調べる用途にはGitリポジトリを使い、単一ファイル内のコードがどんなものかを手早く調べる用途にはGrepCodeを使用しました。

他人から学ぶ

誰かが作ったプラグインで見かけたのと似たような機能を追加したくなることがあるかもしれません。運が良ければそのプラグインのソースコードを入手できるでしょう。必要なのは、http://plugins.intellij.net/?idea
に行って似たような機能を持つプラグインを探し、そのソースコードが公開されているかチェックすることだけです。私はこのやりかたで、選択したコードをPasiteに共有できた旨のメッセージを緑色のバルーンに表示する方法を見つけました。

有用なサンプル

ほぼ全てのプラグインのソースコードに存在する要素というものが幾つか存在します。それをGoogleで検索したり解明したりする手間を省けるよう、最も一般的と思われる短いサンプルを2つ示します。

現在のプロジェクト、ファイル等を取得する

プラグインを作る際、IntelliJ OpenAPIの抽象クラスAnActionを継承してアクションを作ります。
actionPerformedメソッドに渡されるパラメータはAnActionEventだけですが、このオブジェクトからいろいろな場所にアクセスできます。

Project currentProject = DataKeys.PROJECT.getData(actionEvent.getDataContext());
VirtualFile currentFile = DataKeys.VIRTUAL_FILE.getData(actionEvent.getDataContext());
Editor editor = DataKeys.EDITOR.getData(actionEvent.getDataContext());
 
// and so on...

この方法でアクセス可能な場所の一覧は、DataKeysクラス(とその親クラス)の定数一覧に見つけることができます。

バルーンに情報やエラーメッセージを表示する

この手のポップアップは、ユーザに応答メッセージを伝えるのにとても便利です。メッセージはinfoでもいいし、error,warnでもいいです。デフォルトの色は、info用の緑とエラー用の赤、警告用のオレンジがあります。"Share With Pastie"プラグインでは、選択したテキストが無事にPastieに送信されクリップボードにリンクが格納されていることを示す用途にバルーンを使っています。


http://tomaszdziurko.pl/wp-content/uploads/2011/08/plugin_2.png


バルーンを表示する前に、それを表示する場所を特定する必要があります。私のプラグインではステータスバー(IDEA GUIで最も低レベルな要素)になります。

StatusBar statusBar = WindowManager.getInstance()
                        .getStatusBar(DataKeys.PROJECT.getData(actionEvent.getDataContext()));


その後、バルーンを準備して表示することができます。

トリビアを少し

Plugin DevKit

最も重要なのは、開発中に、自作プラグインを起動したりデバッグしたりできるように、Plugin DevKitというプラグインをダウンロードする、あるいは有効化することです。これはとても些細なことのようですが、このプラグインを無効にしているかもしれない(私のように)し、起動時間を短縮するためにこのプラグインを削除しているかもしれません。

UI Designer

追加のウィンドウやポップアップ等を持つプラグインを開発するなら、UI Designerというプラグインがとても便利です。これは、NetBeansのGUIビルダにとても似ており、ドラッグアンドドロップでSwingのパネルを追加したりコンポーネントのサイズを変えることができるようになります。

グループとアクションのID

IntelliJ IDEA内で利用できるメニューに自作のアクションを表示するのに適切な場所を探していたとき、グループとアクションのID一覧があるページにたどり着き、自作プラグインの設定をするのにとても役立ちました。しかしこのページは内容が古くなっていたようにみえたので、他の方法でこれらのIDの適切な値を見つけられないか調べてみました。そして当然のことながら解決方法はありました。それも目の前に。プロジェクトビュー内でAlt+Insertを押すと、新しいオブジェクトを作成するメニューがいくつか表示されます。それをクリックすれば、以下の様なとても親切なAction作成画面が表示されるでしょう。


http://tomaszdziurko.pl/wp-content/uploads/2011/09/actions_ids.png

VMメモリを適切に設定する

次にやるべきことは、正しく動作するように"Run/Debug Configuration"を設定することです。というのもハードウェアの設定(主に利用可能なメモリ量)、IntelliJ IDEAの設定によっては、開発モードで自作のプラグインを動かした時にフリーズするかもしれないからです。
(最も頻繁にクラッシュするのはIndexの再構築中です)


http://tomaszdziurko.pl/wp-content/uploads/2011/09/run_config.png


この問題を防ぐため、"Run/Debug Configurations"ウィンドウで適切なVM引数を設定すべきです。私にとっては、-Xms256m -XX:PermSize=128m -XX:MaxPermSize=512m でうまくいきます。

おしまい

というわけで、これが、自作プラグイン作成に関する私の経験、知識、考えの一覧です。これがあなたの役に立って、あなたのプラグインが我々(開発者)の生産性を向上させ、より早く品質の良いコードをリリースできるようにしてくれればと期待します。私の友人が「もしIDEAプラグインの作り方を知っていたら、3週間に1つ新しいプラグインを作っていただろうね。自分の作業を改善する新しいアイデアがいつもあるんだから。」と言っていました。たぶんこの投稿を読んだ後なら、少なくともプラグイン開発のスタートは、より簡単になるでしょう。