クロスプラットフォームモバイル開発とは?
今日、多くの企業が、特にAndroidとiOSの両方のために、複数のプラットフォーム向けにモバイルアプリを構築する必要があるという課題に直面しています。これが、クロスプラットフォームモバイル開発ソリューションが最も人気のあるソフトウェア開発トレンドの1つとして登場した理由です。
Statistaによると、2022年第3四半期にはGoogle Playストアで355万、App Storeで160万のモバイルアプリが利用可能であり、AndroidとiOSは合わせて現在世界のモバイルOS市場の99%を占めています。
AndroidおよびiOSユーザーにリーチできるモバイルアプリを作成するにはどうすればよいでしょうか?本稿では、なぜますます多くのモバイルエンジニアがクロスプラットフォーム、またはマルチプラットフォームのモバイル開発アプローチを選択しているのかをご紹介します。
クロスプラットフォームモバイル開発:定義とソリューション
マルチプラットフォームモバイル開発は、複数のOSでスムーズに動作する単一のモバイルアプリケーションを構築できるアプローチです。クロスプラットフォームアプリでは、ソースコードの一部またはすべてを共有できます。これは、開発者がAndroidとiOSの両方で動作するモバイルアセットを、個々のプラットフォームごとに再コーディングすることなく作成およびデプロイできることを意味します。
モバイルアプリ開発の異なるアプローチ
AndroidとiOSの両方に対応するアプリケーションを作成するには、主に4つの方法があります。
1. 各OS向けのネイティブアプリ
ネイティブアプリを作成する場合、開発者は特定のOS向けにアプリケーションを構築し、KotlinやJava(Android用)、Objective-CやSwift(iOS用)など、特定のプラットフォーム向けに設計されたツールやプログラミング言語に依存します。
これらのツールや言語を使用すると、特定のOSの機能や能力にアクセスでき、直感的なインターフェースを備えたレスポンシブなアプリを作成できます。しかし、AndroidとiOSの両方のユーザーにリーチしたい場合、別々のアプリケーションを作成する必要があり、これには多くの時間と労力がかかります。
2. プログレッシブウェブアプリ (PWA)
プログレッシブウェブアプリは、モバイルアプリの機能とウェブ開発で使われるソリューションを組み合わせたものです。大まかに言えば、ウェブサイトとモバイルアプリケーションの混合物を提供します。開発者は、JavaScript、HTML、CSS、WebAssemblyなどのウェブ技術を使用してPWAを構築します。
ウェブアプリケーションは個別のバンドルや配布を必要とせず、オンラインで公開できます。これらはコンピューター、スマートフォン、タブレットのブラウザ経由でアクセスでき、Google PlayやApp Store経由でインストールする必要はありません。
ここでの欠点は、ユーザーがアプリを使用中に、連絡先、カレンダー、電話、その他のアセットなど、デバイスのすべての機能を活用できないことであり、ユーザーエクスペリエンスが制限されます。アプリのパフォーマンスという点では、ネイティブアプリが優位です。
3. クロスプラットフォームアプリ
前述のとおり、マルチプラットフォームアプリは、異なるモバイルプラットフォームで同じように動作するように設計されています。クロスプラットフォームフレームワークを使用すると、そのようなアプリを開発するために共有可能で再利用可能なコードを作成できます。
このアプローチには、時間とコストの両面での効率性など、いくつかの利点があります。クロスプラットフォームモバイル開発の長所と短所については、後のセクションで詳しく見ていきます。
4. ハイブリッドアプリ
ウェブサイトやフォーラムを閲覧していると、「クロスプラットフォームモバイル開発」と「ハイブリッドモバイル開発」という用語を互換的に使用している人々に気づくかもしれません。しかし、そうすることは完全に正確ではありません。
クロスプラットフォームアプリに関しては、モバイルエンジニアはコードを一度書けば、異なるプラットフォームで再利用できます。一方、ハイブリッドアプリ開発は、ネイティブ技術とウェブ技術を組み合わせたアプローチです。これは、HTML、CSS、JavaScriptなどのウェブ開発言語で書かれたコードをネイティブアプリに埋め込むことを必要とします。これを行うには、Ionic CapacitorやApache Cordovaなどのフレームワークの助けを借りて、追加のプラグインを使用してプラットフォームのネイティブ機能にアクセスできます。
クロスプラットフォーム開発とハイブリッド開発の唯一の類似点は、コードの共有性です。パフォーマンスの面では、ハイブリッドアプリケーションはネイティブアプリに劣ります。ハイブリッドアプリは単一のコードベースを展開するため、一部の機能は特定のOSに固有のものであり、他のOSではうまく機能しません。
ネイティブまたはクロスプラットフォームアプリ開発:長年の議論
ネイティブ開発とクロスプラットフォーム開発を巡る議論は、テックコミュニティで未解決のままです。どちらの技術も常に進化しており、それぞれに独自の利点と制限があります。
一部の専門家は依然として、マルチプラットフォームソリューションよりもネイティブモバイル開発を好み、ネイティブアプリの優れたパフォーマンスとより良いユーザーエクスペリエンスを最も重要な利点の一部として挙げています。
しかし、多くの現代ビジネスは、AndroidとiOSの両方に存在感を持ちつつ、市場投入までの時間を短縮し、プラットフォームごとの開発コストを削減する必要があります。ここで、NetflixのシニアソフトウェアエンジニアであるDavid Henry氏とMel Yahya氏が指摘するように、Kotlin Multiplatform (KMP)のようなクロスプラットフォーム開発技術が役立ちます。
ネットワーク接続が不安定である可能性が高いことから、堅牢なクライアントサイドの永続性とオフラインサポートのためのモバイルソリューションに傾倒しました。迅速な製品提供の必要性から、マルチプラットフォームアーキテクチャを試すことになりました。現在、Kotlin Multiplatformを使用して、Kotlinでプラットフォームに依存しないビジネスロジックを一度記述し、それをAndroid用のKotlinライブラリとiOS用のネイティブUniversal Frameworkにコンパイルすることで、さらに一歩進んでいます。
クロスプラットフォームモバイル開発はあなたに適していますか?
あなたに適したモバイル開発アプローチの選択は、ビジネス要件、目標、タスクなど、多くの要因に依存します。他のソリューションと同様に、クロスプラットフォームモバイル開発にも長所と短所があります。
クロスプラットフォーム開発の利点
ビジネスがこのアプローチを他の選択肢よりも選ぶ理由はたくさんあります。
1. 再利用可能なコード
クロスプラットフォームプログラミングでは、モバイルエンジニアはすべてのOS向けに新しいコードを書く必要がありません。単一のコードベースを使用することで、開発者はAPI呼び出し、データストレージ、データシリアル化、分析実装などの反復的なタスクに費やす時間を削減できます。
Kotlin Multiplatformのような技術を使用すると、アプリのデータ層、ビジネス層、プレゼンテーション層を一度だけ実装できます。あるいは、KMPを段階的に導入することも可能です。頻繁に変更され、通常は同期がずれるデータ検証、フィルタリング、ソートなどのロジックの一部を選択し、それをクロスプラットフォーム化し、マイクロライブラリとしてプロジェクトに接続します。
JetBrainsでは、Kotlin Multiplatformに関する調査を定期的に実施し、コミュニティメンバーに異なるプラットフォーム間でどのコードを共有しているかを尋ねています。
2. 時間の節約
コードの再利用性により、クロスプラットフォームアプリケーションはより少ないコードで済み、コーディングに関しては、コードが少ないほど良い結果が得られます。コードをあまり書く必要がないため、時間が節約されます。さらに、コード行が少ないほどバグが発生する余地が少なくなり、コードのテストとメンテナンスに費やす時間が短縮されます。
3. 効果的なリソース管理
個別のアプリケーションを構築するのは費用がかかります。単一のコードベースを持つことで、リソースを効果的に管理できます。Android開発チームとiOS開発チームの両方が、共有コードの記述方法と使用方法を学ぶことができます。
4. 開発者にとって魅力的な機会
多くのモバイルエンジニアは、現代のクロスプラットフォーム技術を製品の技術スタックにおける望ましい要素と見なしています。開発者は、JSONパースなどの反復的で日常的なタスクを実行する必要がある場合、仕事に飽きてしまう可能性があります。しかし、新しい技術やタスクは、彼らの仕事への興奮、モチベーション、喜びを取り戻させることができます。このように、最新の技術スタックを持つことは、モバイル開発チームの人員を確保し、彼らのモチベーションと熱意を長く維持するのを実際に容易にします。
5. より幅広いユーザーにリーチする機会
異なるプラットフォーム間で選択する必要はありません。あなたのアプリは複数のOSと互換性があるため、AndroidとiOS両方のユーザーのニーズを満たし、リーチを最大化できます。
6. 市場投入までの時間の短縮とカスタマイズ
異なるプラットフォーム向けに異なるアプリを構築する必要がないため、製品をはるかに速く開発し、リリースすることができます。さらに、アプリケーションをカスタマイズまたは変換する必要がある場合、プログラマーはコードベースの特定の箇所に小さな変更を加えるのが容易になります。これにより、ユーザーのフィードバックに対してより迅速に対応できるようになります。
クロスプラットフォーム開発アプローチの課題
すべてのソリューションには、独自の制限があります。テックコミュニティの一部では、クロスプラットフォームプログラミングは依然としてパフォーマンスに関連する不具合に苦しんでいると主張されています。さらに、プロジェクトリードは、開発プロセスの最適化に注力することがアプリのユーザーエクスペリエンスに悪影響を与えるのではないかと懸念するかもしれません。
しかし、基盤となる技術の改善により、クロスプラットフォームソリューションはますます安定し、適応性があり、柔軟になっています。
以下は、6か月間隔で実施された、フレームワークの使用状況に関するKotlin Multiplatformユーザー調査2件の結果です。
もう1つよく聞かれる懸念は、マルチプラットフォーム開発ではプラットフォームのネイティブ機能をシームレスにサポートできないということです。しかし、Kotlin Multiplatformを使用すると、Kotlinのexpectedおよびactual宣言を使用して、マルチプラットフォームアプリがプラットフォーム固有のAPIにアクセスできるようにすることができます。expectedおよびactual宣言を使用すると、共通コードで複数のプラットフォーム間で同じ関数を呼び出せると「期待」することを定義し、KotlinがJavaおよびObjective-C/Swiftとの相互運用性を持つおかげで、あらゆるプラットフォーム固有のライブラリとやり取りできる「実際の」実装を提供できます。
現代のマルチプラットフォームフレームワークが進化し続けるにつれて、モバイルエンジニアはネイティブに近い体験をますます作り出せるようになっています。アプリケーションがうまく書かれていれば、ユーザーはその違いに気づくことはありません。しかし、製品の品質は、選択するクロスプラットフォームアプリ開発ツールに大きく依存します。
最も人気のあるクロスプラットフォームソリューション
最も人気のあるクロスプラットフォームフレームワークには、Flutter、React Native、Kotlin Multiplatformがあります。これらのフレームワークはそれぞれ、独自の機能と強みを持っています。使用するツールによって、開発プロセスと結果が異なる場合があります。
Flutter
Googleによって作成されたFlutterは、Dartプログラミング言語を使用するクロスプラットフォーム開発フレームワークです。Flutterは、位置情報サービス、カメラ機能、ハードドライブアクセスなどのネイティブ機能をサポートしています。Flutterでサポートされていない特定のアプリ機能を作成する必要がある場合は、Platform Channel技術を使用してプラットフォーム固有のコードを記述できます。
Flutterで構築されたアプリは、そのUXおよびUI層のすべてを共有する必要があります。このフレームワークの最も優れた点の1つは、開発者が変更を加えてすぐに表示できるホットリロード機能です。
このフレームワークは、以下の状況で最適な選択肢となる可能性があります。
- アプリ間でUIコンポーネントを共有したいが、アプリケーションをネイティブに近い見た目にしたい場合。
- アプリがCPU/GPUに大きな負荷をかけることが予想され、パフォーマンスの最適化が必要となる可能性が高い場合。
- MVP (実用最小限の製品)を開発する必要がある場合。
Flutterで構築された最も人気のあるアプリには、Google Ads、AlibabaのXianyu、eBay Motors、Hamiltonなどがあります。
Kotlin MultiplatformとFlutterについて詳しく掘り下げて、それらの機能とクロスプラットフォームプロジェクトに最適なものを見極めましょう。
React Native
Facebookは2015年に、モバイルエンジニアがハイブリッドなネイティブ/クロスプラットフォームアプリを構築できるように設計されたオープンソースフレームワークとしてReact Nativeを導入しました。これはReactJS(ユーザーインターフェース構築のためのJavaScriptライブラリ)に基づいています。言い換えれば、JavaScriptを使用してAndroidおよびiOSシステム向けのモバイルアプリを構築します。
React Nativeは、すぐに使えるコンポーネントを備えたいくつかのサードパーティUIライブラリへのアクセスを提供し、モバイルエンジニアの開発プロセスにおける時間節約に役立ちます。Flutterと同様に、Fast Refresh機能のおかげで、すべての変更をすぐに確認できます。
以下の場合、アプリにReact Nativeの使用を検討すべきです。
- アプリケーションが比較的シンプルで、軽量であることが期待される場合。
- 開発チームがJavaScriptまたはReactに精通している場合。
React Nativeで構築されたアプリケーションには、Facebook、Instagram、Skype、Uber Eatsなどがあります。
Kotlin Multiplatform
Kotlin Multiplatformは、JetBrainsによって構築されたオープンソース技術で、開発者がネイティブプログラミングの利点を保持しながら、プラットフォーム間でコードを共有することを可能にします。主な利点は以下の通りです。
- 必要に応じてネイティブコードを保持しつつ、Android、iOS、ウェブ、デスクトップ、サーバーサイド間でコードを再利用できること。
- 既存のプロジェクトとのスムーズな統合。プラットフォーム固有のAPIを活用しながら、ネイティブ開発とクロスプラットフォーム開発の両方を最大限に活用できます。
- JetBrainsが構築した最新の宣言型クロスプラットフォームUIフレームワークであるCompose Multiplatformのおかげで、完全なコード共有の柔軟性と、ロジックとUIの両方を共有する能力。
- AndroidにKotlinをすでに使用している場合、コードベースに新しい言語を導入する必要がないこと。
- Kotlinコードと専門知識を再利用できるため、他の技術と比較してKotlin Multiplatformへの移行リスクが低減されます。
チームが新しいマルチプラットフォーム技術の導入に助けを必要とする場合、チームにマルチプラットフォーム開発を導入する方法に関するガイドを確認することをお勧めします。
McDonald's、Netflix、9GAG、VMware、Cash App、Philips、その他多くの企業が、Kotlin Multiplatformの段階的な統合能力と低い導入リスクをすでに活用しています。そのうちのいくつかは、既存のKotlinコードの特定の重要なセグメントを共有することで、アプリの安定性を向上させています。その他は、アプリの品質を損なうことなくコードの再利用を最大化し、モバイル、デスクトップ、ウェブ、TV間でアプリケーションロジック全体を共有し、各プラットフォームでネイティブUIを保持することを目指しています。このアプローチの利点は、すでに導入している企業の事例から明らかです。
結論
クロスプラットフォーム開発ソリューションが進化し続けるにつれて、その制限は提供する利点と比較して薄れてきています。市場には様々な技術があり、それぞれ異なるワークフローと要件に適しています。本稿で議論された各ツールは、クロスプラットフォームを試すことを検討しているチームに広範なサポートを提供します。
最終的に、あなたの具体的なビジネスニーズ、目的、タスクを慎重に考慮し、アプリで達成したい明確な目標を設定することが、あなたにとって最適なソリューションを見つけるのに役立ちます。