sbt/IntelliJ

IntelliJ IDEAでの利用

準備

ここではIntelliJ IDEAにSBTプラグインを入れてIntelliJで編集しつつSBTでビルドすることにする。。。のだが、まずは普通のscalaソースを作成して実行できるようになるまでを見ていく。

事前にIntelliJ IDEAに示したように、Scalaプラグイン、SBTプラグインが導入されているものとする。これ以降すべてをIntelliJ IDEA上で行うので、DOS窓やシェルは使用しない。

プロジェクトの作成と最小限の設定

IntelliJ IDEAでは一つのプロジェクト中に複数のモジュールを作成することができるのだが(Eclipseで言えば一つのワークスペース中に複数のプロジェクト)、一つのプロジェクトについて一つのモジュールという形式もある。SBTプラグインを使用する場合は、後者の形式でないとうまくいかないようだ。以下のようにする。

新しいプロジェクトには.ideaというディレクトリのみが存在し、その中になにやら設定ファイルがある。次に、sbtプラグインを使用してsbtのプロジェクトとして作成する。

通常のIntelliJプロジェクトではsrc直下にscalaのソースを格納するが、SBTの場合はsrc/main/scalaになる。IntelliJ側はこのことを知らないので、ここにソースを格納することを教えてやる。

必要ライブラリのダウンロード

上に示した※の時点で必要ライブラリがダウンロードされることがある。 これは、SBTにビルトインされたivyによってMaven2リポジトリから取得されるようで、リポジトリが混んでいる場合には非常に時間のかかることがある (ほとんどハングアップしているように見える)。

事態が進行中かどうか見極めるには、~/.ivy2以下にあるファイルの状態を確認するとよい。 ダウンロード中のファイルは「.part」という拡張子になっており、ダウンロードが進行しているならば、このファイルのサイズが増加していくことが観察できる。

HelloWorldの作成と実行

HelloWorldを作成して実行できるまでを確認する。

object Sample {
 def main(args: Array[String]) {
  println("hello, world")
 }
}

※Run/Edit ConfigurationsメニューのDefaultsは、あくまでも各コンフィギュレーションのデフォルト値を指定するものなので、Defaults上で設定を行っても新しいコンフィギュレーションは作成されない。

この状態でソースを編集して、緑矢印をクリックすれば、変更されたソースが自動的にコンパイルされて実行される。しかし、特にscalaソースのコンパイルは非常に遅い。

SBTの利用

コンパイルを速くする

デフォルトではIntelliJの機能を使用してコンパイルされるため、これが非常に遅い。SBTの機能を利用することにより、コンパイルを高速化することができる。

この状態でscalaソースを編集して緑矢印をクリック(Run)すると、SBTによるコンパイルが行われてからアプリが起動する。この際、左下のSBT Consoleを見てみると、コンソール起動状態でなくとも、勝手に起動されてコンパイルしていることがわかる。つまり、上の設定はSBTコンソールへのコンパイルコマンド投入を行うものであることが理解できる。

また、このSBTコンソールにて、直接compileとかtest-compileというコマンドを投入しても、やはりコンパイルされる。つまり、先のコンフィギュレーションでの指定は、単純に「アプリケーション実行前にSBTにこれこれのコマンドを投入せよ」と指示するものに過ぎないことがわかる。

自動コンパイルさせる

ソースファイルを編集してセーブしたら、その場で自動コンパイルさせることができる。これはSBTコンソールで「~test-compile」などと入力する。「~」というのは、「ファイルの変更があったらそれに続くコマンドを自動実行する」という意味らしい。この効果はSBTコンソールを終了するまで継続する(終了はexit)ので、やめたいときはいったんexitしてしまえばよい。

IntelliJのエディタで編集してセーブすると、たしかに自動的にコンパイルされていることがわかる。

last edited 2011-10-19 01:43:27 by ysugimura