ImageJ pluginの開発 by Scala on IntelliJ IDEA (Mac OSX)

ImageJのプラグインをScalaで書いている。これまでは
http://imagejdocu.tudor.lu/doku.php?id=howto:plugins:the_imagej_eclipse_howto
このページに解説されているようにしてEclipseを使っていたが、Eclipse上のScalaは、

  • 自動インデントがバグっている(ストレス大)
  • デバッグも、ブレークポイントの設定はできるが変数の値が表示できないので意味がない。
  • リファクタリングも動かない。

といった欠点があり、しかもリファクタリング中に固まってEclipseのworkspaceファイルが壊れてしまったので、さすがにこれはキツいと思い、巷で評判のいいIntelliJ IDEAに移行することにした。上記の欠点が解決して今のところとても快適な感じ。できないと聞いていたインクリメンタルビルドも動的リロードという機能でできているようだ。手動でメニューからMakeしないといけないものの。)

移行といっても自動のインポートが上手くいかなかったので、IntelliJで新規プロジェクトを作成し、ファイルをコピーして手動で設定した。

自分への覚え書きをかねて設定法を書いておく。

IntelliJ IDEAのフリー版(community edition)をダウンロード

http://www.jetbrains.com/idea/free_java_ide.html

Scala SDKのダウンロード

sudo port install scala29でインストールできるコンパイラと実行環境とは別に、Scala SDKをダウンロードして/opt/local/の下に手動でコピーした。このSDKはscala-library.jarというscalaプログラムの開発と実行に必要な重要なファイルを含む。

Scalaプラグインのインストール

メニューからIntelliJ IDEA->Preference->Plugins->Browse repositoriesでScalaを選択。

ImageJソースのコピー

http://developer.imagej.net/idea
ここに書いてあるように、SVNのレポジトリからチェックアウトしてダウンロードすることもできるが、そうすると最新のver.2のアルファ版が取れてしまう。通常の最新版はver〜1.4で、しかもフォルダとクラス構造もver.2と1.4でだいぶ違うようなので(PlugInFrameなどのクラスが見つからなかった)、普通に以下のサイトからSourceをダウンロードして適当なフォルダに展開した。
http://rsbweb.nih.gov/ij/download.html

プロジェクト、モジュールの作成、ImageJのファイルをコピー

新規の空のプロジェクトを作成し、その中にモジュールを2つ作る。EclipseでいうworkspaceがIntelliJのプロジェクト、プロジェクトがモジュールに相当する。1つのモジュールがImageJ用、もう一つのモジュールがScalaで書くplugin本体用。それぞれにsrcフォルダーを作成する。

ImageJ用のモジュールのsrcフォルダーにImageJのソースコード、そしてsrcに並べて他のimages, macros, pluginsフォルダなどをコピーする。IntelliJのProjectペインにドラッグすれば、確認ダイアログが出た後、ファイルのコピーとモジュールへのインポートが行われる。

plugin用のモジュールの設定
  1. Projectペインでモジュールを選択し右クリック->Add Framework SupportでScalaを選ぶ。これでこのモジュール内でScalaソースファイルを認識できる。
  2. モジュール選択→右クリック→Open Module Settingsを開く。Module SDKは適当なJDKを選ぶ。そしてDependenciesのタブでImageJのモジュールとscala-library.jarを追加する(重要! これらがないとScalaソース中で赤字でシンボルが見つからないというエラーがでる。)
ImageJ用のモジュールの設定

Module SDKで適当なJDKを選択する。

Run Configurationの作成
  1. Run->Edit Configurationsでプラスアイコン→Applicationでconfigurationを作成し、Main classをij.ImageJ、Working directoryをImageJのフォルダに設定する。
  2. ここで解説されているように、コンパイルされたクラスファイルをjarにまとめてImageJフォルダにコピーするためのAntファイルを作り、モジュールのフォルダ内にコピー。

http://imagejdocu.tudor.lu/doku.php?id=howto:plugins:the_imagej_eclipse_howto

  1. Projectペイン内で追加したAntファイルを選択し、右クリックのメニューからモジュールに追加する。
  2. Run->Edit Configurationsの中でRun Ant Targetをチェックし、Antの適切なターゲット(上の解説のケースでは"main")を選択。

以上。こうやって書くと結構面倒なプロセスだったことに気づく。実際2時間くらい試行錯誤していた気がする。ただ最初に設定すればいいだけで、今後の生産性はぐっと上がるだろう。