LoginSignup
2
3

More than 3 years have passed since last update.

[Play Framework 2.7] Play Framework2.7(Scala)をステップ実行できるようにするまで。

Last updated at Posted at 2019-06-01

環境構築法

色んなサイトで環境構築方法が記載されていますが、
今回は「ここを見ればPlay Frameworkをステップ実行できる。」
というところまでの環境構築法を記載していきます。

環境構築の前提

下記条件で環境構築で行います。
主にWindows上だけで環境構築を行います。

ホストOS
  • Windows 10
  • ScalaIDE-4.7.0
    • EclipseをベースにしたScala用IDE
    • Eclipseベースなだけあって非常に重い、使いにくい、出来れば使いたくない!
  • Chocolatey
    • Windows用パッケージ管理ソフトで非常に便利
筆者の能力
  • 過去にPlay Framework 2.5以前を使った経験あり。
  • Activatorを使っていたが、数年経った現在sbtに置き換わり完全浦島太郎状態。
ここでは伝えない事
  • Chocolateyのインストール方法 ... こちらのサイト が詳しく載せてくれています。
  • Eclipseの使い方 ... Eclipseに対してPlayFrameworkアプリのインポートやデバッグ方法は伝えるが、Eclipseの使い方を伝える為のページではない。

以下環境構築方法

必須アプリのインストール

Chocolateyを使用して、下記アプリをインストールします。

  • jdk8 (現在Ver 8.0.211) ... Java SE Development Kit 8(Javaアプリ開発時に必須のキット)
  • sbt (現在Ver 1.2.8) ... Scalaのビルドツールでありパッケージ管理ソフト(間違ってたらごめんなさい。)

管理者モードのコマンドプロンプトから主にコマンドを実行していきます。

Windows上で Winキー + R でファイル名を指定して実行が出来ます。
ここで cmd と入力した後、 Ctrl + Shift + Enter を押下すると、管理者モード でコマンドプロンプトを立ち上げる事が出来ます。

その後下記コマンドを実行しましょう。

コマンドプロンプト(管理者モード)
Microsoft Windows [Version 10.0.18362.113]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Windows\system32> cinst -y sbt jdk8

これでインストールは完了ですが、jdk8でsbtを立ち上げる度に下記警告が出るようになります。
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=256M; support was removed in 8.0

その為、C:\Program Files (x86)\sbt\conf\sbtconfig.txt を書き換えましょう。

sbtconfig.txt
# Set the java args to high
-Xmx512M
# -XX:MaxPermSize=256m (この行をコメントアウト!!!!)
-XX:ReservedCodeCacheSize=128m

# Set the extra SBT options
-Dsbt.log.format=true

Play Framework用のテンプレートの作成

コマンドプロンプトを再立ち上げ後、
sbt new コマンドを実行してplay frameworkのテンプレートを指定します。
※下記パスは一例です。任意のパスで問題ありません。

コマンドプロンプト
Microsoft Windows [Version 10.0.18362.113]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Windows\system32> cd c:\Users\User
C:\Users\User> mkdir scala
C:\Users\User> cd scala

C:\Users\User\scala> sbt new playframework/play-scala-seed.g8
[info] Set current project to scala (in build file:/C:/Users/User/scala/)
[info] Set current project to scala (in build file:/C:/Users/User/scala/)

This template generates a Play Scala project

name [play-scala-seed]: <何も入力せずEnter>
organization [com.example]: <何も入力せずEnter>

すると 場合によっては下記例外が出ると思いますが、こちらによると どうもみんな同じ問題に直面しているようですが、内容的に問題ないようです。

コマンドプロンプト
java.io.IOException: Unable to delete file: C:\Users\User\AppData\Local\Temp\giter8-xxxxxxx\src\main\g8\.gitignore
<<中略>>
[error] java.io.IOException: Unable to delete file: C:\Users\User\AppData\Local\Temp\giter8-5858236389700\src\main\g8\.gitignore
[error] Use 'last' for the full log.

環境によっては sbt newコマンドで非常に時間がかかる可能性があります。

以上でテンプレートの作成は終わりです。

Play Frameworkの動作確認

コマンドプロンプトから sbt run コマンドを入力して、
作成したPlay Frameworkのアプリが動作するか確認しましょう。

コマンドプロンプト
Microsoft Windows [Version 10.0.18362.113]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Windows\system32> cd c:\Users\User\scala\play-scala-seed
c:\Users\User\scala\play-scala-seed> sbt run

sbt run がPlayサーバーの実行です。
コマンドの詳細は 先ほども載せたこちらのサイト が詳しくまとめて下さっています。
またこの sbt run コマンドは 初回実行時、必要なプラグインを自動でダウンロードします。
これには 非常に時間がかかりますので、気長に待ちましょう。

下記ログが表示されれば成功です。

コマンドプロンプト
--- (Running the application, auto-reloading is enabled) ---

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

(Server started, use Enter to stop and go back to the console...)

ブラウザから http://localhost:9000にアクセスしてみて動作するか確認してみて下さい。
※こちらも初回アクセス時、PC環境によっては非常に時間がかかります。
「Welcome to Play!」と表示されれば成功です。
play001.png

以上が動作確認です。
CTRL + D でサーバーを終了させましょう。

Play Framework用のテンプレートの書き換え。

Eclipseのプロジェクトを作成するための準備をする。

Eclipseからプロジェクトをインポート出来るようにします。
まず play frameworkアプリ(play-scala-seed)のパス内に play-scala-seed\project\plugins.sbt を開け、
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.2") を追加します。

play-scala-seed\project\plugins.sbt
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.7.2")
addSbtPlugin("org.foundweekends.giter8" % "sbt-giter8-scaffold" % "0.11.0")
// 下記行を追加
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.2")
Eclipse上で表示されるviews.htmlのエラーを非表示にする。

次に play-scala-seed\build.sbtEclipseKeys.preTasks := Seq(compile in Compile, compile in Test) を加えます。

play-scala-seed\build.sbt
EclipseKeys.preTasks := Seq(compile in Compile, compile in Test) // 追加
resolvers += "scalaz-bintray" at http://dl.bintray.com/scalaz/releases"

これを行うことで、将来的に
object ***** is not a member of package views.html.*****.scala というEclipse上で表示されるエラーを非表示にする事が出来ます。

詳細は下記サイトをご確認下さい。

Eclipseプロジェクトを作成する。

その後、下記コマンドを実行します。
こちらのページ に詳しく記載されています。

コマンドプロンプト
c:\Users\User\scala\play-scala-seed> sbt

[info] Loading settings for project play-scala-seed-build from plugins.sbt ...
<中略 多少時間がかかる。>

[play-scala-seed] $ eclipse with-source=true

<中略 結構時間がかかる。>
[info] Successfully created Eclipse project files for project(s):
[info] play-scala-seed

[play-scala-seed] $ exit

これでEclipseのプロジェクトが作成されました。

ScalaIDEをセットアップする。

こちらのサイト からダウンロードします。
ダウンロード完了後、解凍して、eclipse.exeを起動します。

初回起動時、下記パスが出ますが、そのままで問題ありません。

play002.png

Launchを押下しましょう。

起動が終わったら File -> Import を押下します。
play003.png

その後、General -> Existing Projects into Workspace を選択後、ダイアログ下部の Next を押下します。
play004.png

その後、右上のBrowseから c:\Users\User\scala\play-scala-seed を選択し ダイアログ下部の Finish を押下しましょう。
play005.png

以上でScalaIDEにProjectをインポートする事できました。

Scala IDEでプロジェクトのデバッグ設定を行う。

画面上部の Run -> Debug Configurations... を選択します。
その後、Remote Java Application をダブルクリックし、
画面下部のように設定します。
play006.png

次に Revert の左にある Select one... を押下し
Use configuration specific settigs にチェックを入れ、
Scala Remote Launcher を選択し、ダイアログ下部の OK を押下します。
play007.png

その後、 Apply を押下します。

ブレークポイントで処理を止めよう。

コマンドプロンプトから下記コマンドを入力します。
sbt run -jvm-debug 9999

コマンドプロンプト
C:\Users\User\scala\play-scala-seed> sbt run -jvm-debug 9999

すると下記ログが表示されます。

コマンドプロンプト
Listening for transport dt_socket at address: 9999
<中略>
(Server started, use Enter to stop and go back to the console...)

この状態で下記 ScalaIDEからブレークポイントを仕掛けます。

  • 必ずsbt run -jvm-debug 9999コマンドを入力後、下記ScalaIDEの操作を行うように下さい。

赤枠部分をダブルクリックするとブレークポイントを仕掛ける事が出来ます。
play008.png

次にデバッグを実行します。
画面上部の虫マークの下矢印マークを押下し、その中にある play debug を選択します。
play009.png

この際にEclipseからエラーが表示された場合は何かしら間違っている可能性があります。

それではブレークポイントで処理が止まるか確認しましょう。
http://localhost:9000にアクセスし、ScalaIDEで処理が止まるか確認します。

無事ブレークポイントで処理が止まれば成功です。

エラーが発生した場合

Scala コードにブレークポイントを設定できない。

chocolateyからインストールしたEclipseだと何故かScalaコードに対してブレークポイントを設定できませんでした。
設定がおかしいのか、ScalaIDEプラグインのインストール失敗しているのか全く以て不明ですが、とりあえず無難にScalaIDEに関してはインターネット上からダウンロードした実行ファイルから動作させた方が無難です。

ScalaIDEからデバッグを開始すると下図エラーが出る。

play010.png
このエラーのだいたいの問題点は下記4点のうちどちらかです。

  • ScalaIDEのデバッグ設定 が間違っている。
  • sbtコマンド が間違ってる。
  • sbtコマンド実行前にEclipseからデバッグをしようとした。
  • Eclipseからデバッグを止めたはずなのに、デバッグポートが開きっぱなしになっている。
    その場合Eclipseを再起動する。

特にsbtコマンドに関しては、

  • 〇 ... sbt run -jvm-debug 9999 これが正しいコマンドです。
  • × ... sbt -jvm-debug 9999 run このように 順番を入れ替えると正しく動作しません。

以上でステップ実行が出来るようになりました。
しかしながらまだEclipse上では気になる問題点が残っています。

EclipseからScalaのコンパイルエラーを削除する。

Eclipse上からProblemsウィンドウを見るとErrorがいくつか残っていますが、下記手順を踏むことで消すことが可能です。
※Eclipse上での見栄えの問題なので気にならない人は無視してもらってよいです。

build path is cross-compiled with an incompatible version of Scala

こちらのサイト を参考に設定すると良いです。
主に下記設定を変更します。
Window -> Preferences -> Scala -> Compiler -> Build manager[Tab] -> withVersionClasspathValidator のチェックボックスを OFF にし、 Apply and Close で設定を適用します。

play cannot find any http request here

ActionのrequestをFormのbindFromRequestに設定する際に、
implicit で暗黙的に設定するようになっている場合、
型情報が宣言されていないと、Eclipse上でエラーとなります。
sbt run では問題なく動作する為、必要に感じない人は修正しなくてもよいです。

詳細はこちらを参照して下さい。

その為、下記のようなコードがあった場合、

def loginA = Action.async { implicit request => 
  Forms.form.bindFromRequest.fold( ...

下記のように型情報を加えるとEclipse上でのエラーが消えます。

def loginA = Action.async { implicit request : Request[AnyContent] => 
  Forms.form.bindFromRequest.fold( ...

環境構築終了

以上が環境構築方法になります。

もし何かしら間違いや誤りなどありましたらご指摘お願いします。
またコメントやこうしたら良いよみたいなアドバイスがあればコメントいただけると嬉しいです。

参考URL

アプリに関して

Chocolateyに関して

Scala や sbtのコマンドに関して

Play Frameworkに関して

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3