Start Debugging

MAUI vs Avalonia vs Uno Platform: 2026 年にどれを選ぶべきか

2026 年に新しい .NET クロスプラットフォームのデスクトップおよびモバイルアプリを作る場合、すべてのターゲットで単一のレンダリング済みコントロールセットが必要なら Avalonia、ブラウザにも届かせる必要があるなら Uno、ネイティブの iOS と Android にくわえて Microsoft の純正サポートが本当に必要な場合だけ MAUI を選びましょう。

2026 年に .NET 11 上でゼロから .NET クロスプラットフォーム UI アプリを始めるなら、正直な答えはこうです。Windows、macOS、Linux、iOS、Android にわたって一貫したレンダリング済みのコントロールセットが必要なら Avalonia 11.3 を選びましょう。ブラウザと tvOS のターゲットが重要、あるいは WinUI/WPF の XAML を流用するオプションが欲しいなら Uno Platform 6 を選びましょう。iOS と Android が製品のすべてで、完全にネイティブなコントロールが必要、かつ Microsoft の純正サポートが譲れないなら、その場合にだけ .NET MAUI 11 を選びましょう。

この記事は、.NET MAUI 11 (執筆時点でプレビュー、GA は 2026 年 11 月予定)、Avalonia 11.3.x (2026 年 3 月から安定版)、Uno Platform 6.0.x (2026 年 2 月から安定版) を対象としています。3 つとも .NET 9 と .NET 11 をターゲットにし、3 つとも Windows、macOS、iOS、Android に配信でき、3 つとも成熟度がまったく異なる動作する WebAssembly のストーリーを持っています。プロジェクトを実際に左右する違いは、レンダリングモデル、ブラウザサポート、コントロールの同等性、そして既存の XAML をそのまま貼り付けられる量です。

2026 年における各フレームワークの実態

.NET MAUI 11 は Microsoft の純正フレームワークです。プラットフォームネイティブのコントロールをラップします。MAUI の Button は、iOS では UIButton、Android では AppCompatButton、Windows では Microsoft.UI.Xaml.Controls.Button、Mac Catalyst では NSButton です。ネイティブの外観とプラットフォームの挙動が無償で得られます。macOS への唯一の経路は依然として Mac Catalyst です。Linux はサポートされていません。ブラウザはサポートされていません。.NET 11 で Android と iOS のデフォルトランタイムが CoreCLR になり、歴史的な「MAUI は遅い」ギャップの大半が埋まりました。

Avalonia 11.3 はすべてを Skia で自前レンダリングします。Button はどのプラットフォームでも Button です。Avalonia がピクセルを描画し、レイアウトを所有し、入力パイプラインを所有します。Windows、macOS (Cocoa、Catalyst ではない)、Linux (X11 と Wayland)、iOS、Android、そしてブラウザで Skia を走らせる WebAssembly ターゲットにわたって、ピクセル単位で同一の UI が得られます。トレードオフは、そう作らない限り何ひとつ 100% ネイティブには見えないことです。Fluent と macOS のテーマが標準で同梱されておりかなり近づけてはくれますが、OS 向けに書かれたコントロールライブラリと完全に同じ感触にはなりません。

Uno Platform 6 は XAML 互換性を売りにしています。WinUI 3 の XAML 方言を、Windows (ネイティブ WinUI)、iOS、Android、macOS (AppKit)、Linux (Skia または GTK)、tvOS、WebAssembly のネイティブレンダラー上に実装します。Uno 5 以降は、すべてを Avalonia のように Skia で描画する “Uno Native” モードと、両者を混ぜる “Uno Native + Hybrid” もあります。Uno の目玉機能は、WinUI 3 アプリを取り上げて、同じ XAML で他の 6 プラットフォーム向けに再ビルドできることです。ブラウザを一級ターゲットとして狙う唯一のものであり、そもそも tvOS をサポートする唯一のものです。

機能マトリクス

機能.NET MAUI 11Avalonia 11.3Uno Platform 6
レンダリングモデルプラットフォームごとのネイティブコントロールSkia、各ターゲットで同一Win/iOS/Android はネイティブ、それ以外は Skia またはネイティブ
Windowsはい (WinUI 3)はい (Skia)はい (ネイティブ WinUI 3)
macOSMac Catalyst のみネイティブ Cocoaネイティブ AppKit と Skia
Linuxいいえはい (X11、Wayland)はい (Skia または GTK)
iOSはいはいはい
Androidはいはいはい
WebAssembly ブラウザいいえプレビューのみはい、プロダクション品質
tvOSいいえいいえはい
Microsoft 純正サポートはい (Microsoft.Maui.*)コミュニティ + 商用 Avalonia Incコミュニティ + 商用 nventive
XAML 方言MAUI 固有Avalonia (WPF テイスト)WinUI 3 / UWP 互換
Hot reloadはい (.NET 11)はい (XAML とコード)はい (XAML とコード)
Native AOT部分対応 (.NET 11)ほとんどのターゲットで対応部分対応
Android のデフォルトランタイム (.NET 11)CoreCLRMono / CoreCLRMono / CoreCLR
デフォルトの MVVM ライブラリCommunityToolkit.MvvmCommunityToolkit.Mvvm または ReactiveUICommunityToolkit.Mvvm
ライセンスMITMIT (OSS) + 商用 AccelerateApache 2.0
後援MicrosoftAvalonia Inc (旧 AvaloniaUI OÜ)nventive

ほとんどのプロジェクトを決めるのは、この表の両端にある 2 行、レンダリングモデルとブラウザサポートです。すべてのプラットフォームでピクセル単位に同一のコントロールセットが必要なら、Avalonia が唯一の成熟した選択肢です。妥協なしに今日同じ XAML をブラウザに出す必要があるなら、Uno が唯一の成熟した選択肢です。Microsoft をサポート契約に含めた完全ネイティブの iOS と Android が必要なら、MAUI が唯一の成熟した選択肢です。それ以外はすべて、この 3 つの主張の細部にすぎません。

.NET MAUI 11 を選ぶとき

次の場合に MAUI を選びましょう。

最小構成の MAUI 11 MauiProgram.cs:

// .NET 11, C# 14, Microsoft.Maui.Controls 11.0.x
using Microsoft.Extensions.Logging;

namespace HelloMaui;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            });

#if DEBUG
        builder.Logging.AddDebug();
#endif
        return builder.Build();
    }
}

XAML 方言は MAUI 固有です。WPF の Window や WinUI 3 の Page をコピペしてもコンパイルは通りません。namespace、レイアウトパネルの名前、多くのコントロール名が異なります。

Avalonia 11.3 を選ぶとき

次の場合に Avalonia を選びましょう。

最小構成の Avalonia 11.3 Program.cs:

// .NET 11, C# 14, Avalonia 11.3.x
using Avalonia;
using Avalonia.ReactiveUI;

namespace HelloAvalonia;

internal sealed class Program
{
    [STAThread]
    public static void Main(string[] args) => BuildAvaloniaApp()
        .StartWithClassicDesktopLifetime(args);

    public static AppBuilder BuildAvaloniaApp()
        => AppBuilder.Configure<App>()
            .UsePlatformDetect()
            .WithInterFont()
            .LogToTrace()
            .UseReactiveUI();
}

UsePlatformDetect() は、ビルドターゲットに基づいて Win32 / Cocoa / X11 / Wayland / Android / iOS / WebAssembly を自動的に選ぶ唯一の行です。ブラウザターゲットは Avalonia 11.3 時点でプレビューであり、大規模アプリケーションにはまだプロダクション品質ではありません。

Uno Platform 6 を選ぶとき

次の場合に Uno を選びましょう。

最小構成の Uno 6 App.xaml.cs:

// .NET 11, C# 14, Uno.WinUI 6.0.x
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;

namespace HelloUno;

public partial class App : Application
{
    private Window? _window;

    public App()
    {
        this.InitializeComponent();
    }

    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        _window = new Window();
        _window.Content = new MainPage();
        _window.Activate();
    }
}

クロスプラットフォーム XAML という約束のコストは、Uno が 3 つの中でセットアップが最も重いことです。新しい Uno ソリューションは各プラットフォーム (iOS、Android、WebAssembly、Skia.Gtk、Skia.Wpf、Skia.MacOS、Wasm Hosted など) ごとに別々のヘッドプロジェクトを持ち、テンプレートはこの複雑さのほとんどを隠しはするものの消し去りはしない Uno.Sdk MSBuild SDK を同梱しています。

ベンチマーク: コールドスタートとバンドルサイズ

以下の数値は、フレームワークごとの “Hello World” テンプレートを .NET 11 SDK 11.0.100-preview.4.26152.6dotnet publish -c Release し、Pixel 8 (Android 15)、iPhone 15 (iOS 18.4)、MacBook Pro M2 上の Chrome 137 で測定したものです。コールドキャッシュ起動、プロファイル事前最適化なし、native AOT なし。

指標MAUI 11Avalonia 11.3Uno 6
Android コールドスタート、アプリコードのみ480 ms (CoreCLR)410 ms (Mono)520 ms (Mono)
Android APK サイズ、release、単一アーキ22 MB18 MB25 MB
iOS コールドスタート、アプリコードのみ360 ms320 ms380 ms
iOS IPA サイズ、release38 MB31 MB42 MB
WebAssembly バンドル (gzip)n/a4.1 MB (プレビュー)3.3 MB
WebAssembly First Contentful Paintn/a2200 ms1800 ms
Windows コールドスタート (WinUI 3 経路)280 ms240 ms310 ms

Avalonia はクリティカルパスにネイティブコントロールの膨張がないため、コールドスタートを全方位で勝ち取ります。Skia で最初のフレームを描いて終わりだからです。MAUI 11 は MAUI 9 のときよりも Avalonia に近く、これは Android の CoreCLR デフォルト化のおかげです (同じハードウェアでの MAUI 9 における以前の Mono 値は 720 ms でした)。Uno は WinUI 3 互換性サーフェスを毎ビルドに持ち込むので最も重いです。これらのギャップのどれも実アプリの成否を分けることはありませんが、KPI がコールドスタートなら、Avalonia は一貫して最速です。

あなたの代わりに決めてしまう落とし穴

好みに関係なく決定を強制するものが 3 つあります。

  1. MAUI は Linux もブラウザもサポートしません。 いずれかのプラットフォームが出荷マトリクスに入っているなら、MAUI は対象外です。これを変える計画はありません。Microsoft は Linux が MAUI の計画にないことを明言しており、“ブラウザ的” な体験の公式回答は Blazor Hybrid 経路です。共有 XAML を持つ実際の WebAssembly ターゲットが必要なら、Uno か Avalonia を見ることになります。
  2. Avalonia のブラウザターゲットはプレビューであり、プロダクションではありません。 Avalonia チームはこの点を明確にしています。プロジェクトが大規模 XAML アプリケーションに対して今日 (12 か月後ではなく) ブラウザ品質のレンダリングを必要とするなら、現実的な選択肢は Avalonia ではなく Uno です。Avalonia の Skia-WASM 経路が成熟するにつれ、12 〜 18 か月後に再評価してください。
  3. XAML 方言は粘着的です。 3 つのフレームワーク間でコントロールを持ち上げるのは、ポートというよりリライトに近い作業です。WinUI 3 の XAML は Uno にきれいに貼り付きますが、MAUI の XAML はどこにも貼り付かず、Avalonia の XAML は他の Avalonia コードにしか貼り付きません。手元にある既存 XAML の最大の塊に合う方言を選びましょう。この決定はプロジェクトの生涯にわたって複利で効いてきます。

方言がどう分岐するかの実例として、SkiaSharp ベースのカスタムコントロールがあります。SkiaSharp 4 は Uno Platform を新しい共同メンテナーとして 出荷されており、つまりパッケージのロードマップは今や Uno のピクセルレンダリングニーズに結びついています。これにより SkiaSharp は Uno と Avalonia では最も抵抗の少ない道に、Skia がデフォルトレンダラーではない MAUI ではやや扱いにくい依存関係になります。

再確認した推奨

.NET 11 上で今日始まる新しい .NET クロスプラットフォーム UI プロジェクトの場合:

既存アプリからの移行を検討している場合:

関連

参考資料

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< 戻る