あるSEのつぶやき・改

ITやシステム開発などの技術に関する話題を、取り上げたりしています。

Xamarin.Forms入門 キホンのキ - Xamarin.Forms とは

Xamarin とは

Xamarin.Forms の前に、Xamarin(ざまりん)とはなにか理解しておく必要があります。

Xamarinとは、iOS, Android などで動作するアプリケーションの開発を、C# で行うことができる開発ツールのことです。

Xamarin は iOS, Android の API を 100% カバーしており、新しい API のバージョンが登場してもかなり早い段階で追随している実績があります。

また、Xamarin で開発したアプリケーションは、ネイティブアプリケーションとして実行されるため、パフォーマンスも Swift や Java で開発した場合と比べても見劣りしません。

このように、Xamarin は C# で開発経験がある開発者にとって、非常に魅力的な開発ツールとなっています。

以前は、Xamarin Studio として Xamarin 社によって提供されており、高価な開発ツールだったのですが、2016年に Microsoft が買収して Visual Studio の無償の機能として提供されるようになりました。

現在は、Visual Studio Community が、個人および小規模な企業であれば無償で利用できます。

Visual Studio といえば Windows のイメージが強いですが、Visual Studio for Mac が登場したことにより、Mac でも高機能な Visual Studio を用い開発を行うことができるようになりました。

なお、iOS のアプリケーションを開発する場合は、アプリケーションをビルドするために Mac が必須になるのでご注意ください。

Xamarin.Forms とは

Xamarin は、iOS, Android アプリケーションを開発するために、以下の3種類の機能を持っています。

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

下図は、Xamarin.iOS/Xamarin.Android と Xamarin.Forms の構成になります。

f:id:fnyablog:20180924171725p:plain

Xamarin.iOS と Xamarin.Android は、画面とプラットフォーム独自の API については、プラットフォームごとにネイティブの開発手法で作成する仕組みになります。

Xamarin.iOS と Xamarin.Android でも、もちろん C# で開発を行えるのですが、画面とプラットフォーム独自の API についてはコードの共有ができないという課題がありました。

この課題を解決するのが、Xamarin.Forms です。

Xamarin.Forms では、XAML(Extensible Application Markup Language,「ざむる」と読む)で画面の定義を行い、コードビハインドという仕組みで動作を作り込みます。

XAML は Windows の WPF(Windows Presentation Foundation)やUWP(Universal Windows Platform)で Windows の開発者には馴染みのあるものです。

また、XAML を用いた開発では、WPF や UWP と同じように、MVVM (Model-Vew-ViewModel)モデルというアーキテクチャパターンで開発を行うことができます。

XAML を用いることにより、iOS, Android の画面部分についてもアプリケーションで共通の定義で作成できるようになります。

プラットフォーム独自 API などで拡張機能を利用する必要がでることもありますが、基本的には Windows.Forms で作成すれば、かなりの割合でプラットフォーム間のコードを共有することができます。

このように、Xamarin.Forms で開発すれば高い生産性でモバイルアプリケーションを作成できます。

Xamarin は夢のツールか

Xamarin は夢のツールとなりうるのでしょうか。

答えは Yes であり、No でもあります。

Yes の面は、Xamarin.Forms の場合の開発生産性の高さです。

モバイルアプリケーションを、C# だけでプラットフォーム間の差異を吸収して開発ができる Xamarin はやはり優秀です。

No の面は学習コストの高さになります。

Xamarin.Forms であれば、基本的には XAML と C# で開発ができるのですが、各プラットフォーム API の知識はどうしても必要になってきます。エラーが発生した場合は特にそうです。

C# と XAML の開発経験者であれば、学習コストの比較は以下のようになるでしょうか。

Java + Android API + Swift + iOS API > Xamarin.Forms + Android API + iOS API

ネイティブ開発よりも学習コストは低いとはいえ、Xamarin の学習コストはかなりのものになります。

また、一度に多くのことを学ぶため、開発者に混乱が起きる可能性もあります。

このように、Xamarin は相応の学習コストが要求されます。

夢のツールというには、少々厳しいかもしれませんね。

おわりに

Xamarin は非常に魅力的な開発ツールであるのは間違いないです。

C# の開発者が、Java と Swift を新規に覚えるのはかなり大変ですし。

とはいえ、モバイルアプリケーションの開発が大変なことに変わりはないようです。

筆者自身も Xamarin を学びながら記事を書いているため、間違いなどがありましたらコメントなどでお知らせくだされば幸いです。

連載が続くことを願って。💦

連載目次