モバイルアプリ: ネイティブとマルチプラットフォームの比較

2024/08/27に公開

※あくまで2024/8月現在での状況で個人の見解です

メリット

ネイティブ

  • Android: Kotlin, iOS: Swift
  • 公式の開発方法
  • 最新APIの恩恵を最速で受けることができる
  • 公式の開発方法なのでできないことがない

マルチプラットフォーム

  • Flutter, ReactNative, KMP...etc.......
  • シングルコードで複数のOSに対応
  • UI統一にフォーカスしたものと、domain統一にフォーカスしたものがある
    • domain: KMP
    • UI: KMP以外(他にもあるかもしれないですが私は知らないです;;;)


デメリット

ネイティブ

  • OS毎にそれぞれ開発する必要がある
  • 同じアプリを2回開発する必要があるためデグレや仕様に差異が出る可能性が非常に高い
  • AndroidエンジニアとiOSエンジニアをそれぞれリソースが必要

マルチプラットフォーム

  • 最新APIに対応できない可能性がある
  • マルチプラットフォームによるバグが発生する可能性がある
  • マルチプラットフォームのみでは対応できない機能がある場合がある
    • 大体ネイティブブリッジができるのでネイティブ側のコードを書くことで対応できる
    • つまりマルチプラットフォームにしたからといってネイティブ側の知識が不要ということにはならない
  • UIフォーカスのものはUIが統一化されてしまうのでどちらかのOSにとって最適なデザインではなくなってしまう
  • KMPの場合、様々な面でネイティブ開発するよりもハイレベルな事が求められることが多くなる可能性が高い


ネイティブではなくマルチプラットフォームを採用したい動機

  • リソースの問題
    • デメリットで挙げたネイティブの知識が不要にならないということがあっても、それぞれOS毎に人員を用意するよりは少人数で開発可能
  • デグレや仕様差異の削減
    • UI側を統一することが可能なので差分がなくなる
    • KMPを使用することでdomain層を共通化することができ、UIはOS毎に沿った最適なデザインを使用することができる
  • 開発の効率化
  • 人材の確保
    • 近頃ネイティブエンジニアを採用するよりもFlutterエンジニアを採用する方が簡単(諸説あり)
  • 開発速度の統一化
    • シングルコードで開発することができるのでどちらかのOSだけ遅れてしまうということがほぼない


ネイティブを採用する意味はないのか??

そんなことはないと確実に言える

理由は最新APIを最速で利用することができる上、公式の開発方法のため最も安定した手法だからである


しかし現実では様々な課題があり、

  • ネイティブで開発したくてもできない
  • 両OSで同じデザインでリリースしたい
  • 差分やデグレを起こしたくない

あげればキリがないほど色々な事情がある

ではどうすれば良いかというと、

結局その場その状況に沿った最適な技術選定をしようという他ならないと私は思います。


その場その時の一時の感情で安易な選定をしないように

私自身としても心掛けたいところではあります。

Discussion