Documentation

§SBT クックブック

§play run 周辺のアクションフック

PlayRunHook を継承することで play run コマンドにアクションを関連付けることができます。
このトレイトは以下のメソッドを定義します:

beforeStarted メソッドは play アプリケーションが開始する前、最終的には “before run” タスクが完了した後に呼び出されます。

afterStarted は play アプリケーションが開始した後に呼び出されます。

afterStopped は play アプリケーションが終了した後に呼び出されます。

注意: 以下の例では play の実行フックを使ってコマンドを開始そして終了する方法を解説します。
近い将来、sbt-web は SBT ビルドを Grunt と共に実行するより良い方法を提供します。

さて、アプリケーションを開始する前に grunt で Web アプリケーションをビルドしたいとしましょう。
まず、project/ ディレクトリ内に PlayRunHook を継承する Scala プロジェクトを作る必要があります。
これを Grunt.scala という名前にしましょう:

import play.PlayRunHook
import sbt._

object Grunt {
  def apply(base: File): PlayRunHook = {

    object GruntProcess extends PlayRunHook {

      override def beforeStarted(): Unit = {
        Process("grunt dist", base).run
      }
    }

    GruntProcess
  }
}

それから build.sbt ファイル内にこのフックを登録する必要があります:

import Grunt._
import play.PlayImport.PlayKeys.playRunHooks

playRunHooks <+= baseDirectory.map(base => Grunt(base))

これにより、アプリケーションの開始前に baseDirectorygrunt dist コマンドを実行します。

ここで、grunt watch コマンドを実行してファイルを監視し、変更が発生したら Web アプリケーションをリビルドしたいと思います:

import play.PlayRunHook
import sbt._

import java.net.InetSocketAddress

object Grunt {
  def apply(base: File): PlayRunHook = {

    object GruntProcess extends PlayRunHook {

      var process: Option[Process] = None

      override def beforeStarted(): Unit = {
        Process("grunt dist", base).run
      }

      override def afterStarted(addr: InetSocketAddress): Unit = {
        process = Some(Process("grunt watch", base).run)
      }

      override def afterStopped(): Unit = {
        process.map(p => p.destroy())
        process = None
      }
    }

    GruntProcess
  }
}

アプリケーションが起動するとすぐに grunt watch を実行して、アプリケーションが停止すると grunt プロセスを終了します。build.sbt を変更する必要はありません。

§コンパイラオプションの追加

例えば、feature 警告の詳細を得るために feature フラグを追加したいとします:

[info] Compiling 1 Scala source to ~/target/scala-2.10/classes...
[warn] there were 1 feature warnings; re-run with -feature for details

シンプルに scalacOptions-feature を追加します:

scalacOptions += "-feature"

§アセットディレクトリの追加

例えば、pictures フォルダを追加のアセットディレクトリに含めることができます:

unmanagedResourceDirectories in Assets <+= baseDirectory { _ / "pictures" }

これにより、このフォルダを routes.Assets.at で使うことができます。

§ドキュメントの無効化

コンパイル速度を向上するために、ドキュメントの生成を無効にすることができます:

sources in (Compile, doc) := Seq.empty

publishArtifact in (Compile, packageDoc) := false

一行目はドキュメントの生成を無効化し、二行目はドキュメント成果物の発行を無効にします。

§ivi ログレベル設定

ivyLoggingLevel はデフォルトで UpdateLogging.DownloadOnly に設定されています。この値は以下のように変更することができます:

例えばエラーのみ表示したい場合は、以下のように設定します:

ivyLoggingLevel := UpdateLogging.Quiet

§テストのフォークおよび並列実行

デフォルトでは、並列実行は無効化され、フォークが有効になっています。この振る舞いは parallelExecution in Test および/または fork in Test と設定して変更することができます:

parallelExecution in Test := true

fork in Test := false

Next: ビルドのデバッグ


このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。