特別企画

Xamarinがモバイルアプリの開発を変える

 4月に米国サンフランシスコで開催されたMicrosoftの開発者向けカンファレンス「Build 2016」と、それを受けて5月に東京で開催された「de:code 2016」で注目されたのが、モバイルアプリの開発を変えるXamarinだ。

以前から注目度の高かったクロスプラットフォーム開発基盤

 Xamarinは、昨年のBuild 2015でも基調講演で大きく取り上げられている。2015年時点では、XamarinはMicrosoftとは関係のない企業だったが、2016年2月にMicrosoftが買収した。

 日本国内ではXamarinの知名度はほとんどないが、iOSやAndroid、Windows Phone向けのアプリ開発においては注目されていたプラットフォームだ。

 簡単に言ってしまえば、iOSやAndroid上の.NET Framework互換環境であるMonoというフレームワークを移植して、C#でコードを書いてしまおうというプラットフォームだ。iOSやAndroidに移植されたMonoは、ファイルI/Oだけでなく、各種のAPIをマッピングしているため、UI部分以外のコードはほとんど共有化できる(例えばGPSなどのセンサーに対するAPIも用意されている)。

Xamarinでの開発は、コアロジックをC#で共通化し、各OSのUI部分を個別にC#で書くことになる。これだけでもコードの再利用化が進み、開発の効率がアップする(Build 2016あるいはde:code 2016の資料より、以下同じ)
各スマートフォンが持つカメラ、通信、SMS、ロケーションなどの機能をCommon Mobile APIとして共通化

 今までのアプリ開発では、例えばiOSではSwiftやObjective-Cなどのプログラミング言語を、Xcodeなどの開発環境を使ってプログラミングしていた。一方、AndroidではJavaでプログラミングし、Android Studioを使っていた。

 このように、プラットフォームごとにプログラミング言語も開発環境も異なっていたため、複数のプラットフォームに対応したアプリ開発を行うのは、開発者が複数のプラットフォームに関しての知識を持っている必要があった。これでは開発効率も悪く、コードの再利用も進まない。

 しかしXamarinでは、プログラミング言語をC#に統一し、開発環境としてはVisual Studioを使用する(Macでの開発はXamarin Studio)。Visual Studio上でiOSやAndroid、Windows 10/Mobileなどのアプリ開発が一括して行える。

 これにより、複数のモバイルアプリ開発の工数や開発コストなどを一気に低減させることができる。また、同じタイミングでiOSやAndroid、Windows 10/Windows 10 Mobileなど、複数のプラットフォームでのアプリ開発が可能になる。

今までのモバイルアプリ開発は、OSごとにプログラミング言語や開発環境などがバラバラで、開発者は複数のOSに対するスキルやコード開発が必要だった
Xamarinを利用すれば、コアロジックをC#で書き、それぞれのOS向けにUI部分をC#でプログラミングする。これだけでコードの再利用が行えるため、開発工数が一気に短縮化できる
Xamarinはエミュレーション環境ではないため、各OSのネイティブUIやAPIが100%利用でき、アプリのパフォーマンスもネイティブアプリと同じ
Xamarinは、Windows、iOS、AndroidなどのAPIを共通化している。共通化できないAPIもフルサポートしている

 Xamarinでは、iOSやAndroidのバージョンアップに合わせて、フレームワークのアップデートを積極的に行っている。現在では、OSのメジャーアップデートが行われても同日に新しいフレームワークが登場している(AppleやGoogleなどが、メジャーアップデートの前にSDKのプレビュー版を提供するようになったことも大きな要因だ)。

 面白いのは、iPhoneやiPadだけでなく、iOSをベースとしているApple WatchやApple TVなどもサポートしていることだ。Androidでは、Android WearやAmazon Fire TV(Androidをベースに開発されている)などもサポートしている。

 欧米では、1万5000社以上の企業でXamarinが利用され、Xamarinを使ってiOSやAndroid対応のアプリが開発されている。

Xamarinは、Apple Watch、Apple TV、Android Wearなどもサポート
欧米では、SlackやGitHub、ケロッグ、ダウジョーンズなど、多くの企業でXamarinは採用されている

 日本では、昨年から注目が集まり始め、三井住友銀行の住宅ローン事前審査アプリに利用されたり、日本酒アプリなど、採用例が少しずつ増えてきている。

日本でも、三井住友銀行のモバイル アプリでXamarinが利用されている
日本酒アプリなどでもXamarinが利用されている。マップなどは、それぞれのOSが提供しているモノがそのまま利用できる

Visual StudioにバンドルされたXamarin

 Microsoftによる買収後、費用面でも使いやすくなった。

 2015年までは、1つのOSあたり年間ライセンス料が約12万円だったので、iOSとAndroidの両方のアプリ開発を行うには年間で24万円ほどかかっていた計算になる。

 しかし、Microsoftの買収後に行われたBuild 2016では、XamarinのライブラリやランタイムなどをVisual Studioにバンドルすることを発表(もともと、XamarinはVisual Studioと組み合わせて動作するようになっていた)。

 有償のVisual Studio Enterprise/Professionalだけでなく、個人や小規模開発チームでの利用という制限はつくが、無償で提供されているVisual Studio Communityにも、Xamarinのプラットフォームがバンドルされることになった。Mac OS上で動作するXamarin Studioも、同じく小規模利用という制限はあるものの、Community版(Xamarin Studio Community)として無償で提供されている。

Microsoftに買収される前は、Xamarinのライセンスは高価だった
Build 2016においてXamarinが無償で提供されると発表された
Visual Studio版のXamarinは、無償で提供されている。Visual Studio Communityにもバンドルしているため、個人で複数のモバイルOS向けのアプリを開発することができる。Mac向けのXamarin Studio Communityも無償で提供

クラウド上のテスト環境を提供するXamarin Test Cloud&Test Recorder

 無償化されたXamarinだが、Xamarin Test Cloud&Test Recorderは、有償サービスとして残っている。

 Xamarin Test Cloudは、クラウド上に2000台以上のスマートフォンを用意して、開発したコードの自動テストが行える。またTest Recorderを使用すれば、自動テストしたUI操作を記録することもできる。特にAndroidスマートフォンは、メーカー間や機種間でカスタマイズが入っているため、すべての機種で思ったような動作をしないことが多い。また、機種によって画面の解像度や縦横比なども異なるため、開発者が意図したような画面デザインにならないこともある。

 そこで、クラウド上に実機を用意して、動作をテストしたり、クラッシュした場合は、動作状況のログを取得できるようにして、アプリの信頼性や互換性をアップすることができる。

 現在、Xamarin Test Cloud&Test Recorderは、Visual Team Serviceの一機能として利用できる。このため、Visual Studio Team Serviceの利用料金が別途かかる(有償のVisual Studio Enterprise/ProfessionalやMSDNのユーザーは、サブスクリプション料金に含まれる)。

Xamarin Test Cloudでは、2000台以上のスマートフォンがクラウドでサポートされている。これを使ってアプリのテストを行える

UIも統一しようと画策するXamarin.Forms

 Monoを使ったXamarinでは、UIに関連しないロジック部分のプログラミング部分の共有化が図られているが、画面のUI部分に関しては、それぞれのOSごとに作り込む必要があった。

 そこで、この部分も共有化できるように開発されたのが、Xamarin.Formsだ。

Xamarin.Formsは、UI部分もXAMLで共通化しようとしている。一部、各OS向けのUIコードをプログラミングする必要があるが、コード量としては非常に少なくなる
XAMLで構築されるUIは、OSごとに異なるマップを呼び出す。この場合でも、同じコードを使いフレームワークが自動的にOSごとのAPI呼び出しを行う

 Xamarin.Formsは、各OSのUI APIを共通化する。これにより開発者は、XAMLとC#で、iOSやAndroidのUIを開発することができる。現状では100%共通化することは難しいが、例えばXamarin.Formsを使ってUI部分の80%が共有化できるようになれば、OSごとにUI部分の20%だけを開発すればよくなる。

 全体のコード量から考えれば、非常に少ない量のコードをOSごとにプログラミングすればいい。多くの部分は、共通化されているため、ほとんどのソースが再利用できる。

 開発者側からすれば、Microsoftのプラットフォームに縛られることになるが(それが、Microsoftの思惑かもしれない)、C#やXAMLというWindows 10で利用されているソフトウェア テクノロジーを覚えれば、iOSやAndroidなどでのアプリ開発も行えてしまう。個々のOSや機種に関する開発スキルを持っていなくても、Xamarinさえあれば対応できる。

 企業側にとっても、Xamarinを使うことで、アプリの複数機種へ対応に対して、2重の開発コストがかかったり、開発し終えたアプリをベースとして別のOSに移植するのに、時間がかかったりする問題点が解決する。

 特にソーシャルゲームメーカーにとっては、iOSだけを先行してリリースし、Android版のリリースまで数カ月、最悪1年以上遅れる、といったことがなくなれば、ビジネスチャンスを逃がさずに済むという点でメリットが大きいだろう。

 個人が持っているスマートフォンにはさまざまな機種があるため、多くの企業においても、一括してアプリ開発ができるのは大きなメリットになる。

アプリのDevOpsのサイクルを作り上げる

 Xamarinの製品ではないが、Microsoftは、ドイツのシュトゥットガルトを拠点にしているHockeyAppを2年前に買収している。

 Android、Cordova、iOS、OS X、Unity、Windows、XamarinのアプリにHockeyAppのコードを入れることで、クラッシュに関するデータをAzure上に収集することができる。これにより、バグの改修を幅広いユーザーベースで行うことが可能になるのだ。

 また、βテストや社内テストなどを行う場合、アプリの管理がアップデートを一括して行うことができる。

 さらに、ユーザーがどのような操作をしているのかなどのユーザーメトリックの追跡や、アプリ内部でのフィードバックの収集を行えるため、継続的なアプリのバージョンアップに生かせるという。

 このように、XamarinとHockeyApp、Azureを組み合わせることで、アプリのDevOpsのサイクルを作り上げることができるわけだ。なおXamarinでもXamarin Insightsというサービスがあるが、これはHockeyAppに統合される。

HockeyAppは、β版の配布、障害検知レポート、フィードバックなどを管理できる
アプリからの詳細データをAzureに取り込み、マーケティング情報として見える化できる
XamarinとHockeyAppを使うことで、モバイルアプリのエンゲージメントと満足度を高めることができる。
Xamarin、HockeyApp、Azureを利用すると、単にアプリ開発の効率化だけでなく、リリース後のDevOpsのサイクルを速く回せる
HockeyAppは、すでにAzureでサービスを開始している。日本でも利用できる

現状での課題は?

 モバイルアプリの開発にとって大きな武器となるXamarinだが、現状では荒削りな部分もある。まず、iOS向けの開発を行うにはMacが必要になる。これは、AppleがiOSのアプリ開発にMac OS Xで動作するXcodeを必須としているためだ。

 iOS Simulator on Windowsを使えば、Windows上で実行結果を表示してデバッグできるが、iOSの機能をWindows上でエミュレーションするわけではないため、ビルドにはMacとXcodeが必要になる。

各OSのアプリ開発をするには、開発環境をWindowsにするのか、Macにするのか選択する必要がある。Windows環境でiOSの開発もできるが、ビルドにはMacが必要になる。Androidに関しては、WindowsでもMacでも行える
Xamarinを使って、iOSとAndroidのアプリ開発をする場合に必要な環境

 また、各OS向けの開発環境を整えるのに多くのTipsが必要になる。このあたりは、日本語のドキュメントの少なさと、Xamarin自体にもインストールなどで不親切な部分が多いことも原因だろう。

 さらに、デフォルトのテンプレートを利用しているとVisual Studioでエラーが表示されることがある。動作自体には問題ないことが多いが、開発者からすれば、あまり気持ちのいいものではない。

 このあたりに関しては、今後Microsoftが改修を進めていくだろう。次のVisual Studio 15(開発コード)ではXamarinの信頼性を高め、開発者にとって使いやすいものになると期待されている。

Microsoftでも現状のXamarinのセットアップの難しさは認識している

 また、Xamarin.Formsは、各OSのUI APIをXAMLで共通化するが、UIをデザインするツールなどがそろっていなかったりする。このあたりはVisual Studioと融合することで、Visual StudioのUIツールが利用できるようになるだろう。

 なおMicrosoftでは、Xamarinを買収したことで、.NET Framework、オープンソースの.NET Core、Xamarinの3つのフレームワークを持つことになる。

 将来的には、ベースライブラリの部分に関しては、.NET Framework、.NET Core、Xamarinを統一化した.NET Standard Libraryを構築しようとしている。

 .NET Standard Libraryは、Windows OSだけでなく、iOS、Android、Linux、Mac OSなどで動作するようになるだろう。こうなれば、共通したフレームワークがOSをまたぎ実現することになる。また、UI部分に関してもXamarin.FormsのベースとなっているXAMLを各OSでサポートすることで、ある程度のUI部分の共通化も実現する。

 面白いのは、これらの共通化は、各OSが有している機能をフルスペックでサポートするように作られることだ。Microsoftが新しいフレームワークを開発しても、iPhoneやAndroidスマートフォンで利用する場合、制限が出るようなら、多くの開発者は使用しなくなるだろうから、賢明な判断といえる。このあたりも、Microsoftのサティア・ナデラCEOのカラーが強く出ているのかもしれない。

現在のフレームワーク。.NET Frameworkとオープンソース化した.NET Core、Xamarinの3つがそれぞれ存在する。これらのフレームワークは、似て非なるモノとなっている
将来的には、.NET Standard Libraryを構築して、すべてのフレームワークで同じライブラリを使用するようにしていく