読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

Scala + Play Frameworkの環境構築メモ

Scalaの勉強しようと思って、せっかくだからPlay Frameworkも試そうとしたときのメモ。

調べるのに時間かかってるので、まだコード書けてない。

かなり雑だけど、自分用に残しておく。

Play Frameworkバージョン

  • 2.5.14

インストール

https://www.playframework.com/documentation/2.5.x/Installing

Java 1.8

Oracleからダウンロードしてインストール

http://www.oracle.com/technetwork/java/javase/downloads/index.html

sbt

Homebrew

$ brew install sbt

Application作成

$ sbt new playframework/play-scala-seed.g8

色々聞かれるけど、nameorganizationだけ設定して残りはEnterでデフォルトで。

name [play-scala-seed]: todo
organization [com.example]: com.star_zero
scala_version [2.11.11]:
scalatestplusplay_version [2.0.0]:
play_version [2.5.14]:

この場合は、todoって名前にしたのでtodoってフォルダができてる。targetってフォルダもできてるけどこれは何だろ?

カレントディレクトリを移動しておく

$ cd todo

起動

とりあえず、起動してみる

$ sbt run

結構な時間かかる。次のように表示されたら起動された。

--- (Running the application, auto-reloading is enabled) ---

[info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)

http://localhost:9000/ にアクセスしてみる

IntelliJ IDEAにインポート

基本的にここのとおり

インポートしたらまたしばらく時間かかる

ログ

conf/logback.xmlで設定

とりあえず、デバッグ用に<root level="WARN"><root level="DEBUG">にすると色々とログが出る。

DBとかORMとかMigrationとか

SlickじゃなくてScalikeJDBCが扱いやすいって教えてもらったので、そのようにしてる。実際ちょっと試した感じSlickはよく分からんかった…

ScalikeJDBC

DBアクセスライブラリ

http://scalikejdbc.org/documentation/playframework-support.html

PostgreSQLの場合

  • build.sbt
libraryDependencies ++= Seq(
  "org.postgresql" % "postgresql" % "42.0.0",
  "org.scalikejdbc" %% "scalikejdbc" % "2.5.2",
  "org.scalikejdbc" %% "scalikejdbc-config" % "2.5.2",
  "org.scalikejdbc" %% "scalikejdbc-play-initializer" % "2.5.1",
)
  • conf/application.conf
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost/hoge"
db.default.username=hoge
db.default.password=hoge

scalikejdbc.global.loggingSQLAndTime.enabled=true
scalikejdbc.global.loggingSQLAndTime.singleLineMode=false
scalikejdbc.global.loggingSQLAndTime.logLevel=debug
scalikejdbc.global.loggingSQLAndTime.warningEnabled=true
scalikejdbc.global.loggingSQLAndTime.warningThresholdMillis=5
scalikejdbc.global.loggingSQLAndTime.warningLogLevel=warn

play.modules.enabled += "scalikejdbc.PlayModule"

SkinnyORM

ScalikeJDBCをActiveRecordっぽく使えるようにするやつ

http://skinny-framework.org/documentation/orm.html

  • build.sbt
libraryDependencies ++= Seq(
  "org.skinny-framework" %% "skinny-orm"      % "2.3.6",
  "ch.qos.logback"       %  "logback-classic" % "1.1.+"
)

Flyway

DB Migrationするやつ

https://flywaydb.org/

今のところはPlay用のプラグインあるけど使わない方向で。実行タイミングとかは自分でコントロールしたい感じなので。ただデプロイとか考えるとやっぱりプラグインとかになりそうな感じもある。

https://flywaydb.org/documentation/sbt/

  • project/plugins.sbt
addSbtPlugin("org.flywaydb" % "flyway-sbt" % "4.2.0")
resolvers += "Flyway" at "https://flywaydb.org/repo"
  • build.sbt

たぶん環境変数とかでやったほうが良いと思うけど、とりあえず。

flywayUrl := "jdbc:postgresql://localhost/hoge"
flywayUser := "hoge"
flywayPassword := "hoge"
flywayLocations := Seq("filesystem:conf/db/migration") // migrationファイルがある場所
  • migrationファイル

とりあえずサンプル。conf/db/migrationに配置。ファイル名はV1__Add_todo_table.sql

ファイル名の命名とかはここのNamingを参照。

CREATE TABLE todo (
  id VARCHAR(64) PRIMARY KEY,
  title VARCHAR(256) NOT NULL
);
  • 実行
$ sbt flywayMigrate

デプロイ

まだ調べられてない。後で調べる。

まとめ

初めてやることは色々と大変。