個人的なメモ

Tomohiro Suzuki @hiro128_777 のブログです。Microsoft MVP for Developer Technologies 2017- 本ブログと所属組織の公式見解は関係ございません。

Xamarinを始める前に知っておきたいこと。 Xamarin Native と Xamarin.Forms どちらで開発すべきなのか?

JXUGC #13 東京 緊急開催 Xamarin のすべて!でお話した内容ですが、限られた時間でうまくお伝えできたか不安な部分を再度ご説明したいと思います。

セッションのスライドはここです。

今回は Xamarin Native と Xamarin.Forms どちらで開発すべきなのかを5つの観点から考えていきます。

まずは、下の図をご覧ください。


f:id:hiro128:20160602102352p:plain


1. UI の作りこみが"理論的に"可能か。
「UI の作りこみ」とは、クライアントの要求に応えられるかということです。クライアントは当然の事ながら、「この隙間を1ドット広げて欲しい」「この見出しの文字は1文字目だけ大きくし、色も変えて欲しい」など、プログラムの仕様を考慮しない要求を出します。それに対して「プログラムの仕様上無理です」とは決して言えません。そういう意味で、どのくらい細かくUIデザインをコントロールできるかということです。

Xamarin Native の場合、UI は個別で作成しなければいけませんので、iOS, Android でできることは100%全てできます。そして、難易度的には一番簡単です。
ただし、製品の開発では、Mvvm フレームワークを使用する場合がほとんどです。その場合、ネイティブ UI の機能を100%使用できないこともあります。例えば、Xamarin Native 用の クロスプラットフォーム Mvvm フレームワークである Mvvm Cross を使う場合、ViewModelが iOS, Android 共通となるため、UI の設計が、ViewModel に依存してしまい、100%自由に UI が設計できなくなってしまいます。

Xamarin.Forms の場合、XALM の記述だけでは、上記の「この隙間を1ドット広げて欲しい」といったような細かいクライアントの要望に応えるのは不可能です。よって、Xamarin.Forms で製品レベルのアプリを作成するには、Custom Renderer, Effect, Trigger, Behavior といった機能で、プラットフォームごとの UI や動作を細かくコントロールする事が必須となります。これらの機能を自由自在に利用するには、iOS, Android のネイティブ UI 自体の理解と、Xamarin.Forms がネイティブ UI をどのようにレンダリングしているのかを理解することが必須となりますので、 難易度は Xamarin Native よりも高くなり、どうしても"頑張る"必要があります。


2. UI の作りこみに必要な知識
Xamarin Native の場合、iOS, Android のネイティブ UI の知識が必要です。また、Mvvm Cross などのフレームワークを利用する場合は、フレームワークの知識が必要です。

Xamarin.Forms の場合、iOS, Android のネイティブ UI の知識および、Xamarin.Forms の XAML の文法と Xamarin.Forms がネイティブ UI をどのようにレンダリングしているのかを理解することが必須となり、覚える知識の量は Xamarin Native よりも確実に多くなります。


3. プラットフォーム固有機能の利用
Xamarin Native の場合、ネイティブと同様に可能です。ネイティブの機能をそのまま使うのでトラブル時の解析も容易です。

Xamarin.Forms の場合、Plugins for Xamarin や DependencyService でプラットフォーム固有機能を利用できますが、コードを共有するためのギミックを噛ませてあるので、トラブル時の解析を行なうには、Plugins for Xamarin や DependencyService がどのような仕組みで動いているかを理解することが必須となり、難易度がその分アップします。


4. 実戦での開発工数
基本的に Xamarin.Forms に一番求めるのは工数低減効果だと思います。
これまで述べたことを総合すると、基本的な機能の作成は Xamarin.Forms を利用することでで工数を低減できますが、Xamarin.Forms は製品レベルに仕上げる際の細かい調整で非常に時間を取られてしまうので、アプリの開発全体で見た場合の工数は、Xamarin Native, Xamarin.Forms どちらを利用した場合でも大差ないというのが私の感触です。よって、工数低減効果だけを狙って Xamarin.Forms を利用しても期待したような効果は得られないことが多いと思われます。


5. 技術的投資価値
では、Xamarin.Forms を利用する価値は無いのかというとそうでは無いと思っています。Xamarin Native は結局のところ iOS, Android のネイティブ API のラッパーです。よって、今後、新しい API のサポートは継続されますが、革新的な発展は見込めません。ただし、技術的は枯れているため、非常に安定しています。

Xamarin.Forms は、現在進行形で鋭意進化中です。実際に1年前と比べてもかなりの機能追加が行なわれており、その進化は目覚しいものがあります。今後のバージョンアップまで加味すると明らかに Xamarin.Forms に技術的投資価値があると私は思っています。ただし、進化中のためバグなども時々あったりします。(すぐバージョンアップで解消されますが)


まとめますと、
今、この瞬間にスポットでアプリを開発したいなら、Xamarin Native が最適
今後、Xamarin で継続して開発を行なたいなら Xamarin.Forms が最適

というのが私の見解です。


以上です。


前の記事、「Xamarinを始める前に知っておきたいこと。 Xamarinで何が時短できるのか? ②開発工数を時短!」はこちらです。