本記事は、多数あるアプリ作成方法の中から最適なものを選択するためのポイントを解説していく連載記事のひとつです。
スマートフォンのアプリ開発において、ネイティブアプリとクロスプラットフォームアプリは主要な選択肢となります。
本記事では、それぞれの特徴、メリット・デメリットを比較し、最適なアプリ開発手法を選択するためのポイントを解説します。
連載記事
- モバイルアプリとWebアプリの比較
- ネイティブアプリとクロスプラットフォームアプリの違い(本記事)
- クロスプラットフォームアプリ開発技術の比較(やや技術者向け)
- Webアプリの擬似モバイルアプリ化(PWA)について
目次
スマホで動作するアプリの全体像
下図はスマホで動作するアプリの全体像です。先の記事ではWebアプリとモバイルアプリの違いを説明しました。
本記事ではモバイルアプリというカテゴリに含まれる「ネイティブアプリ」と「クロスプラットフォームアプリ」の違いについて説明していきます。
ネイティブアプリとクロスプラットフォームアプリの違い
ネイティブアプリとクロスプラットフォームアプリの違いは、基本的には対応するOSの数の違いです。
ネイティブアプリとはひとつのOSに特化したアプリです。
iOSユーザー向けには、SwiftやObjective-CといったiOSアプリ用の開発言語でiOS専用のアプリを作成し、App Storeで配信します。
Androidユーザー向けには、KotlinやJavaといったAndroidアプリ用の開発言語でAndroid専用のアプリを作成し、Google Playストアで配信します。
これがネイティブアプリです。
一方で、クロスプラットフォームアプリは1つの開発言語で複数のOSに向けたアプリを作成できます。
Flutter、ReactNativeなどのフレームワークを用いることで、1つのソースコードからiOSアプリとAndroidアプリの両方を作成し、それぞれApp StoreとGoogle Play Storeから配信することができます。
この説明だけを見るとネイティブアプリより複数のOSに対応するクロスプラットフォームアプリの方が優れているように見えますが、いくつかネイティブアプリでしか実現できないこと(クロスプラットフォームアプリでは対応が難しいこと)があるので、その点を見極めて選択する必要があります。
ネイティブアプリのメリット・デメリット
ネイティブアプリのメリットとしては、「各OSの機能を最大限に使える・最新機能も使用できる」ことが挙げられます。
iOS用にはAppleが、Android用にはGoogleが提供している公式の開発言語やツールを用いてアプリを開発するネイティブアプリでは、各OSが持っている機能をアプリから正しく呼び出すことができ、高い処理性能(パフォーマンス)も期待できます。
また、最新OSがリリースされる前にベータ版として提供される機能まで使用できることもネイティブアプリの魅力です。
こうした最新の機能はネイティブアプリでしか使うことができないため、AppleやGoogleが新たにOSに組み込み始めた最新技術を呼び出して使用するようなアプリをつくりたい場合は、ネイティブアプリが第一候補となります。
一方で、iOS、Androidそれぞれに向けてネイティブアプリ作ることは、同じアプリを違う開発言語で2つ作成することを意味するため、開発コストは約2倍になります。保守費用なども同様に約2倍になるといえます。
優れた機能や性能が期待できる分、コストも大きくなることがネイティブアプリの大きなデメリットです。
クロスプラットフォームアプリのメリット・デメリット
クロスプラットフォームアプリのメリットは、簡単に言えばネイティブアプリのデメリットを解消できることです。
iOS、Android両OSに向けたアプリを1つのソースコードで開発できるため、それぞれのネイティブアプリをつくるのと比較すれば開発コストは大きく削減できる(約半減)といえます。
クロスプラットフォームアプリのデメリットは、簡単に言えばネイティブアプリならではのメリットは得られないことです。
具体的には、クロスプラットフォームアプリでは「OSの機能を使用する凝ったアプリを企画しても正しく動作しない可能性がある」「OSの最新機能を動かすことができない」などがデメリットとして挙げられます。
クロスプラットフォームアプリは、1つの共通のソースコードから、iOS用とAndroid用のアプリを同時に作り出すイメージです。
もう少し詳しく言うと、iOSやAndroidがそれぞれ持つ開発言語(ネイティブコード)を直接使うのではなく、「それぞれのネイティブコードに変換できる、別の開発言語」を用いてアプリを開発しているイメージとなります。
ネイティブコードを間接的に呼び出しているような仕組みであるため、高度で複雑な機能を実現しようとしても、クロスプラットフォームアプリでは対応しきれない可能性があります。
クロスプラットフォームアプリに追加できるPlugin
一応、上記の問題を解消するためにPluginという機能があり、クロスプラットフォームアプリにネイティブコードを組み込むこともできます。
クロスプラットフォームアプリとして作りたいが一部機能だけはどうしてもネイティブコードでないと実現できない。という場合はPluginを検討すると良いでしょう。
ただし、Pluginが完全な解決策というわけではありません。Pluginを多用すると結局AndroidとiOS両方のネイティブコードで記載する処理が増えることになるので、クロスプラットフォームで作るメリットが薄れていきます。
「それならば最初からネイティブアプリを作った方が良かったと。」いう事態も起こりえるので、Pluginに頼りすぎるのは要注意です。
(年々クロスプラットフォームでできることが増えており、Pluginを使用しなくても実現ができることがかなり増えてきています。)
クロスプラットフォームアプリで操作できるネイティブ機能
先ほど、ネイティブアプリでしか実現できないことを見極めて選択する必要があると書きましたが、具体的にはどのような違いがあるのでしょうか。
続いて、クロスプラットフォームアプリでも利用できる機能・できない機能を解説します。
カメラ | △ | カメラの機能は、クロスプラットフォームアプリでも基本的には使用可能です。写真撮影やフィルターをかけたりする程度はまったく問題ありません。 しかし、顔認証や画像をリアルタイムで加工して表示するなどの凝った機能が必要な場合はネイティブアプリが向いています。 |
マイク・オーディオ | ○ | クロスプラットフォームアプリでも使用可能 |
Push通知 | ○ | クロスプラットフォームアプリでも使用可能 |
ヘルスケア情報 | ○ | クロスプラットフォームアプリでも使用可能 |
生体認証 | ○ | クロスプラットフォームアプリでも使用可能 |
位置情報 | ○ | クロスプラットフォームアプリでも使用可能 |
Bluetooth | ○ | クロスプラットフォームアプリでも使用可能 |
バックグラウンド処理 | △ | クロスプラットフォームアプリでも使用できるが、一部機能については使用不可。 例えば、LINEなどのアプリは開いた瞬間に「未読1」など最新の状態がわかりますが、これは常にユーザーに最新の状態を提供できるように、バックグラウンドでずっと通信や処理を動かすことで実現しています。未読数の管理程度なら問題ないと思いますが、もっと複雑な処理が必要な場合、クロスプラットフォームアプリではバックグラウンド処理に限界があり問題が発生しやすいので注意が必要です。 |
アプリ内課金 | ○ | クロスプラットフォームアプリでも使用可能 |
このように、クロスプラットフォームアプリには一部制約があるのです。
とはいえ、ほとんどの機能が「クロスプラットフォームアプリでも使用可能」なので、クロスプラットフォームでのアプリ開発は実際にかなり利用されています。
具体的な採用事例を挙げると、FacebookやInstagramのようなSNSや、ECアプリ、誰もが知っている大手企業の公式アプリなど、クロスプラットフォームアプリが使われている事例が沢山あります。
(SNSの例を見ると、大枠はクロスプラットフォームで作り、カメラなどのOSの高度な制御を入れたい部分だけはネイティブ機能を埋め込んで作るなど、実際の開発手法にはここで説明しきれないほどさまざまなパターンがあります)
【注意】クロスプラットフォームアプリでのネイティブ機能の利用可否を説明してきましたが、これらは更新日時点(2025年4月)の情報であり、今後対応される可能性も十分あり得ます。また、使用するフレームワークによっても対応状況に差異があるので、上記の説明が絶対的な正解というわけではないことご留意ください。
ネイティブかクロスプラットフォームか?選択のポイント
ここからは、ネイティブアプリかクロスプラットフォームアプリかで迷われている場合の、選択のポイントをいくつか紹介したいと思います。
まずは、ネイティブアプリを選択すべきケースです。
- OSの最新機能を使用する必要がある
- 画像解析、データ解析などの計算量が多い処理を行う必要がある
- 高度なOS機能(AR/VR+センサーなど)を複数組み合わせて使用したい
などの条件がある場合は、基本的にネイティブアプリでつくる必要があると考えてください。
また、iOSかAndroidどちらかひとつのOSにだけ対応すれば良い場合も、ネイティブアプリでつくるべきだと言えます。
コンシューマー向けのアプリの場合はAndroidかiOSどちらか一方にしかサービス提供しないということは難しいと思いますが、業務用アプリの場合は事情が変わります。
会社支給のスマホがAndroidであれば、Android OSのみを対象とすることができ、対応すべきOSで最大のパフォーマンスを引き出せるネイティブアプリの採用が有効であると考えられます。
次に、クロスプラットフォームアプリを選択すべきケースです。
OSの最新の機能や複雑な処理をする必要がなく、iOS、Androidの両OS向けに提供したい場合は、クロスプラットフォームアプリが適しています。
そのようなケースではまず、クロスプラットフォームアプリでやりたいことを実現できるかを検討し、実現が難しい機能があればその部分をPlugin対応で実現できないか検討しましょう。
ただし、Pluginを多用することになるのであれば、ネイティブアプリでの開発への切り替えも視野にいれて検討をすることをおすすめいたします。
※実際にはもっと多様な選択のポイントや考慮すべき制約がありますが、この記事ではわかりやすく単純な例を用いた説明に留めています。
まとめ
本記事では、モバイルアプリを作る際にネイティブアプリとクロスラットフォームアプリのどちらを選ぶべきか、選択のポイントをご紹介しました。
どの手法を採用するか正しく判断を下すためには、アプリに求める機能性、開発コスト、保守のしやすさ、技術の将来性… などさまざまな観点を持って考える必要があります。
そのため、ビジネスサイドの方とITサイドの方、両者が参加するプロジェクトチームで協議するのがお勧めです。
外部ベンダーに開発を依頼する場合は実装方式の相談にも乗ってくれるようなパートナーを選定するのが良いでしょう。
NCDCは、モバイルアプリを用いたサービスの全体像を検討するところから、アプリ開発の要件定義、UX/UIデザイン、実装まで一元的にお客様をご支援することを得意としています。
目的に応じた適切な技術の選定からご相談いただけますので、モバイルアプリの開発を検討されている方はぜひお問い合わせください。