Documentation

§リバースルートの統合

いくつかの状況において、互いに依存していないサブプロジェクト間でリバースルートを共有したくなることがあります。

例えば、web サブプロジェクトと api サブプロジェクト があるとします。web プロジェクトは api プロジェクトへのリンクを (AJAX 呼び出しのために) レンダリングする一方で、api プロジェクトは web へのリンク (JSON 内のリソースに対する web リンク) をレンダリングすることを除いては、これらのサブプロジェクトはお互いに依存関係を持ちません。このような場合、リバースルータを使うと便利ですが、これらのプロジェクトはお互いに依存していないため、使えません。

Play のルートコンパイラには、共通の依存性がこれに依存するプロジェクト用にリバースルータを生成できるようにすることで、これらのプロジェクト間でリバースルートを共有できるようにする機能があります。以下のように、aggregateReverseRoutes sbt 設定項目を使って設定することができます:

lazy val common: Project = (project in file("common"))
  .enablePlugins(PlayScala)
  .settings(
    aggregateReverseRoutes := Seq(api, web)
  )

lazy val api = (project in file("api"))
  .enablePlugins(PlayScala)
  .dependsOn(common)

lazy val web = (project in file("web"))
  .enablePlugins(PlayScala)
  .dependsOn(common)

上記のセットアップでは、apiweb に対するリバースルートは common プロジェクトの一部として生成されます。apiweb に対するリバースルータは依存する common プロジェクトにて既に生成されているため、生成する必要はなく、apiweb 用のリバースルータではなくフォワードルータが生成されます。

common プロジェクトは明示的に Project 型と宣言されていることに注意してください。dependes メソッドと aggregateReverseRoutes 設定によって、api および web プロジェクト間には再帰的な依存関係があるため、Scala の型チェッカは再帰チェーン内にどこかにおいて、明示的な型を必要とします。

Next: コンパイル時間の改善


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