493 Views
September 25, 24
スライド概要
YUMEMI.grow DroidKaigi.onCompletion { 2024@Online }
https://yumemi.connpass.com/event/329691/
Mobile Application Programmer
Kotlin 2.0.20 から 標準ライブラリで UUID が 使えるようになりました KAWASHIMA Yoshiyuki YUMEMI.grow DroidKaigi.onCompletion { 2024@Online } 2024.09.25
伝えたいこと • Kotlin 2.0.20 から標準ライブラリで UUID が使えるように なったこと • UUID を標準ライブラリに切り替えるにあたっての注意点 • 依存関係とどうやって向き合っていくか
依存関係とどうやって 向き合っていますか?
依存関係 • OS • 言語 • SDK • ライブラリ
依存関係との向き合い方 • Dependabot で週次で更新 • 大きな変更があった時にまとめて更新 • なるべく更新しない • その他(おすすめの更新フローやツールがあれば是非 チャット欄に)
dependabot からの PR • dependabot で週次で更新 • Kotlin Multiplatform アプリケーション開発 • kotlinx-serialization-json 1.7.1 -> 1.7.2 https://github.com/Kotlin/kotlinx.serialization/releases/tag/v1.7.2
マージしたらクラッシュした • ビルドはパスするが起動した直後にクラッシュした • kotlin.native.internal.IrLinkageError: Reference to class 'Uuid' can not be evaluated: No class found for symbol ‘kotlin.uuid/Uuid|null[0]'
kotlin.uuid/UUID?
https://kotlinlang.org/docs/whatsnew2020.html#standard-library 共通の Kotlin 標準ライブラリにおける UUID の サポート Kotlin 2.0.20 から導入されました
https://github.com/Kotlin/kotlinx.serialization/releases/tag/v1.7.2 リリースノートを改めて見ると Kotlin 2.0.20 がデフォルトになってた
https://github.com/Kotlin/kotlinx.serialization/releases/tag/v1.7.2 さらにリリースノートをスクロールすると、 kotlin.uuid.Uuid に対応してた
これまでどうしていたか • Java の UUID クラスしかなかった • JVM プラットフォームであれば問題ない • Kotlin Multiplatform では Java のライブラリを利用できな い • Kotlin Multiplatform 対応のサードパーティの UUID ライブ ラリを利用していた
クラッシュサンプルコード • https://github.com/ykws/uuidruntime-exception-sample
Json.encodeToString で サードパーティの Uuid を Serialize する部分でクラッシュします
クラッシュの原因 • kotlinx-serialization-json 1.7.2 以降、標準ライブラリの kotlin.uuid に依存している • サードパーティの uuid を使用していたため、 kotlinxserialization-json 側で kotlin.uuid/Uuid のクラス解決がで きなかった
回避するには • kotlinx-serialization-json 1.7.1 を使用し続ける • サードパーティの UUID を標準ライブラリに切り替える
間接的に利用しているケース • Kable(Kotlin Asynchronous Bluetooth Low Energy) では サードパーティの UUID ライブラリに依存している https://github.com/JuulLabs/kable • 0.36.0 のマイルストーンで対応予定 https://github.com/ JuulLabs/kable/pull/758
対応したいけどできない • SKIE 0.8.4 はまだ Kotlin 2.0.20 に対応していない • 0.9.0 で対応予定 https://github.com/touchlab/SKIE/ issues/95 • 急ぐなら 0.9.0-RC.3 以降は実績あり(curcuit が採用して いる) https://github.com/slackhq/circuit/pull/1605
まとめ • UUID は広く普及しているため、アプリケーションで直接 的に、または間接的に利用される • 標準ライブラリへの切り替えは他の依存関係との兼ね合 いを考慮して計画が必要 • 標準ライブラリへの切り替えが難しい場合もあって、依存 するライブラリが更新された場合、予期せず切り替えが 必要になる可能性もある
https://kotlinlang.org/docs/whatsnew2020.html#standard-library UUID はまだ Experimental 導入のタイミングは慎重に判断する必要がありつつも他の依存関係で 切り替えを強制される可能性もあり依存ライブラリの動向に注視が必要
依存関係とどうやって 向き合っていきますか?
ゆめみの Android 求人再開 • DroidKaigi の期間中に Android エンジニアの求人がオープ ンになっています https://hrmos.co/pages/yumemi/jobs?category=1507125045053476864