クロスプラットフォーム アプリケーションの構築の概要
このガイドでは、まず Xamarin プラットフォームについて紹介します。 次に、コードの再利用を最大化するためにクロスプラットフォーム アプリケーションを設計する方法について説明します。 最後に、iOS および Android モバイル プラットフォームで高品質のネイティブ エクスペリエンスを提供する方法について説明します。
このドキュメントで使用する方法は、生産性アプリとゲーム アプリの両方に使用できますが、生産性とユーティリティ (ゲーム以外のアプリケーション) に焦点を当てています。 クロスプラットフォーム ゲーム開発のガイダンスについては、「Visual Studio Tools for Unity」を参照してください。
"write-once, run everywhere (一度書いたら、どこでも実行できる)" というフレーズは、複数のプラットフォームで変更されずに実行される単一のコードベースの利点を称賛するためによく使用されます。 コードの再利用という利点がある一方で、そのアプローチには欠点もあります。 2 つのよくある欠点は、最小公倍数の機能セットを持つアプリケーションと、どのターゲット プラットフォームにもうまく適合しない汎用的なユーザー インターフェイスです。
Xamarin は単に "write-once, run everywhere (一度書いたら、どこでも実行できる)" プラットフォームであるだけではありません。その強みの 1 つが、プラットフォームごとに固有のネイティブ ユーザー インターフェイスを実装できることであるためです。 ただし、慎重に設計すれば、ユーザー インターフェイス以外のコードの大部分を共有し、両方の利点を最大限に活用することができます。 データ ストレージとビジネス ロジックのコードを一度記述し、各プラットフォームでネイティブ UI を示します。 このドキュメントでは、この目標を達成するための一般的なアーキテクチャ アプローチについて説明します。
Xamarin クロスプラットフォーム アプリを作成するための主要なポイントの概要を次に示します。
- C# を使用する - C# でアプリを作成します。 C# で作成された既存のコードは、Xamarin を使用して iOS および Android に簡単に移植でき、Windows アプリで使用できます。
- MVC または MVVM の設計パターンを利用する - Model/View/Controller パターンを使用してアプリケーションのユーザー インターフェイスを開発します。 "モデル" とその他の部分の間に明確な分離がある Model/View/Controller アプローチまたは Model/View/ViewModel アプローチを使用して、アプリケーションを設計します。 アプリケーションのどの部分が各プラットフォーム (iOS、Android、Windows、Mac) のネイティブ ユーザー インターフェイス要素を使用するかを決定し、これをガイドラインとして使用して、アプリケーションを "コア" と "ユーザー インターフェイス" の 2 つのコンポーネントに分けます。
- ネイティブ UI を構築する - 各 OS 固有のアプリケーションは、異なるユーザー インターフェイス レイヤーを提供します (ネイティブ UI 設計ツールの支援を受けて C# で実装されます)。
- iOS では、UIKit API を使用して、Xcode で作成されたプレゼンテーション レイヤー用のストーリーボードを使用して、ネイティブのようなアプリケーションを作成します。
- Android では、Android.Views を使用し、Xamarin の UI デザイナーを利用して、ネイティブのようなアプリケーションを作成します。
- Windows では、Visual Studio または Blend の UI デザイナーで作成された XAML をプレゼンテーション レイヤーで使用します。
- Mac では、Xcode で作成されたストーリーボードをプレゼンテーション レイヤーで使用します。
Xamarin.Forms プロジェクトは、すべてのプラットフォームでサポートされており、Xamarin.Forms XAML を使用してプラットフォーム間で共有できるユーザー インターフェイスの作成を可能にします。
コードの再利用の量は、共有コアに保持されるコードの量と、ユーザー インターフェイス固有のコードの量によって大きく異なります。 コア コードは、ユーザーと直接やり取りせず、代わりに、この情報を収集して表示するアプリケーションの部分にサービスを提供するコードです。
コードの再利用量を増やすために、これらのすべてのシステムで共通のサービスを提供するクロスプラットフォーム コンポーネントを採用できます。以下に例を示します。
- ローカル SQL ストレージ用の SQLite-net、
- カメラ、連絡先、位置情報などのデバイス固有の機能にアクセスするための Xamarin プラグイン、
- Json.NET など、Xamarin プロジェクトと互換性のある NuGet パッケージ、
- ネットワーク、Web サービス、IO など用の .NET Framework 機能の使用。
これらのコンポーネントの一部は、Tasky ケース スタディで実装されています。
再利用可能なコードをコア ライブラリに分離する
次の図に示すように、アプリケーション アーキテクチャをレイヤー化し、プラットフォームに依存しないコア機能を再利用可能なコア ライブラリに移動することで責任の分離の原則に従うことにより、プラットフォーム間でのコーのド共有を最大化できます。
ケース スタディ
このドキュメントには、Tasky Pro というケース スタディが 1 つ付属しています。 各ケース スタディでは、このドキュメントで概説されている概念の実装について、実際の例を用いて説明しています。 このコードはオープンソースであり、github で入手できます。