Android
iOS
Xamarin
reactnative
Flutter

なぜ Xamarin を使うのか?(2019年版)

この投稿は、

元投稿者の許可を得て 日本語訳したものです(訳がヘンだったら教えてplz)。


先週、ストックホルムでモバイルデバイスにフォーカスした .NET のコミュニティイベントを開催しました。ひとつの大きな議論は、モバイルアプリ開発を始めるのにどんなツールやフレームワークを使いますか?でした。このブログポストはその議論にインスパイアされたものです。


Xamarin とはなにか?

まず始めに、我々は Xamarin と Xamarin.Forms は同じものではない事を覚えておく必要があります、しかしこれらは同じものであるとよく説明されています。私は Xamarin.Forms を、複数のプラットフォーム向けの UI を共通のコードで構築するためのフレームワークと定義します。Xamarin(Xamarin.iOS, Xamarin.Mac, Xamarin.Android を含む)は、C#(や F#) で、iOS、Mac、Android 向けのネイティブアプリを開発できるプラットフォームです。


なぜ初めてのモバイルアプリ開発に、Xamarin を使用するべきなのですか?

もしあなたが .NET 開発者なのであれば、それはかなり簡単な選択です。あなたは既に C# や XAML を知っていて、ただ新しいプラットフォームについて学習する必要があるだけです。もしあなたが Apple や Google のツールを使って iOS と Android 向けのアプリを開発したいのであれば、まず始めに 2つの新しいプログラミング言語(iOS のために Objective-C または Swift、Android のために Java または Kotlin) を学習する必要があります。 言語について学習したらそれぞれのプラットフォームと API についても学ばなくてはなりません。しかしそれだけではありません、2つの新しい IDE を習得する必要もあります。Xamarin を使用すると、Visual Studio だけで iOS と Android の両方のアプリケーションを開発することができます。


私は .NET開発者ではありませんが、なぜ Xamarin を使うのですか?

あなたが .NET開発者 でなければ、 Xamarin を学習する必要はないと思うかも知れません。

アプリの開発を始めた時はひとつのプラットフォームをターゲットにしていても、後からもっと多くのプラットフォームに対応したいと思うでしょう、特にあなたのアプリが人気になった場合は。Xamarin を使用して UI とビジネスロジックを分離していれば、他のプラットフォームに対応させることが早くできます。また、バックエンドに .NET を使っているならば、バックエンドとのコード共有も可能です。


しかし Flutter と React Native はどうですか?

Flutter も React Native もすばらしい点が多く、素早くアプリを開発できます。しかし Flutter は Xamarin.Forms のようにネイティブのUIコンポーネントが使われるのではなく、(Skia により)独自に描画された UI になります。個人的には、ネイティブ UI が好みです。

React Native は JavaScript が使えるため、Web開発者にとって最適です。しかし多くの人が考えるように、Reactウェブサイトを利用してアプリを作成することはできません。 "HTML" は同じではなく、React Native にはその UI を構築するための独自のコンポーネントがあります。

Flutter も React Native も、ネイティブAPIへの100% API アクセスはできません、これは、ネイティブの機能を使いたい場合それは Flutter や React Native ではサポートされておらず、独自に ブリッジ/プラグイン を作成する必要があることを意味します。また、それをするために Objective-C/Swift と Java/Kotlin を使う必要があります。Xamarin では API に 100% アクセスできるので、プラットフォームが開発者に提供するすべての機能を C# で使用できます。

また、Flutter と React Native はまだ新しく、Xamarin と Xamarin.Forms は何年も前からありとても成熟しています。


ネイティブAPIを使用する場合、Xamarin.Forms と Xamarin のどちらを使用するべきですか?

私のオススメは、いつでも Xamarin.Forms から始めることです。Xamarin.Forms で実現できない機能があっても、ネイティブ API を使ってそれを作成することが簡単な設計になっています。


まとめ

短期的には、あなたが使いやすい言語やツールでアプリを開発すると思いますが、長期的に見ると私は、あなたが .NET開発者でなくとも Xamarin を選択する価値はある、と言うでしょう。あなたが既に .NET開発者であれば、すべてのシチュエーションに Xamarin は対応できるでしょう。

最後に、あなたは使用しているプラットフォームに関係なく台無しにすることができます!全ての言語でダメなコードを書くことができます!そして成功のために最も重要なことはあなたが使用している言語やツールではなく、あなたのユーザー/顧客に素晴らしい価値を提供するために彼らから学ぶ/知ることです。