Play framework 2.0 betaが出たようです2 – consoleを使用する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Play framework2.0のコンソールを使用する

今回は、前回セットアップしたplay2.0βを使って、playコンソールについてご紹介します。
playコンソールはsbt ※1ベースで動作し、playアプリケーションの開発サイクルを管理するための仕組みです。
コンソールではコンパイルやテスト、REPL等さまざまな機能を使用することができます。
今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.2
  • Playframework : 2.0β
  • Java : 1.6.0_26

なお、今回試すplayコンソールはGithubのwiki ※2にそって試してみました。

注意:
この記事ではβ版を使用して試しています。
正式リリース前の状況のため思わぬ不具合が生じるかもしれませんので、ご了承ください。

プロジェクト作成

前回と同じようにプロジェクトを作成します。プロジェクト作成は
play new <プロジェクト名>
で作成してください。
※play2.0にパスを通しておいてください

%play new myapp                                
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0-beta, http://www.playframework.org

The new application will be created in /Users/srcs/Play20/samples/myapp

What is the application name? 
> myapp

Which template do you want to use for this new application? 

  1 - Create a simple Scala application
  2 - Create a simple Java application
  3 - Create an empty project

> 1

OK, application myapp is created.
Type `play` to enter the development console.
Have fun!

コンソール起動

myappという名前で、Scalaのテンプレートを使用してアプリケーションを作成しました。
次に作成したプロジェクトに移動し、playコマンドを実行してコンソールを起動します。

%cd myapp/                                         
%play                                  
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
[info] Loading project definition from /Users/srcs/Play20/samples/myapp/project
[info] Updating {file:/Users/srcs/Play20/samples/myapp/project/}default-464719...
[info] Done updating.
[info] Compiling 1 Scala source to /Users/srcs/Play20/samples/myapp/project/target/scala-2.9.1/sbt-0.11.0/classes...
[info] Set current project to myapp (in build file:/Users/srcs/Play20/samples/myapp/)
       _            _ 
 _ __ | | __ _ _  _| |
| '_ \| |/ _' | || |_|
|  __/|_|\____|\__ (_)
|_|            |__/ 
             
play! 2.0-beta, http://www.playframework.org

> Type "help" or "license" for more information.
> Type "exit" or use Ctrl+D to leave this console.

[myapp] $ 

コマンドを実行してみる

コンソール上でいろいろなコマンドを実行してみましょう。
helpと入力すればコンソールのヘルプを確認できます。
たくさんコマンドが表示されますが、今回は代表的なコマンドをいくつかご紹介します。
それ以外のコマンドは、sbtのドキュメントを参照してください。

アプリケーションの起動

アプリケーションの起動にはrunコマンドを使用します。

[myapp] $ run
--- (Running the application from SBT, auto-reloading is enabled) ---
[info] play - Listening for HTTP on port 9000...
(Server started, use Ctrl+D to stop and go back to the console...)

ソースファイルを修正してアクセスすると自動でコンパイルされるので再起動は必要ありません。
コンパイルエラーはブラウザで直接表示されるので対象の箇所がすぐにわかります。
また、ctrl + Dでサーバーを停止することができます。

コンパイル

サーバーを起動していなくてもコンパイルを実行することが可能です。
適当にコントローラーをいじってコンパイルしてみました。

myapp] $ compile
[info] Compiling 1 Scala source to /Users/srcs/Play20/samples/myapp/target/scala-2.9.1/classes...
[error] /Users/srcs/Play20/samples/myapp/app/controllers/Application.scala:8: not found: value Actions
[error]   def index = Actions {
[error]               ^
[error] one error found
[error] {file:/Users/srcs/Play20/samples/myapp/}myapp/compile:compile: Compilation failed

ブラウザで表示されるエラーとだいたい同じように表示されます。

interactiveコンソール

コンソール上でconsoleと入力すると、ScalaのREPLが起動します。
ここではScalaのコードを対話的に実行することができます。
play2.0のAPIも直接呼び出し、結果をコンソール上で確認することができます。

[myapp] $ console
[info] Starting scala interpreter...
[info] 
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_26).
Type in expressions to have them evaluated.
Type :help for more information.

scala> views.html.index("hello")
res0: play.api.templates.Html = 
<!DOCTYPE html>

<html>
    <head>
        <title>Home</title>
        <link rel="stylesheet" media="screen" href="/assets/stylesheets/main.css">
        <link rel="shortcut icon" type="image/png" href="/assets/images/favicon.png">
        <script src="/assets/javascripts/jquery-1.6.4.min.js" type="text/javascript"></script>
    </head>
    <body>
    <section>
        <h1>hello</h1>
    </section>
    </body>
</html>

少しだけプログラムの動きを試したいが単体テストを書くほどでもない、というときも有用です。

sbtの機能を使用する

playコンソールはsbt上で動いているので、当然sbt独自の機能が使えます。
例えば、コマンドの前に「~」をつけることで、 Triggered Execution(トリガ実行)機能が使えます。
これはファイルの更新を監視し、ファイル更新を検知した時点でアクションを実行します。
ためしにコンパイルをトリガ実行してみましょう。

[myapp] $  ~ compile
[success] Total time: 0 s, completed 2011/11/07 9:49:56
1. Waiting for source changes... (press enter to interrupt)
[info] Compiling 1 Scala source to /Users/srcs/Play20/samples/myapp/target/scala-2.9.1/classes...
[success] Total time: 1 s, completed 2011/11/07 9:50:08
2. Waiting for source changes... (press enter to interrupt)

~ compileコマンドを実行したあとファイルを更新すると、その時点でコンパイルが実行されます。
例えば~ testを実行すれば、ソースを変更した時点で単体テストが実行されるようになります。

playコマンドを直接使用する

play 1.2.x以前のように、playのコマンドを直接実行することもできます。
プロジェクトディレクトリでplay runと入力すれば、playコンソールを使用せずにアプリケーションが起動されます。

%play run                              
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
[info] Loading project definition from /Users/srcs/Play20/samples/myapp/project
[info] Set current project to myapp (in build file:/Users/srcs/Play20/samples/myapp/)

--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on port 9000...

(Server started, use Ctrl+D to stop and go back to the console...)

[warn] play - Stopping server...

ctrl + Dを入力すると、playコンソールにもどらず、直接OSのコンソールに戻ります。

まとめ

今回はplay2.0のコンソール機能についてご紹介しました。一連の開発サイクルが簡単に行えて便利ですね。
今回は基本的な部分だけでしたが、sbtはまだまだ多くの機能を持っています。
開発サイクルのさらなる生産性向上のためにうまく活用していってください。

参考サイトなど

  • ※1  https://github.com/harrah/xsbt/wiki
  • ※2  https://github.com/playframework/Play20/wiki/PlayConsole