クロスプラットフォーム アプリをビルド。

Xamarin を使用してモバイル アプリを開発するためのベスト プラクティス

シングル モバイル プラットフォームのみに対応したモバイル アプリをビルドする余裕のある企業は珍しいかと思われます。実際に、スマートフォンとタブレットは、主要な 3 つのプラットフォーム、iOS、Android 、Windows に分類されます。すべてのユーザーを対象とする場合には、3 つのすべてのプラットフォーム向けにアプリをデザインし、ビルドする必要があります。伝統的な手法としては、各プラットフォームで提供しているテクノロジーや SDK、iOS の場合 Objective-C、Android の場合 Java、Windows の場合 .NET を使用します。多くのクロスプラットフォーム モバイル ツールキットは、最低限の共通的なエクスペリエンスのみを提供し、特定のプラットフォームで「最速」できない問題に直面します。しかし、Xamarin では、この制限はありません。これら 3 つのすべてのプラットフォーム間で、シングルでモダンな言語 (C#) とフレームワーク (.NET) を使うだけでなく、プラットフォームの独自の UI やデバイス機能を含む、低レベルな SDK やデバイス メタルへのダイレクト アクセスでネイティブ同等としてコードを起動することで、各プラットフォーム間でネイティブなエクスペリエンスを実現できます。Xamarin を選択することで、モバイル アプリをデザインおよび開発する際に、モバイル プラットフォーム間で多くのコードを共有でき、迅速に市場へ投入でき、既存の人材やスキルを活用でき、モバイル アクセスに対するお客様の要望に応え、クロスプラットフォーム間の複雑さを軽減できることを実感できるはずです。本ドキュメントでは、ユーティリティやビジネス アプリケーション用にこれらの利点を実感できる主なガイドラインの概要を紹介します。Xamarin を使用したクロスプラットフォームのゲームのコード記述に関しては、他のドキュメントも参照してください。

概要

本ガイドでは、Xamarin プラットフォームとクロスプラットフォーム アプリケーションをどのようにデザインして、最大限コードを再利用する方法やすべての主要なモバイル プラットフォーム (iOS、Android、Windows Phone) で高品質なネイティブ エクスペリエンスを実現する方法を紹介します。

本ガイドで使用しているアプローチは、一般的には、ビジネス アプリとゲーム アプリの両方に適用できますが、ビジネス アプリやユーティリティ (ゲーム アプリではなく) にフォーカスしています。クロスプラットフォームのゲーム アプリの開発のガイダンスに関しては、[Introduction to MonoGame document] を参照してください。

“write-once, run everywhere”(一度書けば、どこでも動く) のフレーズは、複数のプラットフォームで編集せずに動作するシングル コードベースの長所を称賛するのによく使われます。コードの再利用の利点がある一方で、そのアプローチは、最低限の共通的な機能セットで、ターゲット プラットフォームに綺麗にフィットしないような一般的なルックスのユーザー インターフェースを持つアプリケーションを誘導します。

Xamarin は、単なる“write-once, run everywhere”プラットフォームではありません。その特長の一つとして、プラットフォームごとに独自のネイティブ ユーザー インターフェースを実装する機能を持っています。ただし、よくできたデザインによって、ユーザー インターフェース以外のコードの多くを共有し、両方の言葉のベストを得ることができます: データ ストレージやビジネス ロジックのコードを一度書けば、プラットフォームごとにネイティブな UI を表示します。本ドキュメントでは、一般的なアーキテクチャのアプローチを議題として、ゴールを達成します。

以下、Xamarin のクロスプラットフォーム アプリを作成する際のキー ポイントのサマリーです:

  • C# を使用 - C# でアプリを記述します。Xamarin を使用して、C# で記述した既存のコードを iOS や Android へ簡単に移植でき、かつ Windows Phone でも使用できます。
  • MVC デザイン パターンを使用 - Model/View/Controller パターンを使用して、アプリケーションのユーザー インターフェースを開発します。Model/View/Controller アプローチを使用してアプリをアーキテクトするか、もしくは“Model”とそれ以外で区別がある Model/View/ViewModel アプローチを使用してアプリをアーキテクトします。アプリのどの部分で各プラットフォーム (iOS、Android、Windows Phone および Windows 8/RT) のネイティブ ユーザー インターフェースを使用するか決め、ガイドラインとして、これを使用して、アプリケーションを二つのコンポーネントに分けます: “Core”(コア) と “User-Interface”(ユーザー インターフェース)。
  • ネイティブ UI をビルド - 各 OS 独自のアプリケーションは、異なるユーザー インターフェース レイヤを提供します (ネイティブ UI デザイン ツールのアシスタンスで C# による実装):
  1. iOS では、MonoTouch.UIKit API を使用して、ネイティブなルックスなアプリケーションを作成します (オプションで Apple の Interface Builder を使用して)。
  2. Android では、Android.Views を使用して、ネイティブなルックスなアプリケーションを作成します (Xamarin の UI デザイナーを利用して)。
  3. Windows Phone では、XAML/Silverlight プレゼンテーション レイヤを使用します (Visual Studio か Blend の UI デザイナーを使用して)。
  4. Windows 8 では、Metro API を使用して、ネイティブ ユーザー エクスペリエンスを作成します。

再利用するコード量は、共有するコードをどの程度持つか、ユーザー インターフェース独自のコードをどの程度持つかに大きく依存します。コア コードは、ユーザーと直接会話しない部分ですが、この情報を収集したり表示するアプリケーションの一部用にサービスを提供します。

再利用するコード量を増やすには、以下のように、これら三つのシステム間で共通のサービスを提供するクロスプラットフォームのコンポーネントを採用することができます:

  1. SQLite-NET (英文) - ローカルの SQL ストーレジ用。
  2. Xamarin.Mobile - カメラ、コンタクトおよび位置情報を含むデバイス独自の機能へのアクセス用。
  3. ネットワーク、Web サービス、IO など、フレームワーク機能を使用。

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

Core Library で再利用可能なコードを分割する

アプリケーション アーキテクチャをレイヤ化して、各レイヤの役割を別けることで、プラットフォームに依存しないコアな機能を再利用可能なコードに移動し、以下の図に示すように、プラットフォーム間で最大限コードを共有できます:

ケース スタディ

本ドキュメントを進めるのに、二つのケース スタディがあります – Tasky ProMWC2012。それぞれのケース スタディでは、実際の例として、本ドキュメントで説明しているコンセプトの実装を紹介しています。コードはオープンソースで、github (英文) から入手可能です。

Tasky Pro の PCL (Portable Class Library) を使用したサンプル Tasky Portable もあります。コードはオープンソースで、github (英文) から入手可能です。Tasky Pro のプロジェクトと比較することで、PCL の概要を理解しやすいです。

Tasky Pro の GUI を日本語化したソース コードは、こちらからダウンロード可能です。
Tasky Portable の GUI を日本語化したソース コードは、こちらからダウンロード可能です。
アプリの日本語化の参考として、是非、ご利用ください。

セクション:

Part 1 - Understanding the Xamarin Mobile Platform (英文)

Part 2 - Architecture (英文)

Part 3 - Setting Up a Xamarin Cross Platform Solution (英文)

Part 4 - Handling Platform Divergence/Abstraction/Divergent Implementation (英文)

Part 5 - Practical Code Sharing Strategies (英文)

Part 6 - Testing and App Store Approvals (英文)

Part 7 - Special Considerations (英文)

クロスプラットフォーム モバイル アプリケーションのケース スタディ

本ドキュメントで説明する二つのガイドラインは、二つのサンプル (Tasky ProMWC 2012 カンファレンス アプリ - ダウンロード可能です) で検証できます。

Tasky Pro

Tasky は、iOS、Android および Windows Phone 向けのシンプルな To-Do リスト アプリケーションです。Xamarin でクロスプラットフォーム アプリを作成する基本的な方法を紹介します。SQLite データベースを使用します。

 

Tasky Pro ケース スタディを読む (英文)。

MWC 2012

MWC 2012 は、2012年 2月にバルセロナで開催した Mobile World Congress 用に作成したカンファレンス スケジュール アプリです。

非常に洗練されたアプリケーションで、SQLite データベースのサポート、リモート データ ダウンロード、イメージ キャッシュ、iPad と iPhone の UI を分割、Android と Windows Phone のサポートなどを含みます。 Windows Phone で Live Tiles のようなプラットフォーム独自の機能も含まれます。

MWC 2012 ケース スタディを読む (英文)。

サマリー

本ドキュメントでは、Xamarin のアプリケーション開発ツールを紹介し、マルチ モバイル プラットフォームをターゲットとするアプリケーションをビルドする方法を紹介しています。

マルチ プラットフォーム間で再利用するコードを構造化するレイヤ化したアーキテクチャやアーキテクチャ内で使用可能なさまざまなソフトウェア パターンの説明が含まれます。

例では、共通的なアプリケーションの機能 (ファイルやネットワーク操作など) やクロスプラットフォームでのビルド方法などを紹介しています。

最後に、簡単に検証方法を紹介し、これらの方法を実行するケース スタディへの参照を提供しています。

 

Part 1 - Understanding the Xamarin Mobile Platform >> (英文)

 


Infragistics Infragistics
エンタープライズ向け統合 UI 開発コンポーネント。WinForms、モバイル、Web 用の UI コントロール。
CodeValue OzCode CodeValue OzCode
Visual Studio デバッガー用のヘッドアップ ディスプレイ。
SmartBear Software SmartBear
GUI テスト / プロファイラー / 負荷テスト / API テスト: ソフトウェア テストの自動化/工数削減/品質向上。
JetBrains
世界中で 100 万人以上の開発者が使用する総合開発環境 (IDE) とコーディング ツール。