キーポイント
- Companies increasingly need to build client apps that work on multiple operating systems. For developers who wish to use their existing C# and XAML skills to build such apps, this means using either the Uno Platform or Xamarin.Forms.
- Xamarin.Forms and the Uno Platform have more in common than what separates them.
- The future of Xamarin.Forms will be .NET MAUI (Multi-platform Application UI.) MAUI is both the next version of Xamarin.Forms and a completely new product.
- The future of the Uno Platform will build upon Project Runion and WinUI 3. These are Microsoft's solutions for the future of native Windows development and still early in their development.
- The key differentiator between the Uno Platform and Xamarin.Forms is support for WebAssembly. The Uno Platform has it, but Xamarin.Forms doesn't.
- A few scenarios force the choice between frameworks, but it's mostly a case of sticking with the option closest to what developers are most familiar with and personal preference.
ひとつのオペレーティングシステム(OS)のみを対象にアプリケーションを開発するというのは、今日では例外的であり、一般的ではありません。ですが、それぞれのOS用に異なるバージョンのアプリを作ることは、ほとんどの場合において良策ではありません。
アプリを書くのは一度だけにして、それが複数のプラットフォームで動作すれば、開発者やビジネス関係者にとっては都合がよいのです。既知の言語やツールを再利用することができるなら、それもまた魅力的です。
Windows/.NETの世界では、これを実現可能なフレームワークが2つあります — Xamarin.FormsとUno Platformです。どちらもアプリ開発にC#とXAMLを使って、Windows PCから複数のオペレーティングシステム用のアプリを構築するために、同じインフラストラクチャとVisual Studioツーリングを使用します。
共通する部分が非常に多いので、クロスプラットフォームなプロジェクトを新たに作る時、その違いを理解した上で最適なものを選ぶのは難しいかも知れません。
この記事では、Uno PlatformとXamarin.Formsの相違点、共通点、関連性について説明します。その上で、2つのプラットフォームが今後どうなるのか、どうやって選択すればよいのか、を見ていきます。
私は先日、ある企業が新プロジェクトでどちらを使うべきかを決定するための手助けをしました。どちらにも選択する上での確固たる主張があり、そのどちらも妥当なものでした。
彼らがどちらをどのような理由で選択したのか、これから話したいと思いますが、その前に2つの意見の詳細を見ていきましょう。
Xamarin.Formsとは何か?
Xamarin.FormsはMicrosoftが所有するオープンソースのテクノロジで、モバイルデバイス用アプリを開発するためのものです。Xamarin.AndroidとXamarin.iOSというネイティブなライブラリ上に、各プラットフォームへの.NETマッピングを提供する抽象化を提供することで、これを実現しています。
Xamarin.Formsのおもな目的はAndroidとiOS用のアプリ開発ですが、tvOSとwatchOSもサポートする他、Windows(UWP経由)の部分的なサポートや、コミュニティがメンテナンスするmacOS、Tizen、WPF、WebAssemblyのサポートも提供されています。
Xamarin.Formsには、Windows上のVisual StudioとMac上のVisual Studio for Macによるツーリングのサポートがあり、C#およびF#を使用してアプリを開発することができます。XAMLを使用することも可能です。
Uno Platformとは何か?
Uno Platform(あるいは単にUno)は、C#とXAMLのコードを複数のプラットフォーム用にコンパイルすることの可能な、オープンソースのソリューションです。サポート対象プラットフォーム用に新たな抽象化を開発する代わりに、UWPからAPIとUIコントロールをマップすることで、
UWP、Android、iOS、macOS、WebAssembly上で動作するアプリの開発をサポートします。最近になってLinux、Tizen、WPFのサポート追加も開始されました。
UnoもXamarin.Android、Xamarin.iOS、Xamarin.Macを使ってそれぞれのオペレーティングシステムのネイティブ機能にアクセスしていますが、その他のプラットフォームには独自のソリューションを使用します。
Windows上のVisualStudioとMac上のVisual Studio for Macによるツーリングのサポートがある点も同じです。
そう、共通点がたくさんあるのです。すなわち、いずれも
- オープンソースである(が、有償サポートもある)
- AndroidとiOSをサポートする
- レベルはまちまちだが、他のプラットフォームもサポートする
- C#とXAMLによるアプリの記述が可能である
- WindowsとMac上のVisual Studioで動作する
2つを区別するのは、次のような違いです。
- Xamarin.FormsはMicrosoftが所有し支援しているのに対し、UnoはNVentive(カナダの企業)が支援している。
- Unoが既存のUWP APIを流用しているのに対し、Xamarin.Formsはプラットフォーム不問の下位機能抽象化を新たに開発した。
- Xamarin.Formsが"モバイル"アプリを強く意識しているのに対し、Unoは"普遍的"であることを目指している。
- どちらのプロジェクトもほぼ同じ時期にスタートしているが、Xamarin.Formsが開始時(2014年)からオープンソースであったのに対し、Unoが公開されたのは2018年である。この結果としてXamarin.Formsの方が広範なユーザベースと包括的なAPIサポートを持ち、コミュニティやサードパーティコントロールベンダによって広くサポートされている。ただし、Unoのコミュニティとベンダによるサポートも拡大している。
将来像
その他の重要な差別要因として、これらのソリューションの将来がどのようなものか、というものがあります。
UnoはUWPをベースにしていますが、UWPはWinUI3にリプレースされつつあります。WinUI3は次世代(第3世代 — 数え方によりますが)のWindows UIテクノロジで、Windowsの開発ストーリを再定義し、解放し、統合しようというMircosoftの取り組みであるProject Reunionの一部です。WinUI3はWindows開発者にとって大きな変革になるでしょう。Unoがそれに追いついていくには、多くの開発作業が必要になるはずです。そのWinUI3は長期的なプロジェクトで、1.0リリースからまだ6か月しか経っていません。幸いにもUnoのコアチームとMicrosoftは強固なパートナシップを結んでいて、(現時点では)オープンソースでないWinUI3のコードへのアクセスも許されています。この関係性によってUnoは、過去何回かのWinUI3のプレビューリリースでは、互換性を持ったバージョンを同日にリリースすることができているのです。
WinUIがWindows用のベストプラットフォームの構築のみを念頭に置いているのに対して、Unoはこれを"WinUI everywhere"に拡張しようとしています。
Xamarin.Formsの将来はもう少し複雑です。Xamarin.Formsのバージョン5.0は2020年末にリリースされましたが、この名称はこれが最後になる予定です。Multi-platform Application UI(MAUI)が.NET 6の一部として、2021年11月に登場するからです。さまざまな意味において、これはXamarin.Formsバージョン6であって、既存のXamarin.Formsアプリ用の簡単なマイグレーションパスも用意される予定です。ただし、内部的には大掛かりなオーバーホールが行われている上に、多数の変更が計画されていることから、新プロジェクトに等しい存在になるリスクもあります。提案された変更の実装を現在も進めているMAUIチームの現状を考えると、11月のリリースでは開発期間が短すぎるのではないか、という懸念もあります。期日には間に合うに違いありませんが、結果として機能や品質がなおざりになるかも知れません。
.NET 6の一部であるMAUIは、いくつかの新機能にアクセスすることが可能です。特に注目すべきなのは、単一のプロジェクトで必要なプラットフォームすべてをターゲットにできる点で、これによって開発エクスペリエンスが大幅に簡略化されます。ただし、基盤となるツーリングが整備されてMAUIアプリでこれが可能になれば、UNOにもこれと同じメリットが期待できます。
MAUIによって得られるその他の大きなメリットとしては、Xamarin.Formsのスコープが拡大されて、デスクトップアプリとモバイルアプリの開発を同じようにサポート可能になる点が挙げられます。Android、iOS、Mac、Windowsのアプリを公式にサポートすることで、Unoとの大きなギャップが詰められることになります。
WebAssemblyが重要な差別要因
どちらのツールもデスクトップとモバイルを同じようにサポートするようになれば、大きな違いはWebということになります。UnoはWebAssemblyバージョンのアプリを生成することで、これをサポートしています。MAUIでは、WebAssemblyバージョンのアプリ出力をサポートする予定はありません。Microsoftが、ネイティブアプリケーションとの組み合わせでWebAssemblyをサポートするという、別のアプローチを採用しているからです。
Microsoftは、Blazor内にWebAssemblyアプリを作成する別のツールを用意して、"Blazor Desktop"アプリとしてデスクトップ用のBlazor Webアプリにパッケージし、その中でMAUIを使用する、という方法を提供しています。さらに、Blazor Mobile Bindingsプロジェクトでは、Blazor Webアプリを、Xamarin.Formsを使用したネイティブなモバイルアプリに変換する、という試験も行っています。デバイス上のネイティブ実行とWeb実行の可能なアプリが必要な場合には、まずBlazorを使ってほしい、というのがMicrosoftの考え方なのです。
選び方
2つの選択肢に共通点が多いことと、将来的に不明な部分があることから、どちらを選ぶかは難しい問題のように思えますが、いくつかのシナリオでは、一方がもう一方よりも優位な場合があります。
- Xamarin.Formsを使ったアプリがすでにあるのならば — このまま使い続けましょう。
- 既存のUWPアプリがあれば — Unoを選びましょう。
- WebAssemblyバージョンが必要で、UIにはXAMLを使い続けたい — Unoを使いましょう。
- すでにあるXamarin.FormsアプリをWebAssemblyに拡張したい — Unoを使って、Xamarin.FormsアプリのUWPバージョンをWebAssemblyアプリに変換する、というハイブリッドアプローチが可能です。
- Microsoftの提供するもののみを対象としたければ — Xamarin.Formsを使うしかありません。
- Linux上で実行したければ — Unoを選びましょう。
これら以外のシナリオでは、判断はもう少し難しくなります。Xamarin.Formsでは使えるがUnoでは(まだ)使えない、というAPIがいくつかありますが、将来的にこの差は解消されるものと思われます。アプリに必要な機能が使用可能かどうかチェックすれば、選択は自ずと決まりますが、そうでなければ、最終的には個人的な好みの問題になります。
間違った選択をするかも知れない、という心配はありません。開発が始まった後でフレームワークを変更するのは望ましいことではありませんが、スクラッチからやり直す必要はないのです。どちらのフレームワークも同じアーキテクチャと設計パターンをサポートしていますし、RAD(Rapid Application Development)が可能です。最小限の変更を行うだけで、コードの大部分を別のプロジェクトに移行することができるはずです。
記事の冒頭で私は、先日新たなプロジェクトのテクノロジ選定に関わったこと、どちらかを選択する明確な理由のなかったこと、などを話しました。この会社は、当面はAndroidとiOS上で動作し、将来的にはWindowsをサポート対象に加えられるような、まったく新しいアプリを希望していました。C#とXAMLで記述して、C#/ASP.NETで開発された既存のバックエンドと通信するこのアプリは、規模的には大きいのですが、必要なデバイスAPIや機能は明確になっていました。
どちらも選択可能でしたが、この会社は次のような理由でUnoを選びました。
- 開発スタッフがXamarin.FormsうよりもUWP XAMLやAPIに慣れていたため。
- この会社は小規模でしたが、業界では影響力を持っていました。熱意を持った小企業が成長を目論む時の効果の高さをよく知っている彼らは、Unoとそれを支援する企業が持つ多くのエキサイティングな潜在能力に注目したのです。
- Webベースのアプリをリリースする予定はありませんでしたが、それができることで、重要なステークホルダたちが開発の進捗状況を簡単に確認できるようになります。アプリの配布やインストール、プレビュービルドの管理に煩わされることもなくなりますし、必要な人が社内のWebサイトを訪れて、最新版を確認すればよいのです。
これらの理由がすべての企業やプロジェクトに当てはまる訳ではありませんが、選択肢のあることで、この企業は、自分たちのニーズにより合ったものを手に入れることができました。選択肢は、あるに越したことはありません。選択肢がなければ決定は簡単ですが、自分たちが必要とするものに最適であるという可能性は低くなります。UnoかXamarin.Forms/MAUIかを選択するのは簡単ではない場合もありますが、選択肢がないよりはよいことです。
著者について
Matt Lacey氏はコンサルタント/フリー開発者として、モバイルデバイスやWindows PC用のアプリ開発に20年以上の経験を持っています。氏はWindows DevelopmentのMicrosoft MVPで、複数のオープンソースプロジェクトのコントリビュータをしており、現在は2冊めの著書の執筆中です。Uno Platformによる開発を紹介するこの書籍は、Packtから今年後半に出版される予定です。