ScalaDay 8

Scala + PlayFramework + ScalikeJDBC + Flyway + (Scala-logging) on Heroku + PostgreSQL

More than 3 years have passed since last update.

この記事は「Scala Advent Calendar 2014」の8日目の記事になります。

少々推敲できていませんが、お気づきの点があればコメントなどいただけると嬉しいです・・・。


概要

Scalaを利用して個人的に開発効率の高そうな組み合わせ(個人的な好み含む)の骨組みの作り方を記述します。

ごく一般的なWebアプリケーションを作成する際に利用できるかと。


はじめに

事前に以下のものがインストールされ、パスが通っていること。


  • Typesafe Activator

  • git(herokuを利用する場合)

  • heroku toolbelt (herokuを利用する場合)


テンプレート作成


Activator UI の起動

※ 以下Windows想定ですが、Linux、Macでもほぼ同じように実行できるかと思います。


以下を実行し、activator uiを起動する

activator ui


Playのプロジェクトを作成する

Play Scala Seedを選択し、保存先を選択し、createを押下しプロジェクトを作成する。

だーっとログが流れますのでじっと待ちましょう。。。

画面が遷移したらプロジェクト作成完了です。


ScalikeJDBC の依存関係を追加する


build.sbtに以下を追加する

"org.scalikejdbc"  %%  "scalikejdbc"  %  "2.2.0",

"org.scalikejdbc" %% "scalikejdbc-play-plugin" % "2.3.4",
"org.scalikejdbc" %% "scalikejdbc-play-fixture-plugin" % "2.3.4", // optional
"com.h2database" % "h2" % "1.4.182"


Flyway の依存関係を追加する


build.sbtに以下を追加する。

"com.github.tototoshi"  %%  "play-flyway"  %  "1.1.3"


Scala-Logging の依存関係を追加する。


build.sbtに以下を追加する。

"com.typesafe.scala-logging"  %%  "scala-logging"  %  "3.1.0",

"org.slf4j" % "slf4j-api" % "1.7.7",
"ch.qos.logback" % "logback-classic" % "1.1.2"


PostgreSQL の依存関係を追加する


build.sbtに以下を追加する

"org.postgresql"  %  "postgresql"  %  "9.3-1102-jdbc41"


ここまで追加したbuild.sbtは以下の様なイメージになります

(snip)

libraryDependencies ++= Seq(
jdbc,
anorm,
cache,
ws
)

libraryDependencies ++= (Seq(
"org.postgresql" % "postgresql" % "9.3-1102-jdbc41"
) ++ Seq( // scalikeJDBC
"org.scalikejdbc" %% "scalikejdbc" % "2.2.0",
"org.scalikejdbc" %% "scalikejdbc-play-plugin" % "2.3.4",
"org.scalikejdbc" %% "scalikejdbc-play-fixture-plugin" % "2.3.4", // optional
"com.h2database" % "h2" % "1.4.182"
) ++ Seq( // flyway
"com.github.tototoshi" %% "play-flyway" % "1.1.2"
) ++ Seq( // scala-logging
"com.typesafe.scala-logging" %% "scala-logging" % "3.1.0",
"org.slf4j" % "slf4j-api" % "1.7.7",
"ch.qos.logback" % "logback-classic" % "1.1.2"
))


application.confの修正


アプリケーションのlangの変更

application.langs="en"


application.langs="ja"


開発時はh2dbを利用するための設定

db.default.driver=org.h2.Driver # DEV

db.default.url="jdbc:h2:mem:play;MODE=PostgreSQL;DB_CLOSE_DELAY=-1" # DEV
db.default.user="" # DEV
db.default.password="" # DEV

db.default.user=${?DB_USER}
db.default.password=${?DB_PASS}


evolution pluginの無効化

evolutionplugin=disabled


標準のdbpluginの無効化

dbplugin=disabled


Flywayのmigration設定

db.default.migration.validateOnMigrate=false // true by default

db.default.migration.initOnMigrate=true
db.default.migration.auto=true


flywayのマイグレーション用sqlファイルの配置

/conf/db/migration/default 配下にsqlファイルを配置する。


例)V0.0.1__first_create.sql のようなファイルを配置

-- members

create table members (
id serial not null primary key,
name varchar(64),
created_at timestamp not null
);


play.pluginsの作成

ファイル内は以下のように記述します

1000:com.github.tototoshi.play2.flyway.Plugin

10500:scalikejdbc.PlayPlugin

11000:scalikejdbc.PlayFixturePlugin


アプリケーションをgitにコミットする

git init

git add .
git commit -m "init"


Heroku 上で新規アプリケーションを作成する

heroku create {appname}


Heroku 上へpushする

git push heroku master


アプリケーションへアクセスする

以下のURLでアクセスする

https://{appname}.herokuapp.com/

おめでとうございます。

表示できましたね!!!


おまけ


eclispeのプロジェクトとして認識させる

プロジェクトのディレクトリにコマンドプロンプトで移動し、以下のコマンドを実行する。

activator.bat

> eclipse with-source=true