dotnet-ui-chooser について
Web、クロスプラットフォーム、Windows向けの UI フレームワークを選ぶ .NET チーム向けの判断ツリーです。対象プラットフォーム、チームの経験、UI の複雑さ、性能、移行要件ごとに選択肢を比較し、個別フレームワークの実装詳細は扱いません。
主な機能
- 01対象プラットフォームで候補を絞る
- 02チームの経験との適合性を比較
- 03UI と性能の要件を評価
- 04既存フレームワークの移行先を整理
- 05Blazor のホスティング方式を選択
活用シーン
- 01.NET アプリの UI フレームワーク選定
- 02Windows デスクトップフレームワークの比較
- 03モバイルと Web の対応範囲の評価
- 04既存 UI アプリの近代化計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wshaddix/ dotnet-skills --skill dotnet-ui-chooserインストール後、Claude Code で/dotnet-ui-chooserを入力して読み込まれたか確認します。
詳細
dotnet-ui-chooser
.NET アプリケーション向けの UI フレームワーク選定の決定木です。Web(Blazor Server、Blazor WebAssembly、Blazor Hybrid)、クロスプラットフォーム(MAUI、Uno Platform、Avalonia)、Windows 専用(WinUI 3、WPF、WinForms)のフレームワークを扱います。5 つの判断要素に基づく体系的なトレードオフ分析を示し、チームがそれぞれの制約に応じて選択肢を評価できるようにします。
対象範囲: このスキルでは、フレームワーク選定の決定木とフレームワーク間の比較を扱います。各フレームワークの詳細、パターン、API は、それぞれのフレームワークスキルが担当します。フレームワーク間の移行ガイダンスは、[skill:dotnet-wpf-migration] が担当します。
対象外: フレームワーク固有の実装パターンについては、以下に記載されている各スキルを参照してください。フレームワーク間の移行パスについては、[skill:dotnet-wpf-migration] を参照してください。デスクトップ UI のテストについては、[skill:dotnet-ui-testing-core] を参照してください。
相互参照:Blazor のホスティングとレンダーモードについては [skill:dotnet-blazor-patterns]、MAUI のパターンについては [skill:dotnet-maui-development]、Uno Platform のパターンについては [skill:dotnet-uno-platform]、WinUI 3 のパターンについては [skill:dotnet-winui]、.NET 8 以降のモダンな WPF については [skill:dotnet-wpf-modern]、WinForms のモダナイズについては [skill:dotnet-winforms-basics] を参照してください。
決定木
この体系的なフローを使って、プロジェクトの制約に基づきフレームワークの候補を絞り込みます。各分岐では、決定的な答えではなくトレードオフを示します。最適な選択は、チームが各要素をどの程度重視するかによって異なります。
ステップ 1:対象プラットフォーム
最も大きな制約です。アプリケーションがサポートする必要のあるプラットフォームを特定します。
Target platforms?
|
+-- Web browser only
| --> Blazor (Server, WebAssembly, or Auto)
| See "Blazor Hosting Model Selection" below
|
+-- Windows only
| --> WinUI 3, WPF, or WinForms
| See "Windows Framework Selection" below
|
+-- Mobile (iOS / Android)
| +-- Also need desktop?
| | +-- Yes --> MAUI or Uno Platform
| | +-- No --> MAUI or Uno Platform
| |
| +-- Also need web?
| +-- Yes --> Uno Platform (WASM target) or Blazor Hybrid in MAUI
| +-- No --> MAUI or Uno Platform
|
+-- All platforms (web + mobile + desktop)
| --> Uno Platform (broadest reach)
| or Blazor Hybrid in MAUI (web UI, native shell)
|
+-- Desktop cross-platform (Windows + macOS + Linux)
--> Uno Platform or Avalonia
MAUI supports macOS/Windows but not Linux
ステップ 2:チームの専門知識
既存のチームスキルに合ったフレームワークを選び、習熟にかかる時間を短縮します。
| チームの強み | 適合性が高い | 適合性が中程度 | 習得の難易度が高い |
|---|---|---|---|
| WPF / WinUI XAML | WPF、WinUI 3 | Uno Platform(WinUI XAML サーフェス) | Blazor(Razor 構文) |
| Web(HTML/CSS/JS) | Blazor | Uno Platform(WASM ターゲット) | WPF、WinUI(XAML) |
| Xamarin.Forms | MAUI(直接の後継) | Uno Platform | Blazor、WPF |
| C# だが UI フレームワークの経験なし | WinForms(最も簡単)、Blazor | MAUI | WPF、WinUI(XAML の習得が必要) |
| React / Angular | Blazor WebAssembly(SPA モデル) | Uno Platform(WASM) | WPF、WinUI |
ステップ 3:UI の複雑さ
UI 要件に合ったレンダリング機能を持つフレームワークを選びます。
| UI のニーズ | 最適な候補 | ほかに検討する候補 |
|---|---|---|
| 豊富なネイティブ Windows UI(カスタムコントロール、アニメーション) | WinUI 3、WPF | Uno Platform(WinUI サーフェス) |
| Web スタイルのレイアウト(レスポンシブ、CSS ベース) | Blazor | Uno Platform(Skia レンダリング) |
| シンプルなデータ入力フォーム、社内ツール | WinForms | Blazor(Static SSR)、WPF |
| ピクセル単位で正確なクロスプラットフォーム UI | Uno Platform(Skia レンダリング) | Avalonia |
| OS ごとにプラットフォームネイティブな外観 | MAUI(ネイティブコントロール) | Uno Platform(ネイティブモード) |
| デスクトップ/モバイルアプリに組み込む Web コンテンツ | MAUI の Blazor Hybrid | WPF/WinForms の Blazor Hybrid |
ステップ 4:パフォーマンス要件
フレームワークのレンダリングアーキテクチャは、パフォーマンス特性に影響します。
| パフォーマンス要素 | WinUI 3 | WPF | WinForms | Blazor Server | Blazor WASM | MAUI | Uno Platform |
|---|---|---|---|---|---|---|---|
| 起動時間 | 高速 | 高速 | 高速 | 高速(サーバー) | 低速(ダウンロード) | 中程度 | 中程度 |
| レンダリング | DirectX(ネイティブ) | DirectX(マネージド) | GDI+ | サーバー側 HTML | ブラウザー DOM | プラットフォームネイティブ | Skia またはネイティブ |
| AOT サポート | 該当なし(Windows) | 該当なし(Windows) | 該当なし(Windows) | 該当なし(サーバー) | 対応(.NET 8 以降) | 対応(iOS では必須) | 対応(WASM) |
| GPU アクセラレーション | 対応 | 対応 | 限定的 | 該当なし | ブラウザー GPU | プラットフォーム GPU | Skia GPU |
| ユーザーあたりのメモリ | ローカルのみ | ローカルのみ | ローカルのみ | サーバー回路 | ブラウザーのサンドボックス | ローカルのみ | ローカルのみ |
| オフライン対応 | 対応 | 対応 | 対応 | 非対応 | 対応 | 対応 | 対応(ネイティブターゲット) |
ステップ 5:移行パス
既存のアプリケーションをモダナイズする場合、移行元のフレームワークによって、実現可能な移行先が制限されます。
| 現在のフレームワーク | 自然な移行先 | 代替の移行先 | 判断要因 |
|---|---|---|---|
| UWP | WinUI 3 | Uno Platform | Windows のみ:WinUI 3。クロスプラットフォームが必要:Uno Platform。 |
| Xamarin.Forms | MAUI | Uno Platform | API を直接引き継ぐ後継:MAUI。より幅広いプラットフォームへの対応:Uno Platform。 |
| WPF (.NET Framework) | WPF on .NET 8+ | WinUI 3 or Uno Platform | リスクを最小限に抑える:WPF .NET 8+。モダンな UI:WinUI 3。クロスプラットフォーム:Uno Platform。 |
| WinForms (.NET Framework) | WinForms on .NET 8+ | Blazor or WPF | リスクを最小限に抑える:WinForms .NET 8+。より優れた UI:WPF。Web での提供:Blazor。 |
| ASP.NET MVC / Razor Pages | Blazor (Static SSR) | Stay on Razor Pages | インタラクティブ性が必要:Blazor。コンテンツ中心:Razor Pages も引き続き有効です。 |
| React / Angular SPA | Blazor WebAssembly | Keep existing SPA | .NET 専任のチーム:Blazor。既存の JS チーム:SPA を継続。 |
Blazor ホスティングモデルの選択
移行先が Blazor の場合、インタラクティブ性の要件、デプロイの制約、規模に基づいてホスティングモデルを選択します。
| 考慮事項 | Static SSR | InteractiveServer | InteractiveWebAssembly | InteractiveAuto | Blazor Hybrid |
|---|---|---|---|---|---|
| インタラクティブ性 | フォームのみ | 完全 | 完全(ダウンロード後) | 完全 | 完全(ネイティブ) |
| サーバーが必要 | はい(レンダリング) | はい(永続的な回線) | 静的ファイルホストのみ | はい(初回のみ)、以降は静的 | いいえ |
| オフライン | いいえ | いいえ | はい | 部分的 | はい |
| スケーラビリティ | 高い | 回線数により制限 | 高い | 高い(WASM の実行後) | 該当なし(ローカル) |
| 初回描画 | 高速 | 高速 | 遅い(WASM のダウンロード) | 高速(最初は Server) | 即時 |
| SEO | 対応 | プリレンダリング | プリレンダリング | プリレンダリング | 該当なし |
| 最適な用途 | コンテンツサイト、シンプルなフォーム | ダッシュボード、基幹業務アプリ | 公開アプリ、オフライン PWA | 両方の利点を活用 | Web UI を備えたデスクトップ/モバイルアプリ |
Blazor のパターンの詳細については、[skill:dotnet-blazor-patterns] を参照してください。
Windows フレームワークの選択
アプリケーションの対象が Windows のみの場合、UI の充実度、チームの専門知識、モダナイズの目標に基づいて選択します。
比較表
| 考慮事項 | WinUI 3 | WPF (.NET 8+) | WinForms (.NET 8+) |
|---|---|---|---|
| UI パラダイム | モダンな XAML、Fluent Design | 従来型の XAML、Fluent はオプション(.NET 9+) | デザイナー主導、ドラッグ&ドロップ |
| レンダリング | DirectX (Windows App SDK) | DirectX (WPF layer) | GDI+ |
| MVVM のサポート | CommunityToolkit.Mvvm | CommunityToolkit.Mvvm、成熟したエコシステム | 可能ですが、一般的ではありません |
| DI / Host builder | はい | はい | はい(.NET 8+) |
| 高 DPI | ネイティブ | .NET 8+ で改善 | PerMonitorV2(構成が必要) |
| ダークモード | ネイティブの Fluent | Application.ThemeMode (.NET 9+) | 実験的(.NET 9+) |
| タッチ/ペン | 完全対応 | 基本的な対応 | 限定的 |
| 学習曲線 | 中程度(XAML) | 中程度(XAML) | 低い |
| 成熟度 | 比較的新しい(2021 年以降) | 非常に成熟(2006 年以降) | 非常に成熟(2002 年以降) |
| UWP の移行パス | 直接 | 間接(XAML の違い) | 該当なし |
それぞれを選ぶ場合
WinUI 3 — モダンな Fluent Design、タッチ/ペン入力、最新の Windows 統合機能(ウィジェット、通知、Mica)を必要とする、新しい Windows ネイティブアプリケーションに最適です。Windows 10 2004 以降が必要です。[skill:dotnet-winui] を参照してください。
WPF on .NET 8+ — 既存の WPF の専門知識を持つチーム、豊富な WPF コントロールエコシステムが必要なアプリケーション、または .NET Framework 上の WPF から移行するプロジェクトに最適です。Fluent テーマは .NET 9+ で利用できます。[skill:dotnet-wpf-modern] を参照してください。
WinForms on .NET 8+ — 迅速なプロトタイピング、社内ツール、シンプルな CRUD フォーム、UI の洗練度より開発速度を重視する Windows ユーティリティに最適です。最も学習しやすいフレームワークです。[skill:dotnet-winforms-basics] を参照してください。
クロスプラットフォームフレームワークの選択
アプリケーションを複数のプラットフォームで実行する必要がある場合、対応範囲、レンダリングモデル、API の範囲を比較します。
比較表
| 検討項目 | MAUI | Uno Platform | Avalonia |
|---|---|---|---|
| 対象プラットフォーム | iOS、Android、macOS、Windows、Tizen | iOS、Android、macOS、Windows、Linux、Web(WASM) | iOS、Android、macOS、Windows、Linux、Web(WASM) |
| UI のレンダリング | プラットフォームネイティブのコントロール | Skia(ピクセル単位で正確)またはプラットフォームネイティブ | Skia(ピクセル単位で正確) |
| XAML 方言 | MAUI XAML(Xamarin.Forms の後継) | WinUI XAML サーフェス | Avalonia XAML(WPF に着想を得たもの) |
| ホットリロード | XAML + C# のホットリロード | XAML + C# のホットリロード | XAML のホットリロード |
| メンテナー | Microsoft(ファーストパーティ) | Uno Platform(オープンソース、商用サポートあり) | コミュニティ(オープンソース、商用サポートあり) |
| エコシステム | NuGet + MAUI Community Toolkit | NuGet + Uno Toolkit + Uno Extensions | NuGet + Avalonia コミュニティ |
| Blazor Hybrid | 組み込み(BlazorWebView) | 対応 | 組み込みではない |
| Linux デスクトップ | 非対応 | 対応(Skia + GTK/Framebuffer) | 対応 |
| Web(WASM) | 非対応 | 対応 | 対応(ブラウザー) |
| 移行元 | Xamarin.Forms(直接) | UWP(WinUI サーフェスを直接利用) | WPF(類似した XAML) |
それぞれを選ぶ場合
MAUI — iOS と Android を対象とするモバイル優先のアプリに最適で、Windows/macOS にも任意で対応できます。プラットフォームネイティブのコントロールにより、OS ネイティブの外観と操作感を実現します。Xamarin.Forms から直接移行できます。[skill:dotnet-maui-development] を参照してください。
Uno Platform — Linux と Web を含む、最も幅広いプラットフォームへの対応が必要なアプリに最適です。単一の XAML コードベースを使用します。WinUI XAML API サーフェスを採用しているため、UWP または WinUI のチームがクロスプラットフォームへ移行する際の自然な選択肢です。[skill:dotnet-uno-platform] を参照してください。
Avalonia — WPF に着想を得た XAML を備える、コミュニティ主導のクロスプラットフォームフレームワークです。Linux デスクトップへの対応が充実しています。WPF スタイルの開発を好み、コミュニティがメンテナンスするツールを利用できる場合に検討してください。このプラグインが所有するものではありません。詳細は Avalonia のドキュメント を参照してください。
トレードオフの概要マトリックス
すべてのフレームワークを横断してまとめた、すぐに参照できる一覧です。
| フレームワーク | プラットフォーム | レンダリング | XAML | オフライン | AOT | 最適な用途 |
|---|---|---|---|---|---|---|
| Blazor Server | Web | サーバー HTML | Razor | いいえ | 該当なし | LOB アプリ、ダッシュボード |
| Blazor WASM | Web | ブラウザー DOM | Razor | はい | はい | 一般公開向け Web アプリ、PWA |
| Blazor Hybrid | モバイル + デスクトップ | WebView | Razor | はい | 部分的 | ネイティブシェル内の Web UI |
| MAUI | モバイル + デスクトップ | ネイティブ | MAUI XAML | はい | iOS で必須 | モバイル優先のアプリ |
| Uno Platform | すべて | Skia / ネイティブ | WinUI XAML | はい | WASM | 最も幅広いプラットフォーム対応 |
| Avalonia | デスクトップ + モバイル | Skia | Avalonia XAML | はい | 部分的 | Linux デスクトップ、WPF チーム |
| WinUI 3 | Windows | DirectX | WinUI XAML | はい | 該当なし | 最新の Windows アプリ |
| WPF | Windows | DirectX | WPF XAML | はい | 該当なし | 成熟した Windows アプリ |
| WinForms | Windows | GDI+ | なし(デザイナー) | はい | 該当なし | 内部ツール、プロトタイプ |
よくある判断シナリオ
よく遭遇する状況に対する体系的なガイダンスです。各シナリオでは、唯一の答えを示すのではなく、トレードオフを提示します。
シナリオ:新しい社内業務アプリケーション(Windows のみのユーザー)
- 迅速な提供、最小限の UI:WinForms
- データ可視化を備えたリッチな UI:WPF または WinUI 3
- Web での展開を優先:Blazor Server(InteractiveServer)
- 将来的にクロスプラットフォーム化する可能性:Uno Platform または Blazor
シナリオ:顧客向けモバイルアプリ
- iOS + Android、ネイティブな外観:MAUI
- iOS + Android + Web:Uno Platform または MAUI の Blazor Hybrid
- 既存の Web チームがある:MAUI の Blazor Hybrid
シナリオ:レガシーな .NET Framework WPF アプリケーションのモダナイズ
- 変更を最小限に抑える:WPF を .NET 8+ に移行(同じ XAML、最新のランタイム)
- UI をモダンに刷新(Windows のみ):WinUI 3 に移行
- クロスプラットフォームが必要:Uno Platform に移行(WinUI XAML のサーフェス)
- Web での提供が必要:重要なフローを Blazor で書き直す
シナリオ:一般公開向け Web アプリケーション
- コンテンツが多く、SEO が重要:Blazor Static SSR
- インタラクティブな SPA:Blazor WebAssembly または InteractiveAuto
- リアルタイムのダッシュボード:Blazor Server(InteractiveServer)
シナリオ:Windows、macOS、Linux を対象とするデスクトップアプリケーション
- ピクセルパーフェクトな UI:Uno Platform(Skia)または Avalonia
- MAUI は Linux デスクトップをサポートしていません
エージェントが注意すべき点
- 単一のフレームワークを「最良」として推奨しないでください。 すべてのフレームワークにはトレードオフがあります。トレードオフを示したうえで、チームが制約に基づいて判断できるようにしてください。
- 新しい顧客向けアプリケーションに WinForms を推奨しないでください。 WinForms は社内ツールやプロトタイプには適していますが、顧客向け製品に必要な最新の UI 機能が不足しています。
- MAUI と Uno Platform の対象プラットフォームを混同しないでください。 MAUI は Linux または Web(WASM)をサポートしていません。Uno Platform はサポートしています。推奨する前に、必要なプラットフォームの一覧を確認してください。
- Blazor WebAssembly がデフォルトでオフライン動作すると想定しないでください。 WASM はブラウザーで実行されますが、オフライン対応には明示的な PWA の構成(サービスワーカー、キャッシュ戦略)が必要です。
- Avalonia を Microsoft がサポートするフレームワークと混同しないでください。 Avalonia はコミュニティによって保守されています。商用サポートの選択肢はありますが、Microsoft の製品ではありません。
- UWP から WPF への直接移行を提案しないでください。 UWP の自然な移行先は WinUI 3 です(同じ XAML API サーフェス)。WPF は異なる XAML 方言を使用します。
- クロスプラットフォームの選択肢として Blazor Hybrid を見落とさないでください。 MAUI の Blazor Hybrid を使うと、Web UI のスキルをモバイル/デスクトップアプリに活用できます。ネイティブ XAML を習得する代替手段として有効です。
- WPF がレガシーだと決めつけないでください。 .NET 8+ の WPF は新機能(.NET 9+ の Fluent テーマ、パフォーマンスの改善など)とともに積極的に保守されています。Windows デスクトップでは、依然として有力な選択肢です。