連載
» 2016年06月07日 05時00分 UPDATE

Dev Basics/Keyword:Xamarin

C#と.NET Framework技術を利用して、クロスプラットフォーム対応のモバイルアプリを開発できるXamarinの概要を説明する。

[かわさきしんじ,Insider.NET編集部]
Dev Basics/Keyword
Insider.NET

 

「Dev Basics/Keyword」のインデックス

連載目次

本稿は2016年1月21日に公開された記事を改訂したものです。


 Xamarinは、C#を開発言語として、WindowsあるいはMac(OS X)上でiOSアプリ、Androidアプリ、Windowsアプリ(UWPアプリ、Windowsストアアプリ)などを開発するためのプラットフォームだ。Xamarinを使うと複数プラットフォーム間でコード(ロジック)やUIを共有できるため、クロスプラットフォームに対応したアプリの開発が容易になる。

 2016年にマイクロソフトが(企業としての)Xamarinを買収し、Visual Studioに(ツール/プラットフォームとしての)Xamarinを統合し無償化したことで、Xamarinが.NET開発者にとってのクロスプラットフォームアプリ開発の第一の選択肢となることが考えられる。なお、現在では、iOS/Android/Mac用のXamarin SDKおよびXamarin.Formsなどがオープンソース化されている。

 Xamarin用の開発環境としては、Xamarin Studio(以下、XS)とVisual Studio(以下、VS)がある。XSはOS XおよびWindows用が存在する。OS XではXS一択だ。WindowsではVSとXSを使えるが、基本的にはVSに一本化されたものと考えた方がよい(Windows用のXamarin StudioはMonoDevelopのダウンロードページからダウンロードできる)。なお、iOSアプリのビルドにはMacが必要になる点には注意しておきたい。

 以下では、VSを対象として、Xamarin(およびXamarin.Forms)のアプリの特徴を簡単にまとめる。

C#の特徴を生かしたアプリ開発が可能なXamarin

 Xamarinは、iOS/Android/Windows上で動作する「ネイティブアプリ」を開発するためのプラットフォームとしてよく知られており、Mono(.NET FrameworkのOSS実装)の上に実装されている。

 開発に使用する言語は主にC#であり、これまでに.NETアプリ開発に携わってきた開発者なら、使い慣れたBCL(ベースクラスライブラリ)、LINQやラムダ式、非同期処理の簡潔な記述など、C#の優れた特徴を生かしてアプリ開発を行える。

Xamarinを構成する要素

 Xamarinはさまざまな要素から構成されている。代表的なものを以下に挙げる。

  • Xamarin.iOS
  • Xamarin.Android
  • Xamarin.Forms

 Xamarin.iOSXamarin.Androidは名前からも分かる通り、それぞれiOSアプリとAndroidアプリを開発するためのプラットフォームとなる。これらを使うことで、C#と.NET FrameworkのBCL、それぞれのプラットフォームが提供するAPIやSDKを組み合わせたモバイルアプリ開発が行える。

 Xamarin.iOS/Xamarin.Androidのいずれでも、作成したアプリは何らかの段階でAOTコンパイラまたはJITコンパイラによりネイティブコードへとコンパイルされる。この結果、Xamarin.iOSとXamarin.Androidで作成したアプリの実行速度は極めて高速だ。これはXamarinを使用する大きなメリットとなる。

 Xamarin.Formsは、iOSアプリ/Androidアプリ/Windowsアプリ(UWPアプリ、Windows Phoneアプリ)で共通するUIを構築するためのUIツールキットだ。

 この他にも、モバイルデバイスが持つカメラ、GPSなどの機能にアクセスするためのXamarin.Mobile、Mac用のアプリ開発プラットフォームであるXamarin.Macなどがあるが、以下ではXamarin.iOS、Xamarin.Android、Xamarin.Formsなどに注目する。

Xamarinでのクロスプラットフォーム開発:ロジックの共有とUIの共有

 冒頭で「複数プラットフォーム間でコードを共有」と書いたが、Xamarinでは単一のコードで全てのプラットフォームをサポートすることは基本的には考えられていない。Xamarinでクロスプラットフォーム開発を行う場合、あくまでも「プラットフォームに依存しないロジックを共有し、UIについてはプラットフォームごとに適したものをデザインする」のが流儀だ。

 Xamarin.Formsを使用しない場合には、これが顕著になる。つまり、Xamarin.iOSとXamarin.Androidを使用して、ロジック部分は共有するが、UIについては個々のプラットフォームごとに一から作り込んでいく必要がある。Xamarin.Formsを使用しないXmarinアプリの構成は以下のようになる(Windows Phoneアプリを含む)。

Xamarin(Xamarin.iOSとXamarin.Android)におけるアプリの構造 Xamarin(Xamarin.iOSとXamarin.Android)におけるアプリの構造

 これに対して、Xamarin.Formsを使うと、iOSアプリとAndroidアプリ(VSでは加えてWindows Phoneアプリ/UWPアプリ)で共通のUIをXAMLで記述できる。記述したUI要素は、実行時に各プラットフォームにネイティブなUI要素へとマッピングされる。Xamarin.Formsを使って、基本となるUIを記述した上で、プラットフォームに固有な要素を追加するといったことも可能だ。

Xamarin.Formsにおけるアプリの構造 Xamarin.Formsにおけるアプリの構造

 Xamarin.Formsがあれば、それで全てをまかなえるようにも思えるが、実際にはXamarin.Formsには得手不得手がある。Xamarin.Formsが適しているのは以下ようなものだ。

  • データ入力アプリ
  • プロトタイプや試験的なアプリを作成する場合
  • プラットフォームに固有な機能をそれほど必要としないアプリ
  • UIのカスタマイズよりもコードを共有することが重要な場合

 これら以外の場合は、Xamarin.iOS/Xamarin.Androidを使うことが推奨されている。

 いずれにせよ、ロジックとUIを明確に分離し、共有できる部分は共有し、それ以外の部分はプラットフォームごとに作り込んでいく必要がある。そして、これにはMVC的なアプリ設計が必要になる。WPFアプリやUWPアプリ、ASP.NET MVCアプリを開発している方であれば、この概念もすんなりと飲み込めるはずだ。


 XamarinはWindows(Windows Phone)/Android/iOSなどで動作するクロスプラットフォーム対応のアプリをC#を開発言語として構築するためのプラットフォームであり、その主眼は個々のアプリ間で共通のロジックやUIを共有することにある。Xamarin.Formsを使えば、Windows 10のUWPアプリ開発までをもターゲットにできる。VSで通常のUWPアプリを開発することは、Windows 10のデバイスファミリーを対象としたマルチデバイスアプリを開発することに他ならない。が、Xamarinを使えば、その適用範囲がiOS/Androidデバイスにまで広がる。そのため、C#に慣れた.NET開発者にとっては魅力的な選択肢といえる。

参考資料


「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。