Scala+PlayFramework+Heroku をやろうとしてうまくいってない

2/20現在の状況で、WEBアプリのお勉強がてらタイトルのことをやってみたときのメモ

前提

以下の環境

  • Mac Book Pro 2017
  • Homebrew導入済
  • git 導入済
  • Herokuアカウント取得済
  • IntelliJ インストール済

Scalaのインストール

svmの導入

バージョン管理もしたいので 下記のブログにあるようにsvmを導入

yuroyoro.hatenablog.com

基本的にはgitクローンしとけばいい

git clone https://github.com/yuroyoro/svm.git

Scalaにupdate入ったなーというタイミングで更新(されてなかったらfork pull requestしような)して、再配置。配置箇所は一応使いやすいところ

/usr/local/bin/svm とかにしておくといい。コピーした場合は chmod 755 しとくこと

Scalaのバージョン確認とインストール

公式サイトで最新バージョンの確認

https://www.scala-lang.org

svm install 2.12.8

これだけ。終わったら動作確認はこんな感じ

$ scala
Welcome to Scala 2.12.8 (Java HotSpot(TM) 64-Bit Server VM, Java 10.0.1).
Type in expressions for evaluation. Or try :help.

scala> :q

起動時にバージョンが表示されているので狙ったバージョンで起動できていることを確認。

REPLから抜けるには :q で。困ったら :help

sbtのインストール

brew install sbt@1

※ 参考リンク

sbt - Download

終わったら sbt aboutで、バージョン確認(上記URLの最新になっているはず)

Play Frameworkを試してみる

こういうときは一度公式をちゃんと見よう!見ないでQiitaだけ見てたら古い記事の罠でEOLのものを使ってたりするからね!(しっかりハマりました)

Getting Started with Play Framework

任意のディレクトリで

sbt new playframework/play-scala-seed.g8

途中、下記を聞かれるが、気にしないでEnterで平気

This template generates a Play Scala project

name [play-scala-seed]:
organization [com.example]:

上で指定したディレクトリが作成されているので、移動してからsbt run

しばらく待ったああとに、起動したら

http://localhost:9000

にアクセスすれば、WelcomePageが表示される

IntelliJ で設定

作成したプロジェクトかをインポートするだけ。簡単!

IntellJでエラーページからソースコードへダイレクトに飛べるらしい。なので以下の設定をしておく

conf/application.confに以下を追加 play.editor="http://localhost:63342/api/file/?file=%s&line=%s"

build.sbt に以下を追加

fork := true // required for "sbt run" to pick up javaOptions

javaOptions += "-Dplay.editor=http://localhost:63342/api/file/?file=%s&line=%s"

反映されるか試してみる

app/views/index.scala.html

@()

@main("Welcome to Play") {
  <h1>Welcome to Play!</h1>
  <h2>Edit Sample</h2>   <- 追加
}

終わったらhttp://localhost:9000 にアクセスしてみると変更が反映される

※ RELOADに数秒かかるので、ちょっとだけ待ったほうがいい

herokuにデプロイしてみる

まぁ、いつものやりかたで。(heroku create とかしてくやつ)

Not a supported Play version: 2.7.0. This plugin is compatible with: [PLAY_2_2_X, PLAY_2_3_X, PLAY_2_4_X, PLAY_2_5_X, PLAY_2_6_X].

Gradleでこのエラーが。まじで。最新サポートされてないじゃん

ハマったこと

PlayFrameworksのバージョン

バージョンが古いものとか新しいもので使うものが違ってた点。特に最新はsbtしか対応していないという点

HerokuがサポートしているPlayFrameworkのバージョン

2.6までだった。 最新が2,7でこれ使ってローカルとかやってたから、めっちゃハマった。最新使えないのはちょっと考えものか、もしくはある程度枯れた技術で安定稼働できるかという利点があるんだろうけど、とりあえず最新でやってみるか精神だとハマる

次のトライ

Heroku上で動かせるようにするを目標に、チュートリアルしてみる