LoginSignup
4
2

More than 3 years have passed since last update.

Docker内のJooby(Kotlin × Gradle)をホットリロードさせながらIntelliJでRemoteDebugする

Posted at

1-やること

タイトルの通り、DockerやIntellijの実行構成を含んだ全部入りリポジトリはこちら
Githubリポジトリ

2-完璧でないところ

・後述のjoobyRunを行った後、RemoteDebugを走らせないとホットリロードが動きません。
 →裏でport5005に対する接続待ちが起きてる??

・ブレークポイントで止まっている間はホットリロードが効きませんでした。

3-ポイント

・Docker内のJDKとIntelliJのJDKは合わせよう!
 →この記事ではamazoncorretto:11でそろえてます。

・docker-compose.yml: environmentに環境変数GRADLE_OPTSを指定

docker-compose.yml
version: '3'

services:
  app:
    shm_size: 4096m
    build: "./build/app"
    ports:
      - '8015:8080'
      - '5005:5005'

    volumes:
      - "./app:/app"

    environment:
      TZ: 'Asia/Tokyo'
      GRADLE_OPTS: '-Dorg.gradle.jvmargs=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005'

    working_dir: /app

    cap_add:
      - SYS_ADMIN
    security_opt:
      - seccomp:unconfined
    tty: true

・IntelliJにdocker-compose用の実行構成を作成
image.png

・RemoteDebug用の実行構成を作成
 Command line arguments for remote JVMの内容が先述の「GRADLE_OPTS」とイコールになるはず
image.png

・docker-composeの起動構成を実行→コンテナ内部でjoobyRun実行
image.png

コマンド実行
./gradlew joobyRun

image.png

・RemoteDebugの起動構成を実行→適当に置いたブレークポイントを通るパスにアクセス
image.png

以下にアクセス
http://localhost:8015/

ブレークポイントで止まる
image.png

ソース修正するとホットリロードが行われる
※ブレークポイントで処理停止させている場合は勿論効かないです。(重要なので二度目)
image.png

4-おわり

・dockerでローカルを汚さないかつ、IntelliJの強力なアシスト+joobyRunでのホットリロード+RemoteDebug
 LL言語並みに高速でリコンパイルされるわけでないですが、これで開発がとても楽になります。

・後述のjoobyRunを行った後、RemoteDebugを走らせないとホットリロードが動きません。
 →裏でport5005に対する接続待ちが起きてる??

回避策としてはRemoteDebugが不要な時はdocker-compose.ymlのGRADLE_OPTSをコメントアウトすれば良いです。

4
2
0

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
4
2