Play framework with Scala その2

| # Comments | 4 Trackbacks
昨日Play frameworkを使ってHello Worldが動きました。

今日はPlay frameworkをやるときによさそうな環境設定について書きたいと思います。
ほぼ自分向けのエントリーです。

ベースとなるEclipse(Scala IDE for Eclipse)とEmacs(ENSIME)がインストールされているものとします。

Eclipseとの連携

Play!のコマンドで、eclipsifyというやつがあるのでこれを利用します。

$ ${PLAY_HOME}/play eclipsify helloworld

実行後、プロジェクト内にEclipseの設定ファイルである .project .classpath .settings などが生成されて、「ファイル」→「インポート」でこのプロジェクトをEclipseプロジェクトとしてインポートすることができるようになります。

また、eclipseディレクトリが作成され、サーバーやテストの起動用の.launchファイルが作られます。
コマンドシェルからrunコマンドで起動していたサーバーをEclipse上で起動させることができます。

eclipse/helloworld.launch ファイルを右クリック → Run As → helloworld

Eclipseからのビルド先はeclipse/classesに設定されます。

コンパイルエラー?

Scala IDE for EclipseのScalaのバージョンが2.8.1の場合、コンパイルエラーがでます。
これは、Play!のScalaモジュール0.8のScalaのバージョンが2.8.0なので、新規に追加されたクラスが見つからないためのようです。

ほっておいても問題ないですが、気になる人はScala IDE for Eclipseが提供するScala Libraryライブラリを追加するとエラーが消えます。

Properties → Build Path → "Libraries"タブ → 「Add Library...」 → 「Scala Library」

ライブラリの並び順をJRE System Libraryの次くらいにしておくといいと思います。

デバッグ

デバッグする時にはEclipseでステップ実行などができたら便利です。
Eclipseから起動したサーバーであれば、後からデバッグ機能をいれこむことができます。

eclipse/Connect JPDA to helloworld.launch ファイルを右クリック → Debug As → Connect JPDA to helloworld

「接続できました」的なメッセージは表示されませんが、Debugパースペクティブに新しいプロセスが表示されていると思います。

この状態でブレークポイントを設定すれば、そこからステップ実行など、いつものデバッグを行うことができます。

他のIDEと連携

Eclipse以外の、NetBeansIntelliJ IDEAなどの設定ファイルも生成できるコマンドがあります。
詳しくはドキュメントを参照してください。

Emacs (ENSIME) の設定

ソースファイルの編集にはEmacs (ENSIME) を使っています。

M-x ensime-conf-gen で、設定ファイルの雛形を作っていきます。
/path/to/helloworld は適宜読み替えてください。)

Find project root: /path/to/helloworld
Your project seems to be of type 'custom', continue with this assumption? (yes or no) yes
What is your project's name? /path/to/helloworld
What is the name of your project's main package? e.g. com.myproject: 
Where is the project's source located? /path/to/helloworld/app
Where are the project's dependency jars located? /path/to/helloworld/lib
Is the Scala standard library located somewhere else? (yes or no) yes
Where are is the Scala library located? ${PLAY_HOME}/modules/scala-0.8/lib
Where are classes written by the compiler? /path/to/helloworld/eclipse/classes

な感じで質問に答えていくと設定ファイルの雛形( /path/to/helloworld/.ensime )ができます。
クラスファイルの出力先は、Play!本来の挙動に影響を与えたくないので、eclipse/classesに向けてあります。

この設定ファイルに外部ライブラリの位置などを追加設定します。

  • :sources に、テストコード用のディレクトリ( "./test" )を追加します。
  • :compile-jars に、Play!の依存ライブラリがあるディレクトリを追加します。

すると、以下のようになります。

;; This config was generated using ensime-config-gen. Feel free to customize its contents manually.

(

:project-name "helloworld"

:project-package ""

:sources ("./app" "./test")

:compile-jars ("./lib" "${PLAY_HOME}/modules/scala-0.8/lib" "${PLAY_HOME}/framework" "${PLAY_HOME}/framework/lib")

:target "./eclipse/classes"

)

これで設定ができましたので、ENSIMEを起動します。

M-x ensime

Play!にモジュールを追加すると、依存ライブラリ、もしくはソースコードが付いてくるので、それらを順次追加していくことでENSIMEでの補完やエラー表示なども正しく表示されるようになります。

Maven2で依存ライブラリ取得

Maven2を使うと、依存ライブラリを自動的に(Mavenレポジトリにあれば)収集できて便利です。
そこで、Mavenモジュールを使います。

conf/application.conf ファイルにMavenモジュールを使うための設定を追加します。
Scalaモジュールの設定があるあたり(27行目あたり?)です。

module.scala=${play.path}/modules/scala-0.8
module.maven=${play.path}/modules/maven-head

これでMavenモジュールのコマンドがPlay!に追加されました。

初期化

まずはMavenモジュールを初期化します。

$ ${PLAY_HOME}/play mvn:init helloworld

プロジェクトにpom.xmlファイルが追加されます。
pom.xmlファイルの groupIdartifactId タグの設定は自プロジェクトに合わせて修正したほうがいいかもしれません。

依存ライブラリの管理

dependenciesタグで依存ライブラリの設定を行った後、

$ ${PLAY_HOME}/play mvn:update helloworld // or play mvn:up

とすると依存ライブラリをダウンロードし、libディレクトリに保存してくれます。
また、

$ ${PLAY_HOME}/play mvn:refresh helloworld // or play mvn:re

とするとlib以下を一旦削除してから再度依存ライブラリを格納しなおします。
依存ライブラリのバージョンを変更した場合などはこちらを使うことになります。

ソースコードをダウンロードする場合には

$ ${PLAY_HOME}/play mvn:source helloworld // or play mvn:src

とします。
(ソースコードはレポジトリにない場合がありますので、その場合にはダウンロード出来ません。)

新しくライブラリを追加した場合には、再度eclipsifyすることでEclipseにも認識させることができます。
ENSIMEも再起動させれば認識します。

Maven2について

Maven2自体の使い方については、以前まとめましたので、そちらを参照してください。
特に依存ライブラリの管理については依存解決とレポジトリのページにまとめてあります。

Maven2は本来ビルドツールなのですが、Play!で使う場合には依存ライブラリ管理でのみ使うことになりそうです。
(Maven2によるビルドも試みましたが、今のところうまくいっていません。)

共有ライブラリはMaven2プロジェクトとして構築して、Webアプリ層となるPlay!プロジェクトでそれらを取り込む、という使い方になるのかな。

注意

eclipsifyensime-conf-genなどで生成した設定ファイルは、バージョン管理に含めないほうがいいようです。
環境依存の設定が含まれていたりすると他のチームメンバーに影響を与えてしまう場合があるからです。
チームメンバーが必ずしもEclipseやEmacsを使っているとも限らないし。

たいした手間ではないので、各コマンドを各自で行い、各自の環境に合わせた設定にするようにしましょう。

pom.xmlファイルは環境依存しにくいので大丈夫です。というかこれは同じものを使うべき。

トラックバック(4)

Play framework with Scala を使ってみようシリーズです。... 続きを読む

Play framework with Scala を使ってみようシリーズです。... 続きを読む

Play framework with Scala を使ってみようシリーズです。... 続きを読む

Play framework with Scala を使ってみようシリーズです。... 続きを読む

comments powered by Disqus

Twitter Icon

AdSense

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 5.14-ja

Google検索

カスタム検索

2013年10月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31