play! on eclipse
play! は java web アプリケーションフレームワークであり、当然、開発には java 言語を使います*1。
play! の オフィシャル にあるスクリーンキャストでは TextMate を使っていますが、java 開発者は eclipse に慣れていることが多いので、play! には eclipse での開発を容易にするツールがいくつか用意されています。
eclipsify
play! アプリケーションを eclipse プロジェクト化する eclipsify コマンドが用意されています。
まずはヘルプを参照してみます。
D:\work>play help eclipsify ~ _ _ ~ _ __ | | __ _ _ _| | ~ | '_ \| |/ _' | || |_| ~ | __/|_|\____|\__ (_) ~ |_| |__/ ~ ~ play! 1.0.2.1, http://www.playframework.org ~ ~ Name: ~ ~~~~~ ~ eclipsify -- Create all Eclipse configuration files ~ ~ Alias: ~ ~~~~~ ~ ec ~ ~ Synopsis: ~ ~~~~~~~~~ ~ play eclipsify [app_path] ~ ~ Description: ~ ~~~~~~~~~~~~ ~ Create all needed configuration file to make the application hosted at the app_path directory an Eclipse project. ~ If app_path is omitted, the current directory is used. ~ ~ All needed configuration files including .project and .classpath are created. ~ Several launchers for the application are created as well. The main launcher in usable either with the Run and ~ Debug Eclipse command. The JPDA launcher is only usable with the Run command since it already starts a JPDA agent. ~ You can then use the Connect JPDA launcher to start a debugging session at any time. Stopping the debugging session ~ will not stop the server. ~ ~ Use File/Import/General/Existing project to import the project into Eclipse. ~ ~ Use eclipsify again when you want to update Eclipse configuration files. It's needed after any classpath change. ~ However, it's often better to delete and re-import the project into your workspace since Eclipse keeps dirty caches... ~ ~ The created configuration file contains absolute references to your application, the Play framework and all enabled modules. ~ These are specific to your own installation. When you work in a team, each developer must keep his IDE configuration files private. ~
地味にいろいろと重要なことが書いてありますが、細かいことは追々見ていくとして、まずは実践してみましょう。
以下では実験に使用するアプリケーション名を eclipsetest とします。変更する場合は適宜読み替えてください。
まずは play new で play! アプリケーションを作成します。
D:\work>play new eclipsetest (snip) ~ ~ The new application will be created in D:\work\eclipsetest ~ What is the application name? eclipsetest ~ ~ OK, the application is created. ~ Start it with : play run eclipsetest ~ Have fun! ~
作成されたアプリケーションの内容は以下のようになります。
D:\work>tree /F eclipsetest (snip) D:\WORK\ECLIPSETEST ├─app │ ├─controllers │ │ Application.java │ │ │ ├─models │ └─views │ │ main.html │ │ │ ├─Application │ │ index.html │ │ │ └─errors │ 404.html │ 500.html │ ├─conf │ application.conf │ messages │ routes │ ├─lib ├─public │ ├─images │ │ favicon.png │ │ │ ├─javascripts │ │ jquery-1.4.2.min.js │ │ │ └─stylesheets │ main.css │ └─test Application.test.html ApplicationTest.java BasicTest.java data.yml
で、これを eclipsify してやると
D:\work>play eclipsify eclipsetest (snip) ~ ~ OK, the application is ready for eclipse ~ Use File/Import/General/Existing project to import D:\work\eclipsetest into eclipse ~ ~ Use eclipsify again when you want to update eclipse configuration files. ~ However, it's often better to delete and re-import the project into your workspace since eclipse keeps dirty caches... ~
こうなります(変更が無い箇所は省略します)。
D:\work>tree /F eclipsetest (snip) D:\WORK\ECLIPSETEST │ .classpath │ .project │ ├─.settings │ org.eclipse.core.resources.prefs │ org.eclipse.jdt.core.prefs (snip) ├─eclipse │ │ .classpath │ │ .project │ │ Connect JPDA to eclipsetest.launch │ │ eclipsetest.launch │ │ Test eclipsetest.launch │ │ │ └─.settings │ org.eclipse.core.resources.prefs │ org.eclipse.jdt.core.prefs (snip)
なんだか色々できています。続いてこいつを eclipse に取り込んでみましょう。
eclipse を起動して java パースペクティブを開いたら、File->Import->General->Existing Project into Workspace と進み、作成したプロジェクトのルートディレクトリを指定します。
これで eclipse の自動補完やリファクタリングなどの強力な機能を使いながら play! の開発を行うことができるようになりました。
eclipsetest.launch
play! の開発は基本的に開発用サーバを起動したまま行います。コマンドプロンプトから play run を実行して開発サーバを起動してもよいのですが、eclipsetest.launch を使用すれば eclipse から開発用サーバを起動することができます。
パッケージエクスプローラで eclipsetest.launch を選択し、コンテキストメニューから Run As->eclipsetest を選択します。
eclipse コンソールに
INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
と表示されれば開発サーバの起動は完了です。ブラウザから localhost:9000 を開けば play! アプリケーションにアクセスすることができます。
Connect JPDA to eclipsetest.launch
eclipse の強力な機能の一つに、分かり易く使い易いデバッガがあります。JPDA (Java Platform Debugger Architecture) を使用することで eclipse デバッガから play! アプリケーションに接続することができます。
作成したばかりのコントローラにはブレークポイントを仕掛ける場所が無いので、適当なコードを追加します。
package controllers; import play.mvc.*; public class Application extends Controller { public static void index() { int sum = 0; for (int i = 0; i < 100; i++) { sum += i; } render(); } }
例えば for ループの中身などにブレークポイントを設定したら、パッケージエクスプローラで Connect JPDA to eclipsetest.launch を選択し、コンテキストメニューから Debug As->Connect JPDA to eclipsetest を選択します。
この状態でブラウザをリロードすると eclipse デバッガが起動し、通常通りステップインやステップオーバー、変数の閲覧や変更などが行えます。
デバッグ作業を終えたら JPDA 接続を切断します。マニュアル によると、JPDA を繋いだままコードを変更するとブレークポイントの場所がズレたりするので、デバッグの都度、接続と切断を行った方が無難とのことです。
なお、このとき開発サーバを停止する必要はありません。
Test eclipsetest.launch
最後はテストサーバの起動です。通常は play test コマンドで起動するテストサーバも eclipse から起動することができます。
パッケージエクスプローラで Test eclipsetest.launch を選択し、コンテキストメニューから Run As->Test eclipsetest を選択します。
eclipse コンソールに
INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
と表示されれば開発サーバの起動は完了です。ブラウザから localhost:9000/@tests を開けばテストランナーにアクセスすることができます。
playclipse
play! には playclipse という eclipse プラグインも同梱されています。
- %PLAY_HOME%\support\eclipse\org.playframework.playclipse_0.6.0.jar
インストール方法は非常に単純で、この jar ファイルを%ECLIPSE_HOME%\dropins ディレクトリにコピーして eclipse を再起動するだけです。
正常にインストールされると、メニューバーに "Play!" メニューが追加されます。また、ボタンバーにはコントローラ、モデル、ビューを作成するボタンや routes を表示するボタンが追加されます。
コントローラの render() メソッドをフォーカスした状態で Ctrl + Alt + V で対応するビューを開けるなどのショートカットも一応用意されていますが、肝心のビューエディタは現在のところ日本語が文字化けするようです。
tips
最後に play help eclipsify で表示された地味に重要な情報をふり返ってみましょう。