argius note

プログラミング関連

Play!2.0始めました(3)

俄かに忙しくなってしまい、あまり進んでいません。

  • ロギング
  • プロキシの設定
  • テスト(specs2)
  • ファイルを保存したらPlayにコンパイルさせる

環境:

  • Play 2.0.2
  • Windows 7 HP 64bit
  • JDK?(1.6,1.7) 64bit
  • Eclipse(Indigo 3.7.1) 64bit
  • Scala-IDE(2.0.1)

ロギング

マニュアルページは下記。

slf4jなので、それに準じる使い方をすればOKだと思います。


プログラムはこんな感じにします。

  • controllers/Application.scala
package controllers

import play.api._
import play.api.mvc._

object Main extends Controller {

  private val log = Logger(getClass())

  def loggingTest = Action { request =>
    log.info("info")
    log.info("debug")
    Ok("loggingTest")
  }

}
  • conf/application.conf
#(追加)
logger.controllers=DEBUG
  • console
[info] c.Main$ - info
[debug] c.Main$ - debug
  • logs/application.log
2012-07-11 20:58:40,552 - [INFO] - from controllers.Main$ in play-akka.actor.actions-dispatcher-2
        
info

2012-07-11 20:58:40,557 - [DEBUG] - from controllers.Main$ in play-akka.actor.actions-dispatcher-2
        
debug

カスタマイズしたい場合は、conf/logger.xmlを作ります。このファイルがある場合は、ロギングの設定ファイルと認識されます。書き方は、マニュアルの上記ページを参照。


プロキシの設定

${PLAY_HOME}/framework/buildのjavaオプションに

-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=8080

を追加すれば良さそうです。設定ファイルに書けると少しうれしいんですけどね。


テスト(specs2)

specs(specs2)はscalaスペックファーストなライブラリのひとつで、Play2.0ではこれがデフォルトのテスト環境になっています。
コンソールで"test"と打つだけで、テストを実行してくれます。


スペックファーストテストに不慣れで恥ずかしいので詳細は省きます。


ファイルを保存したらPlayにコンパイルさせる

ちゃんと調べてません。もしかしたら公式の手段があるかも知れません。
追記(2012-10-15): SBTの機能で、コマンドの前に~をつけると、ファイルを保存したときにそのファイルをコンパイルしてくれます。(気づくの遅すぎ。)
例:

[MyProject] $ ~ run
  .
  .
  .
[info] Compiling 1 Scala source to /workspace/MyProject/target/scala-2.9.1/classes...
[success] Compiled in 6s

私は(重いOSにしては)スペックが低めの環境で使っているので、

  1. 変更する
  2. アクセスする
  3. コンパイルが走る

だと最初のアクセスで待つことになります。


これを、例えば「app/*,conf/*のファイルに変更があったらトップページにアクセスする」ような仕掛けを用意すれば、先行してコンパイルを開始させることができます。
私は、Java1.7で追加されたNIO2のAPIを使って、ファイルの変更を監視して変更があったらトップページにアクセス(java.net.HttpURLConnectionを使う)するように実装しました。
当然、無駄に何度もコンパイルしてしまうことになりますが、時間を優先するとしたら有効なのではないでしょうか。


次回こそ、asynchronousなところに踏み入ってみたいと思います。