前書き

Play(Scala)の開発環境としてEclipseを利用してみる。

Playの導入は済んでいるものとする。済んでない場合は導入編参照。

Play2.0.4を使用。

@CretedDate 2012/10/18
@Versions Scala2.9.2 Play2.0.4

Eclipseを落としてくる

とりあえず公式サイトからEclipse3.7を落としてくる。推奨は3.6だったような気もする。とりあえず我が家の環境では3.7でも問題なく動いている。

Eclipse4系を使おうとした人は、まだ早い、もう少し待つんだ。

Xmxの設定を変える

落としてきたEclipseを適当な場所に解凍して、中のeclipse.iniの設定を変える。

下記のようになっているのを。

-Xms40m
-Xmx384m

搭載してるメモリの量に応じて、適当に増やす。

-Xms256m
-Xmx1024m

増やさないと、あとでスワップさんとかアウトオブメモリーさんが楽しげにダンスしている姿を目撃することになる。

Scala IDE for Eclipseを入れる

とりあえずEclipseを立ち上げる。

Scala IDE for Eclipseの公式サイトからUpdate SitesのURLをコピーしてくる。

以下の手順でインストールする。

Help → Install New Software → 右上のAddボタンを押す
  → NameにScalaとかなんか適当な名前を、LocationにさっきコピってきたURLを入れてOK
  → しばし待つ
  → 出てきた項目にチェックを入れて、Next
  → Next → Accept → Finish

最後にEclipseの再起動するか聞かれるので、再起動を実行。

あと、自動ビルドをオフにしておいた方が軽くて良いかもしれない。どうせリクエストする際にサーバ側でコンパイルが走るので。

Project → Build Automaticallyのチェックを外す

ビルドしたい時(エラーが消えない時とか)はCtrl+Bを押す。

Playのプロジェクトを作成する

Playがインストールされていて、パスも通っているものとする。

とりあえず適当にプロジェクトを生成。途中の選択肢はScalaを選ぶ。

$ play new eclipse_sample

作ったプロジェクトにcd(compact disc)して、play eclipsifyを実行する。

$ cd eclipse_sample
$ play eclipsify

これでEclipseプロジェクト用のファイルがディレクトリ内に追加された。.classpathとか、.projectとか、.settingsとか。

IntelliJ IDEA用のプロジェクトを生成するidealizeとか、NetBeans用のプロジェクトを生成するnetbeansifyというコマンドもあるらしい。

eclipsifyコマンドが完了したら、Eclipseからプロジェクトをimportする。

File → Import → General → Existing Projects into Workspace → Next
  → Browseで作ったプロジェクトを選択 → Finish

これでPlayのプロジェクトをEclipse上で開発できるようになった。

あとはコンソール上でplay runしてサーバを立ち上げておく。

$ play run

この状態でソースに手を加えてhttp://localhost:9000/等にリクエストすると、自動的にコンパイルが走って編集したソースが適用された状態で結果が表示される。

conf/routesとかをいじっても自動で反映される。便利。

さすがにSBT周り(project/Build.scalaとか)をいじった場合は無理。サーバを落としてplay runし直す。

依存ライブラリを追加した場合

PlayはSBTで依存ライブラリの管理とかをしている。試しにここに新しいライブラリを追加して動きを見てみる。

project/Build.scalaを開き、以下の場所に

val appDependencies = Seq(
  // Add your project dependencies here,
)

以下のように記述を追加する。ここで追加するのはなんでも良いのだけど、試しにLiblinearのJava版を追加すしてみる(選定理由、軽いから)。

val appDependencies = Seq(
  // Add your project dependencies here,
  "de.bwaldvogel" % "liblinear" % "1.91"
)

これだけだとclasspathに反映されないので、コンソールからeclipsifyを再実行。

$ play eclipsify

これでclasspathにliblinearが追加された。

依存性を削除した場合は、eclipsifyの前にcleanも実行しておく。

$ play clean

テンプレートの編集をする

これで概ね開発できる状態になったけど、この状態だとテンプレートをテキストエディタで編集しないといけない。

だいたいHTML的な文書になるので、好みのHTMLプラグインを入れてそれで編集するか、Scalaエディタで編集するという手もある。

下記はScalaエディタで編集する場合。

Window → Preferences → General → Editors → File Associations
  → *.htmlを選択し、下のAssociated editorsの項目のAddをクリック
  → Scala Editorを選択 → OK → Default → OK

Scalaエディタでもそこそこ綺麗に色分けしてくれる。さすがにコード補完とかはしてくれないけど。

あと、templateを追加した場合は少し面倒。

templateのコンパイルはEclipse上では行えない。ので、追加したtemplateを呼ぼうとすると、Eclipse上にエラーが表示された状態になってしまう(実行は可能)。

加えた後にeclipsifyしてF5押せばとりあえずエラーは消える。

まとめ

ここ数週間ほどこの構成で開発しているけど、特に不便は感じていない。

Railsと比べるとコンパイル時間がある分、待ち時間がちらほらある。

ただ、コンパイラがViewに対しても走ってくれるので、型の安全性という意味では静的型付言語の良さをきっちり発揮してくれている。