先日のBuildで、Microsoftから突如「.NET Multi-platform App UI (MAUI)」がリリースされました。
ここではMAUIとは何か?Xamarin.Formsはどうなるの?ということを簡潔にまとめたいと思います。
さて2020年5月23日現在、MAUIに関する情報ソースとして最も信頼できそうなのは次の二つでしょう。たぶんね。
- Introducing .NET Multi-platform App UI | .NET Blog
- GitHub - dotnet/maui: .NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.
MAUIとは何かと端的にいうと次のとおりです。
- .NETによるクロスプラットフォームUIフレームワークで
- モバイルとデスクトップをサポートする
- Xamarin.Formsの進化系であり
- .NET 6とタイミングをあわせて2021年11月にリリースされる予定で
- プレビュー版は今年の終盤にリリースされる予定です
さて、いくつかポイントを絞って補足しましょう。
MAUIって何が良いの?
おもにXamarin.Formsと比較した場合、つぎの利点があります。
- .NET CoreとMonoを統合した.NET 6上で動作する
- 単一プロジェクト、単一コードベース(画像などのリソース含む)でクロスプラットフォーム開発が可能
- XAMLによるMVVMに加え、C#でUIを構築するためのMVUのサポートと、Blazorのサポート
マルチウィンドウがサポートされるので、Surface Duo向けの実装などに最適!なんて記載もありましたがどうなんでしょう?
またパフォーマンスが改善されたり、コントロールの拡張がよりシンプルになったりもするようです。
Blazorについては、実のところ情報が無さすぎてどうサポートされるのか全く不明です。
C#でUIを構築するためのMVUのサポートってなんぞ?
ここでは二つの側面が含まれています。
ひとつは、XAMLと異なりマークアップ言語ではなく、C#言語によるUIを実装する仕組みの提供という側面。
もうひとつは、C#でUIを実装するにあたり、 Model-View-Update (MVU) パターンのサポートです。
実際にサンプルコードを見てみましょう。これはこちらのブログに公開されているものです。
readonly State<int> count = 0; [Body] View body() => new StackLayout { new Label("Welcome to .NET MAUI!"), new Button( () => $"You clicked {count} times.", () => count.Value ++) ) };
FlutterのようUIをコードで実装する手段が正式にサポートされ、その場合はMVUパターンを推奨するので、そのためのフレームワークの実装が提供されるということですね。
もともと、XAML自体が学習コストがそこそこ高く、XAMLじゃなくてC#で実装している人が散見されていましたから、C#だけで実装できるということは、それだけでメリットがあるでしょう。ホットリロードとの相性が良いなんて説明もありました。
個人的にはデザイナーの提供が難しくなりそうで、そうなると導入の敷居が少し上がる気がするので、そのあたりをどうするのかな?という疑問がちょっと無いこともないです。自分ひとりで使うならいいんですけどね。まさかdesigner.csの復権??まさかね・・・
XAMLはなくなるの?
なくなりません。共存します。基本的にはつぎの二つを選択することになるようです。
- MVVMパターンを採用したXAMLによるUI実装
- MVUパターンを採用したC#によるUI実装
Xamarin.Formsはなくなるの?
ブランドとしてはYes。ただしおそらく、実質的にはリブランドで、.NET 6がでるまでの間はXamarin.Formsという名称で提供が続きますが、.NET 6のリリースとともにMAUIにリブランドされて、以後は終息に向かいます。
基本は移行することを検討されているようで、移行ツールも提供されるそうです。
ちょっと気になること
2020.09.26 訂正
GithubにXamarin.Formsとの対比表がありますが、いくつか気になる点があります。
macOS(つまり現在のXamarin.Mac)とWPFの開発が、CommunityからMicrosoftに変更されています。
あんまりCommunityの協力が得られていないのかな?コードを非公開に戻すということはないと思いますが・・・
Xamarinのもと中の人のお話だと、macOSはもともとMicrosoft内部製でおそらく誤植、WPFはCommunity開発者がMSにJoinしたからということで、大きな心配はないようでした。
@atsushienoさん、情報提供ありがとうございました!
> macOS(つまり現在のXamarin.Mac)とWPFの開発が、CommunityからMicrosoftに変更されています。 あんまりCommunityの協力が得られていないのかな?
— Atsushi Eno (@atsushieno) September 25, 2020
Macは最初からMS社員が開発しているのでたぶん表の勘違いかな。WPFはコミュニティ開発者だったのが社員として加入したからだと思う。 https://t.co/G29acbnjMh
以上です。それではまた。