Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KotlinConf2025現地参加 と Compose HotReload導入記

Avatar for gotlin gotlin
October 03, 2025
27

KotlinConf2025現地参加 と Compose HotReload導入記

Avatar for gotlin

gotlin

October 03, 2025
Tweet

Transcript

  1. Implementing Compose Hot Reloadのキーワード • ClassLoader (ぼつ) ⚬ ある時点のUI用の名前空間を作ってクラスを展開して、入れ替える •

    DCEVM(Dynamic Code Evolution for Java(VM)) ⚬ GCの機能を使って、メモリを総入れ替え • Compose Compiler ⚬ Composeスロットテーブルの書き換え • Kotlin Compiler ⚬ ラムダの命名を規則化 興味がある方は懇親会で話しましょう(教えてください)
  2. でも実務でも試したい! • 選択肢1 ⚬ 各種versionを頑張って上げる ⚬ ビルドが通らなくなって色々辛い • 選択肢2 ⚬

    別のGradleプロジェクトを作って、同一モジュールを参照する (プロジェクトで実際に動いていることを確認したいだけなので) 選択肢2を採用
  3. プロジェクトの構成 project-root/ ├─ androidApp/ │ ├── app/ │ │ └──

    build.gradle.kts │ ├── shared/ │ │ └── build.gradle.kts │ ├── settings.gradle.kts │ └── build.gradle.kts │ ├─ desktopApp/ │ ├── composeApp/ │ │ └── build.gradle.kts │ ├── settings.gradle.kts │ └── build.gradle.kts
  4. プロジェクトの構成 project-root/ ├─ androidApp/ │ ├── app/ │ │ └──

    build.gradle.kts ─ depends on shared/ │ ├── shared/ │ │ └── build.gradle.kts │ ├── settings.gradle.kts │ └── build.gradle.kts │ ├─ desktopApp/ │ ├── composeApp/ │ │ └── build.gradle.kts ─ depends on shared/ │ ├── settings.gradle.kts │ └── build.gradle.kts
  5. プロジェクトの構成 project-root/ ├─ androidApp/ │ ├── app/ │ │ └──

    build.gradle.kts │ ├── shared/ │ │ └── build.gradle.kts │ ├── settings.gradle.kts │ └── build.gradle.kts │ ├─ desktopApp/ │ ├── composeApp/ │ │ └── build.gradle.kts │ ├── settings.gradle.kts │ └── build.gradle.kts HotReloadされない
  6. プロジェクトの構成 project-root/ ├─ androidApp/ │ ├── app/ │ │ └──

    build.gradle.kts │ ├── shared-nonhotreloadable/ │ │ └── build.gradle.kts │ ├── settings.gradle.kts │ └── build.gradle.kts │ ├─ desktopApp/ │ ├── composeApp/ │ │ └── build.gradle.kts │ ├── shared-hotreloadable/ │ │ └── build.gradle.kts │ ├── settings.gradle.kts │ └── build.gradle.kts HotReloadできない HotReloadできる
  7. HotReloadどうだった?(まとめ) • Wizardで簡単に試すことができます! • あなたのプロジェクトが日々version上げを行なっていなら、多分簡単に導入でき るます! • version上げを行なっていなくても、紹介した方法で動きを試してみる価値はある かもです! ⚬

    ただし複雑になる可能性、kmp未対応の場合はビルド時間などにも影響あり • この変更をマージすることはない、これをversion上げなどのモチベーションに! • ちなみに適当に入れただけだけど、HotReloadの速度は0~2秒くらいで既に実用的 な速度でした!(割と大きなプロジェクトではある)