§sbt クックブック
§Play の開発モードへのフック
Play が開発モードで実行されている場合、つまり `sbt run` を使用している場合、開発に必要な追加プロセスを起動するためにこれにフックすることが役立つことがよくあります。これは、次のメソッドを持つトレイトである `PlayRunHook` を定義することで実行できます。
beforeStarted(): Unit
- Play アプリケーションが開始される前、ただしすべての「実行前」タスクが完了した後に呼び出されます。afterStarted(): Unit
- Play アプリケーションが開始された後に呼び出されます。afterStopped(): Unit
- Play プロセスが停止した後に呼び出されます。
アプリケーションの開始前に `grunt` を使用して Web アプリケーションをビルドしたいとします。まず、`PlayRunHook` を拡張する Scala オブジェクトを `project/` ディレクトリに作成する必要があります。`Grunt.scala` という名前を付けましょう。
import play.sbt.PlayRunHook
import sbt._
import scala.sys.process.Process
object Grunt {
def apply(base: File): PlayRunHook = {
object GruntProcess extends PlayRunHook {
override def beforeStarted(): Unit = {
Process("grunt dist", base).run
}
}
GruntProcess
}
}
これで、`build.sbt` でこのフックを登録できます。
PlayKeys.playRunHooks += Grunt(baseDirectory.value)
`sbt run` を実行するたびに、アプリケーションが開始される前に `baseDirectory` で `grunt dist` コマンドが実行されます。
変更を監視し、変更が発生したときに Web アプリケーションを再構築するために `grunt watch` コマンドを実行するようにランフックを変更したいので、前に作成した `Grunt.scala` ファイルを変更します。
import play.sbt.PlayRunHook
import sbt._
import java.net.InetSocketAddress
import scala.sys.process.Process
object Grunt {
def apply(base: File): PlayRunHook = {
object GruntProcess extends PlayRunHook {
var watchProcess: Option[Process] = None
override def beforeStarted(): Unit = {
Process("grunt dist", base).run
}
override def afterStarted(): Unit = {
watchProcess = Some(Process("grunt watch", base).run)
}
override def afterStopped(): Unit = {
watchProcess.map(p => p.destroy())
watchProcess = None
}
}
GruntProcess
}
}
`sbt run` を使用してアプリケーションが開始されると、ファイルが変更されるたびに grunt ビルドを再実行するために `grunt watch` が実行されます。
§コンパイラオプションの追加
たとえば、機能警告の詳細を表示する機能フラグを追加する場合があります。
[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` フォルダーを含めることができます。
Assets / unmanagedResourceDirectories += baseDirectory.value / "pictures"
これにより、このフォルダーで `routes.Assets.at` を使用できるようになります。
§外部化リソースの設定
Play 2.4 以降、`conf` ディレクトリの内容はデフォルトでクラスパスに追加されます。
Play アプリケーションを本番環境向けにパッケージ化する場合、`conf` フォルダー(またはその内容)は 2 つの場所に存在できます。
`conf` フォルダーはアプリケーションと一緒に `jar` ファイルにパッケージ化されず、代わりにファイルシステム上の `jar` ファイルの *外側* に残ります。したがって、`conf` フォルダーの内容(例:`application.conf`)を編集し、アプリケーションを再起動すると、変更がすぐに反映されます。アプリケーションを再パッケージ化して再デプロイする必要はありません。これはデフォルトです。
または、`conf` フォルダーの内容を常にアプリケーション `jar` ファイルの *内部* に配置するように Play を設定できます。これは、次のように設定することで実行できます。
PlayKeys.externalizeResources := false
`build.sbt` 内。ライブラリが `conf` フォルダーのリソース(一部)とアプリケーションのクラスファイルを正しく動作するために *同じ* `jar` ファイル内に配置する必要がある場合に、この動作が必要になる場合があります。
Play 2.7 以降、`PlayKeys.externalizeResources := true` の場合でも、特定のリソースを除外して外部化されないようにする別の設定キーがあります。
PlayKeys.externalizeResourcesExcludes += baseDirectory.value / "conf" / "somefolder" / "somefile.xml"
この設定キーのおかげで、一部のファイルのみに必要な場合、`conf` フォルダーのすべてのファイルを `jar` ファイルに配置する必要がなくなりました。
§ドキュメントの無効化
コンパイルを高速化するために、ドキュメントの生成を無効化できます。
Compile / doc / sources := Seq.empty
Compile / packageDoc / publishArtifact := false
最初の行はドキュメントの生成を無効にし、2 番目の行はドキュメントアーティファクトの公開を回避します。
§Ivy ログレベルの設定
デフォルトでは、`ivyLoggingLevel` は `UpdateLogging.DownloadOnly` に設定されています。これは次のように変更できます。
- `UpdateLogging.Quiet` はエラーのみを表示します。
- `UpdateLogging.Full` は最も多くログを出力します。
たとえば、エラーのみを表示したい場合
ivyLoggingLevel := UpdateLogging.Quiet
§テストにおけるフォークと並列実行
デフォルトでは、並列実行は無効で、フォークが有効になっています。`Test / parallelExecution` および/または `Test / fork` を設定することで、この動作を変更できます。
Test / parallelExecution := true
Test / fork := false
次へ: ビルドのデバッグ
このドキュメントにエラーを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、プルリクエストを自由に投稿してください。質問やアドバイスを共有したいですか?コミュニティフォーラムにアクセスして、コミュニティとの会話を始めましょう。