nuits.jp blog

C#, Xamarin, WPFを中心に書いています。Microsoft MVP for Development Technologies。

.NET MAUIって何?

先日のBuildで、Microsoftから突如「.NET Multi-platform App UI (MAUI)」がリリースされました。

ここではMAUIとは何か?Xamarin.Formsはどうなるの?ということを簡潔にまとめたいと思います。

さて2020年5月23日現在、MAUIに関する情報ソースとして最も信頼できそうなのは次の二つでしょう。たぶんね。

MAUIとは何かと端的にいうと次のとおりです。

  • .NETによるクロスプラットフォームUIフレームワークで
  • モバイルとデスクトップをサポートする
  • Xamarin.Formsの進化系であり
  • .NET 6とタイミングをあわせて2021年11月にリリースされる予定で
  • プレビュー版は今年の終盤にリリースされる予定です

さて、いくつかポイントを絞って補足しましょう。

MAUIって何が良いの?

おもにXamarin.Formsと比較した場合、つぎの利点があります。

  1. .NET CoreとMonoを統合した.NET 6上で動作する
  2. 単一プロジェクト、単一コードベース(画像などのリソース含む)でクロスプラットフォーム開発が可能
  3. 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にリブランドされて、以後は終息に向かいます。

基本は移行することを検討されているようで、移行ツールも提供されるそうです。

ちょっと気になること

GithubにXamarin.Formsとの対比表がありますが、いくつか気になる点があります。

macOS(つまり現在のXamarin.Mac)とWPFの開発が、CommunityからMicrosoftに変更されています。

あんまりCommunityの協力が得られていないのかな?コードを非公開に戻すということはないと思いますが・・・

以上です。それではまた。