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

今だからこそ知りたいKotlin Multiplatform

今だからこそ知りたいKotlin Multiplatform

2022/10/15 Zli 大LTにて発表

Yuta Tomiyama

October 16, 2022
Tweet

More Decks by Yuta Tomiyama

Other Decks in Programming

Transcript

  1. 自己紹介 HN: マヤミト 本名: 富山雄太 GitHub: https://github.com/yt8492 趣味: Kotlin, Twitter,

    同人音声 Twitter: yt8492 会津大学生なんですけど! Zli?のメンバーなんですけど!
  2. 自己紹介 HN: マヤミト 本名: 富山雄太 GitHub: https://github.com/yt8492 趣味: Kotlin, Twitter,

    同人音声 Twitter: yt8492 嘘 を 付 き ま し た 会津大学生なんですけど! Zli?のメンバーなんですけど!
  3. 自己紹介 HN: マヤミト 本名: 富山雄太 GitHub: https://github.com/yt8492 趣味: Kotlin, Twitter,

    同人音声 s1260119 Zli 元代表(2020年度) 合同会社DMM.com 動画配信事業部 Androidエンジニア Twitter: yt8492
  4. なぜKotlinはJavaと相互運用が可能なのか? • KotlinのコードがコンパイルされるとJavaのバイトコードになる ◦ IntelliJ IDEA / Android Studio の機能でJavaにデコンパイルすることも可能

    • 最終的なランタイムはJVM ◦ 実行ファイルもJARなどの実行可能な形式にしてしまえば Kotlinの環境がなくてもJavaのランタイム さえあれば動かせる
  5. Kotlin Multiplatformとは? • 現状対応しているものは以下の通り ◦ JVM ◦ JavaScript ◦ macOS

    ◦ iOS ◦ tvOS ◦ watchOS ◦ Linux ◦ Windows ◦ Android NDK ◦ WebAssembly
  6. 使用しているKotlin Multiplatform対応ライブラリ • ロギング ◦ Napier • HTTPクライアント ◦ Ktor

    Client • GraphQLクライアント ◦ Apollo Kotlin • SQL ◦ SQLDelight • DI ◦ Koin • などなど
  7. 結局どのくらい実用性があるのか? • AndroidとiOSでビジネスロジックを共通化するといった使い方であればほぼ問題 なし ◦ 先日、Kotlin Multiplatform Mobileがついにbetaになった ▪ 「ほぼ完成してプロジェクトに安全に使用できる」と公式がアナウンスしている

    ◦ ここ数年でいろんな会社がプロダクション導入している ◦ サードパーティ製ライブラリも年々増えている ◦ 非同期処理周りやメモリ管理周りがまだ変更が入ったりするので注意が必要 • 共通化を考えないのであれば現状でもいろいろできる ◦ Kotlin/JSでWebフロントとか ◦ Kotlin/NativeでCLIツールを実装するとか
  8. Compose Multiplatformとは • AndroidのJetpack ComposeをもとにJetBrainsが開発している • DesktopアプリとWebアプリがKotlinとComposeで書ける ◦ DesktopはJVMとSkia、WebはDOMベースで動く ◦

    WebはDOMベースなのでAndroidやDesktopで使えるComposable関数が使えなかったりする • Web、iOS、macOSでもskiaベースのComposeが動くように(experimental) ◦ Android, iOS, Desktop, Webで理論上同じUIが動く
  9. Compose Multiplatformとは • AndroidのJetpack ComposeをもとにJetBrainsが開発している • DesktopアプリとWebアプリがKotlinとComposeで書ける ◦ DesktopはJVMとSkia、WebはDOMベースで動く ◦

    WebはDOMベースなのでAndroidやDesktopで使えるComposable関数が使えなかったりする • Web、iOS、macOSでもskiaベースのComposeが動くように(experimental) ◦ Android, iOS, Desktop, Webで理論上同じUIが動く
  10. Compose Multiplatformは使い物になるのか? • 今はまだちょっと厳しい ◦ DesktopやWeb(DOM)は意外と使い物になる ◦ SkiaベースのComposeだと、UIのコンポーネント自体はそこそこ充実しているが、 iOSの挙動など にバグが多く残っている

    ◦ Compose Multiplatformの完成度がFlutterレベルになればワンチャンあると思う • そもそもDesktopとWeb(DOM)以外はbetaリリースすらされていないので、それ なりに不安定
  11. これからのKotlin Multiplatform • 周辺ライブラリのさらなる充実 ◦ 先日、Androidの公式ライブラリ群の一部が Multiplatformに対応した ▪ androidx.datastore ▪

    androidx.collection ◦ Kotlin Multiplatform Mobileがbetaになったことで、今後更に充実していくと予想 • Compose Multiplatformの進化に期待 ◦ Compose for iOSは現状バグだらけだが、バグが少なくなり、 Flutterレベルまで共通化できるもの が増えれば、可能性は十分にある