2013-12-23

Play + Scala + Slick

PlayのDAOは、2.2まではAnormを使用するのが標準ですが、2.3からSlickに変わるらしい。
また、AnormはSQLをそのまま記述することを基本としているので、ORMに慣れきった僕にはORMであるSlickのほうが楽そうってことで、Slickを使うようにプロジェクトの設定を変更する。

参考にしたのはこの記事。

Playの初歩とSlickAdd Star

PlayFrameworkerのisobeです。Scala面白いです。

Play使い始めてしばらくDAO周りでAnormを使ってたのですがノーテーションが冗長すぎて辛いのでSlick(旧ScalaQuery)に乗り換えました。今最新のPlay2.2を使ってるのですが次期2.3では標準ORM(というかDAO)がAnormからSlickに置き変わる予定だそうです。(ってことをSlick使い始めてから知りました)

ライブラリの設定をbuild.sbtにしますが、とりあえず丸パクリ。
libraryDependencies ++= Seq(
  jdbc,
  anorm,
  cache,
  "mysql" % "mysql-connector-java" % "5.1.18",
  "com.typesafe.slick" %% "slick" % "1.0.1",
  "com.typesafe.play" %% "play-slick" % "0.5.0.8",
  "commons-dbcp" % "commons-dbcp" % "1.4")
コネクションの設定はapplication.confですが、こちらは接続先がCloudBeesのDBになるので、CloudBees側の設定に合わせて以下の感じ。
slick.default="models.*"
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:"${MYSQL_URL_MYDB}
db.default.user=${MYSQL_USERNAME_MYDB}
db.default.password=${MYSQL_PASSWORD_MYDB}

あとは、モデル作ってテーブルの生成やらなんやら試そうかってところだけど、IDEAの機能で作ったPlayのプロジェクトがなんか色々微妙な模様。
雛形として形はできているけど、ディレクトリの意味付けがついてないし、新規にScalaオブジェクトを作れる状態じゃなかった。
初期設定的にまずかったのか、機能が不完全なのか不明。
とりあえず、CloudBeesで作られたgitリポジトリからPlayの初期プロジェクトをcloneして、play ideaして使えば大丈夫みたい。

というわけで、application.confの変更は不要になり、build.sbtの代わりにBuild.scalaを編集。
import sbt._
import Keys._
import play.Project._

object ApplicationBuild extends Build {

    val appName         = "playsignage"
    val appVersion      = "1.0"

    val appDependencies = Seq(
      // Add your project dependencies here,
      "mysql" % "mysql-connector-java" % "5.1.21",jdbc, anorm,
      cache,
      "com.typesafe.slick" %% "slick" % "1.0.1",
      "com.typesafe.play" %% "play-slick" % "0.5.0.8",
      "org.slf4j" % "slf4j-nop" % "1.6.4",
      "commons-dbcp" % "commons-dbcp" % "1.4"
    )

    val main = play.Project(appName, appVersion, appDependencies).settings(
      // Add your own project settings here      
      testOptions in Test += Tests.Argument("junitxml", "console")
    )

}
てな感じでどうだろうか?

ここまで設定を直してplay ideaをやり直せば、ideaプロジェクトのライブラリ設定に反映されました。

0 件のコメント: