play-logo

その4で API の実装と動作の確認まで行いました。その5では、最後にデバッグのフローと注意点についてまとめます。

デバッグのフローについて

まず、サーバーを止めてターミナルで9000番ポートを指定し、デバッグモードで起動します。

sbt -jvm-debug 9000 run

ターミナルで、サーバーを起動したままで、IntelliJ IDEA の "Run -> Edit Configuration -> +" を選択してください。
そして、プルダウンから Remote を選択します。

33

  • Name: remote debug
  • Port: 9000
    に設定してOKを選択します。(注:PORT番号はすでに使われてないもので両方合わせてください)

"Run -> Debug 'remote debug'" を選択します。

34

または、以下のテントウムシのボタンを押してください。

35

ブラウザや Curl でリクエストを送信し、break point を張ったところに来ると、以下の Variables のタブのようになります。

36

1行ずつ実行したい場合は、F8 か以下の下矢印ボタンをして Step Over すると、Play の挙動が分析できます。

37

デバックモードを止めるときは、■ の stop ボタンを押し、ターミナルの sbt -jvm-debug 9000 run を "Contrl+C" で終了してください。
以下のようなエラーが出て片方のコネクションが切れると、デバックできなくなるので、エラーにならないように注意してください。

ERROR: transport error 202: bind failed: Address already in use
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)

『Command+B』で、定義元にジャンプできるので、Scalaの 実装を分析できます。
ただし、template ファイル (*.scala.html) は、Scala ファイルでないので、定義元にジャンプできません。

コンパイルされ変換された "target/scala-2.11/twirl/main/index.template.scala" などのファイルは、Scala なので『Command+B』で定義元にジャンプできます。

38

template ファイルを編集しても、template をコンパイルされた Scalaファイルが、target フォルダ以下のファイルを入れ替える前に build して、"sbt run" する前に落ちる場合は、"sbt run" の前の build を外すか、"sbt clean" してから "sbt run" しましょう!

本番運用のために jar ファイルにして、完了となります。

注意点まとめ

最後に、デバッグ時の注意点をまとめて、終わりにしたいと思います。

  • sbt run する前に build が走る -> 古い target フォルダ以下を build してしまう設定

39

  • sbt run する前に build が走らない -> 古い target フォルダ以下を削除して、再生成する設定

40

  • sbt clean する前に build が走る -> 古い target フォルダ以下を build してしまう設定

41

  • sbt clean する前に build が走らない -> 古い target フォルダ以下を削除する設定

42

以上が、Play Framework と MySQL で、CRUD と RESTful な JSON API の作り方の注意点と共有になります。
長文にお付き合い頂き、ありがとうございました。

次回は Akka-http に挑戦しようと思います。