Slide 1

Slide 1 text

© 2024 Wantedly, Inc. K2への完全移行結果 potatotips 86 2024/02/07 久保出雅俊

Slide 2

Slide 2 text

© 2024 Wantedly, Inc. wantedly.com/id/kubode X: @swiz_ard GitHub: @kubode

Slide 3

Slide 3 text

© 2024 Wantedly, Inc. 紹介 Wantedly Visit iOS, Android and Web 気軽に会社訪問 ミッションや価値観への共感でマッチング ● 給与や福利厚⽣などの条件ではなく、想いがあれば会社 の規模にとらわれない まず「話を聞きに⾏く」という新しい体験 ● 個⼈と企業がフラットな⽬線で出会えることで、より魅 ⼒的な場所を⾒つけることが可能に

Slide 4

Slide 4 text

© 2024 Wantedly, Inc. 話すこと ● K2完全有効化までの道のり ● K2化を始める前との比較

Slide 5

Slide 5 text

© 2024 Wantedly, Inc. K2とは

Slide 6

Slide 6 text

© 2024 Wantedly, Inc. K2 ● Kotlin 2.0のコンパイラー実装のこと ● Kotlinのコードのコンパイル速度が最大2倍 ● Kotlin 2.0の言語機能追加に対応しやすい ● Kotlin 1.9から実験的に有効化できる

Slide 7

Slide 7 text

© 2024 Wantedly, Inc. K2を使うには ● gradle.propertiesに以下を追加 kotlin.experimental.tryK2=true kapt.use.k2=true android.lint.useK2Uast=true

Slide 8

Slide 8 text

© 2024 Wantedly, Inc. これだけ

Slide 9

Slide 9 text

© 2024 Wantedly, Inc. と思ったら

Slide 10

Slide 10 text

© 2024 Wantedly, Inc. 落とし穴 ● kaptはKotlin言語バージョン2でサポートされていない ● kaptがある限り完全移行とは言えない > Task :features:discover:kaptGenerateStubsDebugKotlin w: Kapt currently doesn't support language version 2.0+. Falling back to 1.9.

Slide 11

Slide 11 text

© 2024 Wantedly, Inc. K2移行プロジェクト

Slide 12

Slide 12 text

© 2024 Wantedly, Inc. K2に必要なこと ● kapt -> KSP ○ Dagger Hilt ○ Room ○ 自作のコード生成 ● Data Binding

Slide 13

Slide 13 text

© 2024 Wantedly, Inc. kapt -> KSP ● HiltやRoomは特に問題なし ● 自作のコード生成はKSPに書き換え ○ インターフェースは大きく変わるが、コードを生成するロジックは変更なし

Slide 14

Slide 14 text

© 2024 Wantedly, Inc. Data Bindingの移行

Slide 15

Slide 15 text

© 2024 Wantedly, Inc. Data Bindingの移行 https://speakerdeck.com/kubode/easier-migration-of-data-binding 具体的な手法は 過去の発表で

Slide 16

Slide 16 text

© 2024 Wantedly, Inc. Data Bindingの移行 ● 移行ツールを作成、作業を大きく減らす ● 単純作業化して分担 ● 品質はレビューよりも自動テストとQAに委ねる

Slide 17

Slide 17 text

© 2024 Wantedly, Inc.

Slide 18

Slide 18 text

© 2024 Wantedly, Inc.

Slide 19

Slide 19 text

© 2024 Wantedly, Inc. 前後比較

Slide 20

Slide 20 text

© 2024 Wantedly, Inc. 前後比較 Data Binding移行開始前 VS K2有効化後 CPU: Apple M1 Max, Memory: 64GB ● クリーンビルド ○ $ ./gradlew clean && ./gradlew compileVisitQaDebugAndroidTestSources --no-daemon --no-build-cache --no-configuration-cache --max-workers=1 ● --max-workers=1(並列ビルド無効) ● --scan

Slide 21

Slide 21 text

© 2024 Wantedly, Inc. ビルド時間 Before After % クリーンビルド 100s 92s 8% 🎉 max-worker=1 191s 155s 19% 🎉 max-worker=1 Kotlin関連Taskのみ※ 177s 117s 34% 🎉 ※--scanあり、KotlinCompile&Kapt&Ksp

Slide 22

Slide 22 text

© 2024 Wantedly, Inc. --scan Before After この辺を並列化しないと効果が薄い

Slide 23

Slide 23 text

© 2024 Wantedly, Inc. まとめ

Slide 24

Slide 24 text

© 2024 Wantedly, Inc. まとめ ● K2について説明 ● kaptというかData Bindingが大変 ● ビルド時間は改善するが改善の余地あり ○ 並列化の効率を上げるほうが効果が高い ● Kotlin 2がきても安心

Slide 25

Slide 25 text

© 2024 Wantedly, Inc.