はじめに
Kotlin Multiplatform(KMP) について、雑誌で紹介されているのを目にしました。
普段から業務で Kotlin を利用していることもあり、興味を持って少し調べてみました。
マルチプラットフォーム開発と聞くと、
「React Native か Flutter がデファクトスタンダード」という印象だったので、選択肢が増えるのは嬉しいですね。
※ なお、私はアプリ開発者ではないため、内容的にはかなり浅いものとなります
今回比較するもの
今回整理するのは以下の3つです。
- Flutter
- Kotlin Multiplatform(KMP)
- Compose Multiplatform
Flutter
Flutter は「UIも含めて完全に共通化する」ことを前提にしたフレームワークです。
- UI:Flutter(Dart)で記述
- ロジック:共通
- プラットフォーム差異:最小限
Good
- クロスプラットフォーム前提で設計されている
- ドキュメント・記事・事例が豊富
- UI の再現性が高い(どのOSでも同じ見た目)
- 個人開発〜業務まで実績が多い
Bad
- Dart という専用言語が必要
- 既存の Android / iOS の資産を活かしづらい
- プラットフォーム固有の挙動を触ると途端に難しくなる印象
Kotlin Multiplatform(KMP)
Kotlin Multiplatform は
「UIは各プラットフォームで作り、ロジックを共有する」アプローチです。
- UI:各プラットフォームごと
- ロジック:Kotlin で共通化
Good
- Kotlin をそのまま使える
- 既存の Kotlin コードを流用しやすい
- Android / iOS の作法を尊重できる
- 業務コードとの相性が良い
Bad
- UI は結局それぞれ実装が必要
- 共通化できる範囲を設計する必要がある
- 「全部共通で楽したい」場合には向かない
Compose Multiplatform
Compose Multiplatform は、
Compose UI を複数プラットフォームで使おう、というアプローチです。
思想的には Flutter に近いですが、
Kotlin + Compose ベースなのが特徴です。
Good
- Kotlin だけで UI まで書ける
- Compose の知識がそのまま使える
- 宣言的UIでコードの見通しが良い
- Flutter と KMP の中間的な立ち位置
Bad
- まだ発展途上な印象
- プラットフォームごとの差異対応は必要
- 情報量や事例は Flutter に比べると少なめ
比較まとめ
以下の様に表にしてみました。
(KMPとCMPは同時利用可能であるため、分ける必要は無いかもしれませんが)
| 観点 | Flutter | Kotlin Multiplatform(KMP) | Compose Multiplatform(CMP) |
|---|---|---|---|
| 主な言語 | Dart | Kotlin | Kotlin |
| UI共通化 | ◎ | ✕ | ◎ |
| ロジック共通化 | ◎ | ◎ | ◎ |
| 既存Kotlin資産 | △ | ◎ | ◎ |
| 学習コスト | ○ | ◎ | ○ |
| 安定感 | ◎ | ○ | △ |
| ライブラリの充実度 | ◎ | △ | △ |
| IDE前提 | VSCode / IntelliJ | IntelliJ / AS | IntelliJ / AS |
JetBrains の IDE にロックインされてしまうのは気になるものの、
試してみても良さそうと思えました。
終わりに
まだ表面的に少し調べただけなので、
実際に Kotlin Multiplatform や Compose Multiplatform を触って試してはみたいと思います。