Scala + Play Frameworkの環境構築メモ
Scalaの勉強しようと思って、せっかくだからPlay Frameworkも試そうとしたときのメモ。
調べるのに時間かかってるので、まだコード書けてない。
かなり雑だけど、自分用に残しておく。
Play Frameworkバージョン
- 2.5.14
インストール
https://www.playframework.com/documentation/2.5.x/Installing
Java 1.8
http://www.oracle.com/technetwork/java/javase/downloads/index.html
sbt
Homebrew
$ brew install sbt
Application作成
$ sbt new playframework/play-scala-seed.g8
色々聞かれるけど、name
とorganization
だけ設定して残りは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するやつ
今のところは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
デプロイ
まだ調べられてない。後で調べる。
まとめ
初めてやることは色々と大変。