souki-paranoiastのブログ

地方都市でプログラマーをやっている人のブログ。技術ネタ以外も少し書く。メインの言語はJava。https://paranoiastudio-japan.jimdo.com/ に所属

Scala + Playframeworkを試してみる

仕事で本当にちょっとしたアプリを作成するのにScalaを使いたくて、Scala + Play2 Frameworkを試してみた。 なので時間をかけたくないという前提です。最新のScala 2.12.8 + Play2 Framework 2.7.x を試した結果は途中までやって諦めました。でも結構時間かかったので最後にそのログを残しておく(>_<) 実際に作成したアプリでは最新バージョンは使用していないです。。

用意

  1. こちらにアクセスし、Starting the projectのScalaのファイルを落として展開する。 https://www.playframework.com/documentation/2.6.20/HelloWorldTutorial

  2. IntelliJのプロジェクト作成でsbt(Play2.xではない)を選択し、versionは2.6.20を選択して作成。

  3. プロジェクト構成を、↓のリンク通りに作成する https://www.playframework.com/documentation/2.6.20/Anatomy この時、公式のStartingProjectのフォルダからコピーする形にすると良い。不要なものもいくつかあるため、最小構成なら消すと良い

build.sbt

name := "Play2Sample2"
version := "0.1"
scalaVersion := "2.12.8"
lazy val root = (project in file(".")).enablePlugins(PlayScala)
libraryDependencies ++= Seq(
  guice
)

build.properties

sbt.version = 1.2.7

plugins.sbt

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.6.20")

プロジェクト構成 f:id:souki-paranoiast:20181216162004p:plain

実行

Intellij なら sbt shellからrunコマンドを実行してhttp://localhost:9000にアクセス

補足

多分これが一番楽だと思います。素直に公式(推奨?)のsbt new playframework/play-scala-seed.g8を使うべきかと まだ理解していないが、とりあえずサンプルの中で必要なのクラスはModuleクラスだけかな。Filterクラスはapplication.confのplay.filters.enabledの記述から消してしまえばクラスも消して良いはず プロジェクトを作ってみただけなので今度は試してみたい。

諦めたログ

Scala + Playframeworkの作成手順

こちらを参考にしつつ

qiita.com

プロジェクト作成

sbtはインストール済みなので、

mkdir newProject
cd newProject
sbt new playframework/play-scala-seed.g8

を実行する。

…ログを見るとScala2.10とかがDLされてる…?意図しているのは2.12.Xあたりなのでこれはよろしくない。

project/build.propertiesの作成

sbtのバージョンを指定してあげる(sbtが最適な(?)Scalaのバージョンを選択してくれる模様。調査と理解不足)。

mkdir project
echo "sbt.version=1.2.7" > project/build.properties
sbt new playframework/play-scala-seed.g8
:
:
:
name [play-scala-seed]: new-project-name
organization [com.example]: com.github.souki-paranoiast

これでOK

実行

sbtを起動

cd  new-project-name
sbt

初回ダウンロードの後にsbtが起動するので

run

そして、http://localhost:9000/ にアクセス。 動かない。

Unexpected exception
IOException: Cannot run program "javac" (in directory "C:\Program....."): CreateProcess error=2, 指定されたファイルが見つかりません。

この原因は、Windows10環境のGit Bushでシンボリックリンクを使用していたからだと思う。起動する際にちゃんとした絶対パスで飛んだらこのエラーは無くなった。

IO error while decoding C:\Users... \ReverseRoutes.scala with UTF-8: C:\Users... \ReverseRoutes.scala (指定されたファイルが見つかりません。)
Please try specifying another one using the -encoding option

別のエラーが出た。UTF-8で読み込めと言われているっぽい。 sbtの起動に関して諸々問題がある模様↓とかで他にも言及されている。

seri.hatenablog.com

とりあえずの解決策で言うと、インストール先(ここではデフォルトのはず)に、以下のファイルがあり、

C:\Program Files (x86)\sbt\conf\sbtconfig.txt

末尾とかに以下の1行を追加してあげればOK。

-Dfile.encoding=UTF-8

…OKなんだけど、GitBush と コマンドプロンプトで実行結果が異なる。 コマンドプロンプトなら動くので、UTF-8になるのでこちらで進める。 sbt runを実行。動かない。

疲れてきた。 ここまでログ。 多分もう少し粘ればできたんだろうけど。