C#と.NET Framework技術を利用して、クロスプラットフォーム対応のモバイルアプリを開発できるXamarinの概要を説明する。
本稿は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)のアプリの特徴を簡単にまとめる。
Xamarinは、iOS/Android/Windows上で動作する「ネイティブアプリ」を開発するためのプラットフォームとしてよく知られており、Mono(.NET FrameworkのOSS実装)の上に実装されている。
開発に使用する言語は主にC#であり、これまでに.NETアプリ開発に携わってきた開発者なら、使い慣れたBCL(ベースクラスライブラリ)、LINQやラムダ式、非同期処理の簡潔な記述など、C#の優れた特徴を生かしてアプリ開発を行える。
Xamarinはさまざまな要素から構成されている。代表的なものを以下に挙げる。
Xamarin.iOSとXamarin.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では単一のコードで全てのプラットフォームをサポートすることは基本的には考えられていない。Xamarinでクロスプラットフォーム開発を行う場合、あくまでも「プラットフォームに依存しないロジックを共有し、UIについてはプラットフォームごとに適したものをデザインする」のが流儀だ。
Xamarin.Formsを使用しない場合には、これが顕著になる。つまり、Xamarin.iOSとXamarin.Androidを使用して、ロジック部分は共有するが、UIについては個々のプラットフォームごとに一から作り込んでいく必要がある。Xamarin.Formsを使用しないXmarinアプリの構成は以下のようになる(Windows Phoneアプリを含む)。
これに対して、Xamarin.Formsを使うと、iOSアプリとAndroidアプリ(VSでは加えてWindows Phoneアプリ/UWPアプリ)で共通のUIをXAMLで記述できる。記述したUI要素は、実行時に各プラットフォームにネイティブなUI要素へとマッピングされる。Xamarin.Formsを使って、基本となるUIを記述した上で、プラットフォームに固有な要素を追加するといったことも可能だ。
Xamarin.Formsがあれば、それで全てをまかなえるようにも思えるが、実際にはXamarin.Formsには得手不得手がある。Xamarin.Formsが適しているのは以下ようなものだ。
これら以外の場合は、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開発者にとっては魅力的な選択肢といえる。
Copyright© Digital Advantage Corp. All Rights Reserved.