Kotlin Multiplatform Mobile と Flutterの違いについて

みなさんこんにちは!お元気ですか?
僕は元気です。ただ、最近はあまりにも外への情報発信がなさすぎて、良くないな〜と思い、自分を追い込むために必ず毎週何かをアウトプットする!というグループに入りました。笑

今回は初めてですが、選んだテーマは「モバイルアプリケーションの開発」です。詳しくいうと、最近AlphaリリースされたKotlin Multiplatform Mobileについてです。

通常のアプリ開発

AndroidユーザーとiPhoneユーザーのためにアプリを作りたい場合、下記のように2つのアプリを作る必要があります。

画像1

アプリの中の動き、いわゆるビジネスロジックは2つとも一緒なのに、2回別の言語でそのロジックを実装しています。

画像2

Kotlin Multiplaform MobileでもAndroidとiOSアプリは作りますが、共通のロジックは別で実装し、両方のアプリからアクセスできるようになっています:

画像3

結局、iOSとAndroidアプリの中身はViewの実装のみになっています。
ユーザーのInputで共通のロジックが呼ばれ、結果が表示されるだけ。

Kotlin Multiplatform Mobileのメリットは?

- 共通できるロジックをできるだけ分ける設計
- ロジックを実装するための時間が半分になる
- Android/iOSの実装漏れが減らせる。同じペースでの更新が目指せやすくなる。
- Kotlinは書きやくてとてもいけてる言語❤️
- Java/Kotlinのライブラリーが全て使える

Kotlin Multiplatform Mobileのデメリットは?

- iOS/Androidアプリの画面の実装は各OSのAPIで行う必要がある
- Kotlinも分かるiOSエンジニアじゃないとロジックが書けない
- ビルドが遅い・・

で?Flutterとどっちがいいの?

Flutterの場合、ビジネスロジックだけではなく、UIの実装も全て共通されています。Androidアプリの開発でもなく、iOSアプリ開発でもない。そして、書く言語も違います!

画像4

OSごとのAPIはFlutterのPluginなどで、裏でいい感じにハンドリングされてます。例えば、ジャイロセンサーの情報を取得したいなら、AndroidとiOSのAPIを触らず、FlutterのPluginでいい感じに両方の端末で動くようにしてくれます。

Flutterのメリットは?

- 一つのコードベースでAndroidとiPhone端末で動くアプリが作れちゃう
- HotReloadという機能で開発体験がよく、ビルド時間がとても短い

Flutterのデメリットは?

- iOS/AndroidのAPIは直接いじれないので、マニアックなことは出来ない
- Dart言語はKotlinと比べたらいけてない
- 使える外部ライブラリーがまだ少ない
- Flutterできる人少ない

まとめましょう!

Kotlin Multiplatform MobileとFlutterは一見似てるけど、実はやってることが結構違う。それぞれメリットとデメリットがあるので、どっちを選ぶかは自分のやりたいこととリソースによります:

Flutter が向いてるプロジェクト:

- 機能がシンプルなアプリ。Flutterが提供しているコンポーネント以上に複雑なUXを実装したい場合は苦労するので、Flutterにするならできるだけシンプルなアプリがいいです。
- AndroidとiOSのUX/UIを一緒にしたい。FlutterでiOS/Androidの画面を別々に実装するのはなかなか大変なので、デザインが両方で全く一緒でもいいというプロジェクトに向いてると思います。
- 小さいプロジェクト・プロトタイプ。Flutterはとにかく開発体験が良くて、パパッとアイディアを形にできるので、小さいプロジェクトで予算が限られている方には向いてます。
- 外部ライブラリーにあまり依存しない。外部のライブラリー・OSSはFlutterで使えないのが多いため、それらに依存しない方が望ましい。
- パーフォーマンスが求められていない。アプリのメモリ管理などはFlutterがハンドリングしてくれるため、細かい最適化が必要なアプリは向いてないです。

Kotlin Multiplatform Mobile が向いてるプロジェクト:

- マニアックなUX/UIを実装したい。Flutterと違ってOSの最新のAPIが簡単に使えますのでこだわりたい方はKMMでいきましょう。
- AndroidとiOSのUIを完全に分けたい。AndroidはAndroidっぽく、iOSはiOSっぽく、という風にしたい場合はKMMだと分けやすいです。
- 大きなプロジェクト。設計のナウハウ、そしてコミュニティはネイティブの方が充実しているので大きなプロジェクトをはじめる場合はKMMの方がスケールしやすくておすすめです。
- AndroidもiOSもできるエンジニアがいる。共通ロジックはKotlinで書くし、Viewの実装はAndroidとiOSの知識が必要ですので、なるべく両方の知識をもつ人がいたほうがいい。
- パーフォーマンスが重要。ネイティブでUXの実装ができるのでやりたい放題。

この記事が気に入ったらサポートをしてみませんか?