Play 2.5.x + Slick 3.1.x の手順をベースに「Play 2.8.x + Slick 3.3.2+(Play Slick 5.0.x)」の組み合わせでやってみた。
実装したものはこちら
バージョンを変えたことによってそのまま動かなかった箇所がいくつかあったので、メモとして残す。
プロジェクトの作成
Playの雛形作成は下記で2.8系を選択。
$ sbt new playframework/play-scala-seed.g8 --branch 2.8.x
build.sbt
の記述の追記も合わせて変更している。
// ↓↓↓↓ここから追加↓↓↓↓ libraryDependencies ++= Seq( "com.h2database" % "h2" % "1.4.193", "com.typesafe.play" %% "play-slick" % "5.0.0", "com.typesafe.play" %% "play-slick-evolutions" % "5.0.0" ) // ↑↑↑↑ここまで追加↑↑↑↑
DBの準備
- H2がJDK11では動かず、JDK1.8環境に戻す必要があった
- イントロダクションではJDK1.7以降と書いてあったので油断してた…
DB接続の設定
slick.dbs.default.driver
がdeprecatedになっていたのでslick.dbs.default.profile
に変更
slick.dbs.default.profile="slick.jdbc.H2Profile$"
実装
UserControllerの雛形
package controllers import models.Tables._ import play.api.data.Forms._ import play.api.data._ import play.api.db.slick.{DatabaseConfigProvider, HasDatabaseConfigProvider} import play.api.mvc._ import slick.jdbc.H2Profile.api._ import slick.jdbc.JdbcProfile import javax.inject.Inject import scala.concurrent.{ExecutionContext, Future} class UserController @Inject()(implicit ec: ExecutionContext, val dbConfigProvider: DatabaseConfigProvider, components: MessagesControllerComponents) extends MessagesAbstractController(components) with HasDatabaseConfigProvider[JdbcProfile] { /** * 一覧表示 */ def list = TODO /** * 編集画面表示 */ def edit(id: Option[Long]) = TODO /** * 登録実行 */ def create = TODO /** * 更新実行 */ def update = TODO /** * 削除実行 */ def remove(id: Long) = TODO }
play.api.libs.concurrent.Execution
がdeprecatedscala.concurrent.ExecutionContext
へ修正
play.api.i18n.MessagesApi
がdeprecatedMessagesControllerComponents
、MessagesAbstractController
へ修正
slick.driver.JdbcProfile
がdeprecatedslick.jdbc.JdbcProfile
へ修正
JsonControllerの実装
package controllers import controllers.JsonController._ import models.Tables import models.Tables._ import play.api.db.slick._ import play.api.libs.functional.syntax.{toFunctionalBuilderOps, unlift} import play.api.libs.json._ import play.api.mvc.{AbstractController, Action, AnyContent, ControllerComponents} import slick.jdbc.H2Profile.api._ import slick.jdbc.JdbcProfile import javax.inject.Inject import scala.concurrent.{ExecutionContext, Future} class JsonController @Inject()(implicit ec: ExecutionContext, val dbConfigProvider: DatabaseConfigProvider, cc: ControllerComponents) extends AbstractController(cc) with HasDatabaseConfigProvider[JdbcProfile] { /** * 一覧表示 */ def list = TODO /** * ユーザ登録 */ def create = TODO /** * ユーザ更新 */ def update = TODO /** * ユーザ削除 */ def remove(id: Long) = TODO }
変更点はUserControllerの修正とほぼ同じだが下記のみ異なる
Controller
が利用できなくなっているControllerComponents
、AbstractController
へ修正
参考
- ライブラリのバージョン参考
- Play 2.5.xのコードを2.8.xで動かすときのマイグレーション参考
- JsonControllerのコンパニオンオブジェクトがうまく動かなかった