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. 今だからこそ知りたい
    Kotlin Multiplatform
    2022/10/15 大LT

    View Slide

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

    View Slide

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

    View Slide

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







    会津大学生なんですけど!
    Zli?のメンバーなんですけど!

    View Slide

  5. 自己紹介
    HN: マヤミト
    本名: 富山雄太
    GitHub: https://github.com/yt8492
    趣味: Kotlin, Twitter, 同人音声
    s1260119
    Zli 元代表(2020年度)
    合同会社DMM.com 動画配信事業部
    Androidエンジニア
    Twitter: yt8492

    View Slide

  6. 動画配信事業部でAndroidアプリを
    作ってるよ!🥰

    View Slide

  7. 動画配信事業部でAndroidアプリを
    作ってるよ!🥰
    おっと、その前に

    View Slide

  8. ⚠注意事項⚠

    View Slide

  9. ⚠注意事項⚠
    成人向け事業は2018年3月1日をもってDMM.comから分割し、株式会社デジタルコ
    マースへ継承しています。
    また、同年8月1日よりデジタルコマース社運営の元、アダルト事業「DMM.R18」の名称
    も変更し、「FANZA(ファンザ)」ブランドが誕生しました。
    「FANZA(デジタルコマース社)」は「DMM.com」から完全に独立しており、事業会社とし
    てもブランドとしても、別々のものとなっています。
    DMM.comは、デジタルコマース社からの業務委託として、FANZAの配信及びシステム
    等の請負を行っています。

    View Slide

  10. ⚠注意事項⚠
    成人向け事業は2018年3月1日をもってDMM.comから分割し、株式会社デジタルコ
    マースへ継承しています。
    また、同年8月1日よりデジタルコマース社運営の元、アダルト事業「DMM.R18」の名称
    も変更し、「FANZA(ファンザ)」ブランドが誕生しました。
    「FANZA(デジタルコマース社)」は「DMM.com」から完全に独立しており、事業会社とし
    てもブランドとしても、別々のものとなっています。
    DMM.comは、デジタルコマース社からの業務委託として、FANZAの配信及びシステム
    等の請負を行っています。

    View Slide

  11. さて本題

    View Slide

  12. そもそもKotlinとは?
    ● 静的型付けなオブジェクト指向言語
    ● Androidアプリ開発やバックエンド開発で使われている
    ○ もちろん弊社のAndroidアプリ開発でも使ってるよ!
    ● JVM言語
    ○ Javaとの相互運用が可能

    View Slide

  13. なぜKotlinはJavaと相互運用が可能なのか?
    ● KotlinのコードがコンパイルされるとJavaのバイトコードになる
    ○ IntelliJ IDEA / Android Studio の機能でJavaにデコンパイルすることも可能
    ● 最終的なランタイムはJVM
    ○ 実行ファイルもJARなどの実行可能な形式にしてしまえば Kotlinの環境がなくてもJavaのランタイム
    さえあれば動かせる

    View Slide

  14. Kotlinの特殊なランタイムがない
    →Javaのバイトコード以外も吐き出せるようにすれ
    ば任意のプラットフォームで動くものが作れるので
    は?(てんさいはかせ)

    View Slide

  15. 正解󰢏

    View Slide

  16. Kotlin Multiplatformとは?
    ● Kotlinのコードを様々な形式にコンパイルする
    ● 複数のプラットフォームの処理を共通化できる
    common
    Android iOS

    View Slide

  17. Kotlin Multiplatformとは?
    ● 現状対応しているものは以下の通り
    ○ JVM
    ○ JavaScript
    ○ macOS
    ○ iOS
    ○ tvOS
    ○ watchOS
    ○ Linux
    ○ Windows
    ○ Android NDK
    ○ WebAssembly

    View Slide

  18. Q. 実用性あんの?

    View Slide

  19. A. あります!
    弊社でも使ってます!

    View Slide

  20. レイヤードアーキテクチャ
    動画配信事業部での活用例
    Domain
    UseCase
    UI
    Infra

    View Slide

  21. レイヤードアーキテクチャ
    Domain層、Infra層、UseCase層をKotlinで共通化
    動画配信事業部での活用例
    Domain
    UseCase
    UI
    Infra

    View Slide

  22. レイヤードアーキテクチャ
    Domain層、Infra層、UseCase層をKotlinで共通化
    共通化した処理をそれぞれのネイティブから呼び出す
    動画配信事業部での活用例
    native-shared
    Android
    Jetpack Compose
    iOS
    SwiftUI

    View Slide

  23. 使用しているKotlin Multiplatform対応ライブラリ
    ● ロギング
    ○ Napier
    ● HTTPクライアント
    ○ Ktor Client
    ● GraphQLクライアント
    ○ Apollo Kotlin
    ● SQL
    ○ SQLDelight
    ● DI
    ○ Koin
    ● などなど

    View Slide

  24. 結局どのくらい実用性があるのか?
    ● AndroidとiOSでビジネスロジックを共通化するといった使い方であればほぼ問題
    なし
    ○ 先日、Kotlin Multiplatform Mobileがついにbetaになった
    ■ 「ほぼ完成してプロジェクトに安全に使用できる」と公式がアナウンスしている
    ○ ここ数年でいろんな会社がプロダクション導入している
    ○ サードパーティ製ライブラリも年々増えている
    ○ 非同期処理周りやメモリ管理周りがまだ変更が入ったりするので注意が必要
    ● 共通化を考えないのであれば現状でもいろいろできる
    ○ Kotlin/JSでWebフロントとか
    ○ Kotlin/NativeでCLIツールを実装するとか

    View Slide

  25. Q. UIの共通化まではできないの?

    View Slide

  26. A. できます(震え声)

    View Slide

  27. Compose Multiplatformなんてものがあったりする

    View Slide

  28. 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が動く

    View Slide

  29. 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が動く

    View Slide

  30. Compose Multiplatformは使い物になるのか?
    ● 今はまだちょっと厳しい
    ○ DesktopやWeb(DOM)は意外と使い物になる
    ○ SkiaベースのComposeだと、UIのコンポーネント自体はそこそこ充実しているが、 iOSの挙動など
    にバグが多く残っている
    ○ Compose Multiplatformの完成度がFlutterレベルになればワンチャンあると思う
    ● そもそもDesktopとWeb(DOM)以外はbetaリリースすらされていないので、それ
    なりに不安定

    View Slide

  31. これからのKotlin Multiplatform
    ● 周辺ライブラリのさらなる充実
    ○ 先日、Androidの公式ライブラリ群の一部が Multiplatformに対応した
    ■ androidx.datastore
    ■ androidx.collection
    ○ Kotlin Multiplatform Mobileがbetaになったことで、今後更に充実していくと予想
    ● Compose Multiplatformの進化に期待
    ○ Compose for iOSは現状バグだらけだが、バグが少なくなり、 Flutterレベルまで共通化できるもの
    が増えれば、可能性は十分にある

    View Slide

  32. まとめ
    ● Kotlin Multiplatformはいろんなプラットフォームの処理をKotlinで実装できる
    ● UI以外のビジネスロジックなどの処理の共通化であれば現状でもプロダクション導
    入に耐えうるレベル
    ● UIの共通化はCompose Multiplatformの進化に期待
    ● 弊社に来ればKotlin Multiplatformで仕事ができるよ!(宣伝)

    View Slide