KMP × Kotlin 2.3 ── iOSビルド47%改善の裏でAndroidが遅くなった理由

こんにちは!
AnotherBall MobileチームのRIO(@rioX432)です。

先日、Mobile勉強会 ウォンテッドリー × チームラボ × Sansan #24 にて、ライブ配信アプリ Avvy のKMPプロジェクトでKotlin 2.0.20から2.3.20にアップグレードした際のビルドパフォーマンスへの影響について発表させていただきました。

発表資料

まとめ

Avvyでは、KMPモジュール persona-domain-kmm(25リポジトリ、33 UseCase)でiOS/Android間のドメインロジックを共有しています。アップグレード前は、iOS向けXCFrameworkビルドが平均 14.3分(最大28分)かかっており、Kotlin 2.0.20環境で依存ライブラリの更新やAGP 9への移行がブロックされている状態でした。

Kotlin 2.3.20(Ktor 3.4、AGP 8.13、Gradle 8.13も併せて更新)へアップグレードした結果を、GitHub Actions 87回の実測データで検証しました:

  • iOS: 47%高速化 — 平均ビルド時間が14.3分から7.7分に短縮。最大の要因は linkReleaseFramework の46%高速化(7分38秒→4分07秒)で、ビルド全体の約90%を占めるステップです。
  • Android: 約30秒増加(+30%)— compileKotlin が43%増加。原因はK2のJVMコンパイルリグレッション(KT-81883、未修正)。Configurationフェーズも26秒(+32%)増加しています。

iOSの改善がAndroidのトレードオフを大きく上回るため、KMPプロジェクトならKotlin 2.3は入れるべきです。AGP 9移行の先手を打つ意味でも、早めのアップグレードをおすすめします。

Claude Codeで依存関係を常に最新に

Kotlin 2.0.20に留まっていた経験から、依存関係の更新が遅れると問題が複合的に積み重なることを痛感しました。そこで、Claude Codeのカスタムスキル(/update-deps)を作成し、依存関係の更新ワークフローを自動化しています。新バージョンのチェックからchangelogの調査、更新の適用、ビルド検証、Kotlin互換性チェック付きのPR作成までを一貫して行えるため、最小限の手間で依存関係を最新に保てるようになりました。

We’re Hiring

AnotherBallでは、依存関係の更新やコードベースの健全性を保ち、技術負債の少ない環境を心掛けながら開発しています。こうした取り組みに共感いただける方、ぜひお話しましょう!

AnotherBall Careers