クロスプラットフォーム アプリケーションの構築の概要

このガイドでは、まず 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# で実装されます)。
  1. iOS では、UIKit API を使用して、Xcode で作成されたプレゼンテーション レイヤー用のストーリーボードを使用して、ネイティブのようなアプリケーションを作成します。
  2. Android では、Android.Views を使用し、Xamarin の UI デザイナーを利用して、ネイティブのようなアプリケーションを作成します。
  3. Windows では、Visual Studio または Blend の UI デザイナーで作成された XAML をプレゼンテーション レイヤーで使用します。
  4. Mac では、Xcode で作成されたストーリーボードをプレゼンテーション レイヤーで使用します。

Xamarin.Forms プロジェクトは、すべてのプラットフォームでサポートされており、Xamarin.Forms XAML を使用してプラットフォーム間で共有できるユーザー インターフェイスの作成を可能にします。

コードの再利用の量は、共有コアに保持されるコードの量と、ユーザー インターフェイス固有のコードの量によって大きく異なります。 コア コードは、ユーザーと直接やり取りせず、代わりに、この情報を収集して表示するアプリケーションの部分にサービスを提供するコードです。

コードの再利用量を増やすために、これらのすべてのシステムで共通のサービスを提供するクロスプラットフォーム コンポーネントを採用できます。以下に例を示します。

  1. ローカル SQL ストレージ用の SQLite-net
  2. カメラ、連絡先、位置情報などのデバイス固有の機能にアクセスするための Xamarin プラグイン
  3. Json.NET など、Xamarin プロジェクトと互換性のある NuGet パッケージ
  4. ネットワーク、Web サービス、IO など用の .NET Framework 機能の使用。

これらのコンポーネントの一部は、Tasky ケース スタディで実装されています。

再利用可能なコードをコア ライブラリに分離する

次の図に示すように、アプリケーション アーキテクチャをレイヤー化し、プラットフォームに依存しないコア機能を再利用可能なコア ライブラリに移動することで責任の分離の原則に従うことにより、プラットフォーム間でのコーのド共有を最大化できます。

By following the principle of separation of responsibility by layering your application architecture and then moving core functionality that is platform agnostic into a reusable core library, you can maximize code sharing across platforms

ケース スタディ

このドキュメントには、Tasky Pro というケース スタディが 1 つ付属しています。 各ケース スタディでは、このドキュメントで概説されている概念の実装について、実際の例を用いて説明しています。 このコードはオープンソースであり、github で入手できます。