📌

IntelliJ CEでPlay-Scalaのデバッグ実行をちょっと面倒で地味に便利にする

2021/03/24に公開

Zenn初記事になります、よろしくおねがいします。

最近またScalaでお仕事してて開発環境を整備したのでメモ的に残しておきます。

IntelliJ CE版でよく見つかるやり方だとterminal/cmdプロンプト上で
sbt -jvm-debug 9999 run
してIntelliJ上でリモートデバッグするやりかたが出てきますが、これだとエラーなどが出た時にIntelliJのソースに直接飛べないなど不便があるのでCE版でも出来る限り便利なようにしていきます(有償版のIntelliJ  Ultimate Editionだと標準サポートしています)

  • Playのプロジェクトをsbtで作成、IntelliJで読み込みます。

  • File-Settingsを押下して設定画面を開きます。

  • Build, Execution,Depeloyment > Build Tools > sbtを開きます。

  • sbt projects - sbt shellの設定のEnable debuggingのチェックボックスにチェックを入れます。

  • IntelliJのRun/Debug Configurations上で「+」ボタンを押してRemote JVM Debugを選択します。

  • Nameに分かる名前を入れて以下の設定をします

    • Debugger mode:Attach to remote JVM
    • Transport:Socket
    • Host: localhost
       (デフォルトで上記の設定のはず)この時Port:はまだ設定しないのがポイントです。
  • IntelliJのsbt shellを起動します。

  • sbt起動時のListening for transport dt_socket at address: 51259の番号をコピーします
    ※このアドレスはsbt起動ごとに変わります

  • sbt shellで「run」を実行してPlayを起動します。

  • 先に設定したIntelliJのRun/Debug ConfigurationsのPlay用の設定のPort:に先程コピーした dt_socket at addressの番号を貼り付けます。

  • 設定した設定でIntelliJのDebuggerを立ち上げて、自分が止めたいところにブレークポイントを設定します。

  • ブラウザ/Restクライアントなどからlocalhost:9000の自分がデバックしたい任意のURLなど指定して実行します。

上記でsbt shell経由でリモートデバッグが出来るようになります。
sbt -jvm-debug 9999 run してリモートでバックするのと比べるとPlay起動時に毎回port番号を指定する必要があることですが、その代わりにsbt shellの色分け、エラーなどのリンククリックでIntelliJのソースに直接遷移してくれるので実際の開発効率はかなり上がります。
これが面倒ならIntelliJ Ultimateをお買い上げ下さい(笑)

Discussion