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