フレームワーク オプションの概要
この記事では、Windows のアプリの構築を開始するために必要な情報について説明します。
Windows には、WinUI、デスクトップ用 React Native、WPF、C++、C#、.NET、さまざまなクロスプラットフォーム フレームワークなど、アプリを構築するためのさまざまな言語、フレームワーク、ツールが用意されています。 ここでは、どのオプションが最適かを判断するのに役立つ情報を提供します。
WinUI
見栄えが良く、最新の Windows リリースを活用するアプリを作成するには、WinUI と Windows アプリ SDK の使用をお勧めします。 Windows 開発が初めての場合や、新しい Windows アプリで作業を開始する場合、WinUI には、優れた Windows 11 用アプリを作成するために必要なリソースが用意されています。
WinUI は、Windows アプリを構築するための最新のコントロールとスタイルを含が含まれている、XAML マークアップベースのユーザー インターフェイス レイヤーです。 Windows アプリ SDKのネイティブ UI レイヤーとして、Fluent Design を具体化し、各 Windows アプリに、お客様が期待する洗練された操作感を与えます。
Note
Windows アプリ SDK は、Windows アプリ開発プラットフォームの最新の進化ともいえる、新しい開発者向けコンポーネントとツールのセットです。 Windows アプリ SDK で提供される API とツールの統合セットは、Windows 11 から Windows 10 バージョン 1809 までのデスクトップ アプリで、一貫した方法で使用できます。
WinUI はネイティブ UI レイヤーですが、WPF、WinForms、または Win32 アプリで Windows アプリ SDK を使用できます。 これまでに Windows 用アプリを開発したことはあるものの、既存のアプリで Windows アプリ SDK を使い始めることを検討している場合は、フレームワーク固有のガイドを参照してください。
デスクトップ用 React Native
React Native は、クロスプラットフォーム アプリの作成を可能にする開発プラットフォームです。 React Native for Desktop には、Windows および macOS 用の React Native が含まれており、React Native のサポートが Windows SDK に提供されます。 React Native for Desktop では、JavaScript を使用して、Windows 10 および Windows 11 でサポートされているすべてのデバイス用のネイティブ Windows アプリを構築できます。 これには PC、タブレット、2 in 1、Xbox、Mixed Reality デバイスなどが含まれます。
React Native for Desktop では、JavaScript または TypeScript でほとんどのアプリ コードまたはすべてのアプリ コードを記述し、フレームワークによってネイティブの UWP XAML アプリケーションが生成されます。 アプリでプラットフォーム API を呼び出す必要がある場合は、通常、多くのコミュニティ モジュールの 1 つを通じて行うことができます。また、モジュールがまだ存在しない場合は、簡単にネイティブ モジュールを記述して公開することができます。
デスクトップ用の React Native を選択する理由を次に示します。
- できる限り複数のプラットフォーム間でコードを共有したい。または。コードを共有する Web プロパティがある。
- 高速リフレッシュによる、開発者の生産性と内部ループの向上。
- アプリの基本要素 (パフォーマンス、アクセシビリティ、国際化) がネイティブの UWP アプリと同じ。
- JavaScript または TypeScript の使用経験があったり、好んで使っている
- npmjs.com で JavaScript のみのライブラリや多くのネイティブ ライブラリを活用したい。
- アプリでネイティブのコントロール、外観、アニメーション、および色が使用されるため、Windows で使用されるデザイン言語に統合される。 さらに、React Native for Desktop アプリでは、プラットフォーム API を呼び出したり、独自のビュー マネージャーやネイティブ モジュールを記述したりできるため、呼び出すことができる API のセットを侵害する必要はありません。
- 多数のコミュニティ モジュールにより、コミュニティが大規模だったり、成長を続けたりしている。
React Native for Desktop の詳細については、次のリンクを参照してください。
- Windows 用 React Native リポジトリ (GitHub)
- GitHub の macOS 用 React Native リポジトリ
- API リファレンス
- デスクトップ 用 React Native リソース
WPF
WPF は、.NET または .NET Framework にアクセスできる Windows デスクトップ アプリケーション用の確立されたフレームワークです。 WinUI と同様、XAML マークアップを使用して UI をコードから分離します。 WPF には、コントロール、データ バインディング、レイアウト、2D グラフィックスと 3D グラフィックス、アニメーション、スタイル、テンプレート、ドキュメント、メディア、テキスト、タイポグラフィなどの、アプリケーション開発機能の包括的なセットが用意されています。 WPF は .NET の一部です。そのため、.NET API の他の要素を組み込むアプリケーションを構築できます。
さらに、サンドボックス環境をパッケージ化された WPF アプリケーションに統合して、セキュリティを強化できるようになりました。 この機能強化では、新しい Win32 アプリ分離 セキュリティ機能により、コードをほとんど変更する必要がありません。
ヒント
既に WPF に投資している場合は、引き続き WPF を使用し、.NET 9 のモダン化オプションを利用できます。 Microsoft が引き続き WPF に投資していることを知ってアプリを構築できます。 詳細については、Windows 開発者向け FAQ を参照してください。
WPF .NET アプリを所有している場合は、Windows アプリ SDK で提供される Windows プラットフォームの最新の機能と API にもアクセスできます。 詳細については、「WPF アプリで Windows アプリ SDK を使用する」および「デスクトップ アプリの最新化」を参照してください。
ヒント
アプリに最適なフレームワークを決定する際にさらにサポートが必要な場合は、「Windows 開発プロジェクトのトレーニング モジュールに最適なアプリケーション フレームワークを選択する」を参照してください。
その他のネイティブ プラットフォーム オプション
Windows 用アプリの多くは、Win32、Windows フォーム、または UWP を使用して記述されています。 これらのフレームワークはそれぞれサポートされており、バグ、信頼性、およびセキュリティ修正プログラムを引き続き提供されますが、新しい機能やスタイルに対する投資のレベルは異なります。 これらのアプリの種類に関する詳細については、次のタブを参照してください。
Win32 デスクトップ アプリ ("クラシック デスクトップ アプリ" とも呼ばれます) は、Windows とハードウェアへの直接アクセスを必要とする、ネイティブ Windows アプリケーションの当初の種類です。 このため、Win 32 は、最高レベルのパフォーマンスと、システム ハードウェアへの直接アクセスを必要とするアプリケーションに適したプラットフォームと言えます。
C++ で Win32 API を使用すると、WinRT や .NET などのマネージド ランタイム環境以上のターゲット プラットフォームの制御の強化をアンマネージド コードを使用して行うことで、最高レベルのパフォーマンスと効率を実現できます。 ただし、アプリケーションの実行に対してこのようなレベルの制御を行うには、正しく行うための十分な慎重さと注意が必要です。また、実行時のパフォーマンスと開発の生産性が引き換えになります。
ここでは、高パフォーマンスのアプリケーションの構築を可能にする、Win32 API と C++ が提供するものについて説明します。
- リソース割り当て、オブジェクトの有効期間、データ レイアウト、アラインメント、バイト パッキングなどの厳密な制御を含むハードウェア レベルの最適化。
- 組み込み関数による SSE や AVX などのパフォーマンス指向の命令セットへのアクセス。
- テンプレートを使用した、効率的でタイプセーフな汎用プログラミング。
- 効率的で安全なコンテナーとアルゴリズム。
- DirectX (特に Direct3D と DirectCompute)。
- C++/WinRT を使用すれば、Windows ランタイム (WinRT) API への最高レベルのアクセスを実現する、最新のデスクトップ Win32 アプリを作成できます。
さらに、サンドボックス環境を Win32 アプリケーションに統合して、セキュリティを強化できるようになりました。 この機能強化では、新しい Win32 アプリ分離 セキュリティ機能により、コードをほとんど変更する必要がありません。
Windows App SDK によって提供される Windows プラットフォームの最新の機能と API にもアクセスできます。 詳細については、「既存のプロジェクトで Windows アプリ SDK を使用する」および「デスクトップ アプリの最新化」を参照してください。
その他のクロスプラットフォーム オプション
アプリをクロスプラットフォームにする必要がある場合は、React Native for Desktop に加えて、 .NET MAUI または Progressive Web App (PWA)を検討する必要があります。 利用できる選択肢は他にもたくさんあります (一般的なオプションのリストはこちら) が、これらは良い出発点です。
.NET MAUI は、Windows での WinUI の機能を活用しながら、他のオペレーティング システムでの実行も可能にします。 もう 1 つのクロスプラットフォーム オプションであるプログレッシブ Web アプリ (PWA) は、Windows や他のサポートされているプラットフォームではインストールされたネイティブ アプリと同じように機能しながら、ブラウザーでは通常の Web サイトと同様に機能する Web サイトです。
詳細については、次のタブを参照してください。
.NET Multi-platform App UI (MAUI) は、単一の .NET コード ベースから各プラットフォームのネイティブ UI とサービスを活用する、Android、iOS、macOS、Windows アプリケーションを構築するための、オープンソースのクロスプラットフォーム フレームワークです。 .NET MAUI では、プラットフォーム ネイティブ エクスペリエンスが優先されるため、アプリが Windows で最新のユーザー エクスペリエンスを実現できるように、WinUI と Windows アプリ SDK を使用します。 こうすることで、アプリは、WinUI で提供されるすべてのものにアクセスでき、さらには他のプラットフォームにリーチできるようにもなります。
Windows 用の .NET MAUI は、次の場合に適しています。
- モバイル アプリケーションやデスクトップ アプリケーション間で可能な限り .NET コードを共有する必要がある。
- Windows を超えてネイティブ プラットフォームのエクスペリエンスが使用される他のデスクトップやモバイルのターゲットにアプリケーションを公開する必要がある。
- クロスプラットフォーム アプリの構築に C# や XAML を使用する必要がある。
- Web 開発に Blazor を使用しており、そのすべてまたは一部をモバイル アプリケーションやデスクトップ アプリケーションに含めたいと考えている。
.NET MAUI の詳細については、次のリンクを参照してください。
アプリ開発フレームワークの機能の比較
Windows 用アプリケーションの開発には広範なオプションがあります。 最適なオプションは、アプリケーションの要件、既存のコード、およびテクノロジの習熟度によって異なります。 次の表に、Windows で使用できる最も一般的なアプリ開発フレームワークと、各フレームワークでサポートされる機能を示します。
機能 | .NET MAUI | Blazor Hybrid | デスクトップ用 React Native | UWP XAML (Windows.UI.Xaml) | Win32 (MFC または ATL) | Windows フォーム | WinUI 3 | WPF |
---|---|---|---|---|---|---|---|---|
言語 | C# | C# | JavaScript、TypeScript | C#、C++、Visual Basic | C++、Rust | C#、Visual Basic | C#、C++ | C#、Visual Basic |
UI 言語 | XAML/コード | Razor | JSX | XAML | コード | コード | XAML | XAML |
UI デザイナー (ドラッグ アンド ドロップ) |
❌ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ |
UI デバッグ | ホット リロード | ホット リロード | Fast Refresh | ホット リロード | - | ホット リロード | ホット リロード | ホット リロード |
Fluent Design | ✅ | ✅ | ✅ | ✅ (via WinUI 2) | ❌ | ❌ | ✅ | ❌ |
.NET | .NET | .NET | 該当なし | .NET Core および .NET ネイティブ | 該当なし | .NET および .NET Framework | .NET | .NET および .NET Framework |
Windows App SDK | ✅ (詳細) | ✅MAUI 経由 | ✅ (詳細) | ❌ | ✅ | ✅ (詳細) | ✅ | ✅ (詳細) |
タッチに最適 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ |
クロスプラットフォーム | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Xbox/HoloLens アプリ | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
サンドボックス (AppContainer) | ❌ | ❌ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
現在のサポート対象 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
更新プログラムの受信 | ✅ | ✅ | ✅ | ✅ (セキュリティおよびバグ修正) | ✅ | ✅ | ✅ | ✅ |
ロードマップ | GitHub | GitHub | GitHub | 該当なし | 該当なし | GitHub | GitHub | GitHub |
以降でこれらのオプションの詳細をご確認ください。
- Windows 開発者向け FAQ
- .NET Multi-Platform App UI (.NET MAUI)
- ASP.NET Core Blazor Hybrid
- デスクトップ用 React Native
- ユニバーサル Windows プラットフォーム (UWP)
- ATL または MFC の選択に関する推奨事項
- Windows フォーム
- Windows Presentation Foundation (WPF)
- Windows App SDK (WinUI 3) の WinUI
次のステップ
- WinUI を使用して Windows 用アプリの開発を開始する
WinUI は Windows アプリに推奨されるプラットフォームで、次の手順に沿ってすぐに開始できます。
- Windows で開発環境を設定する
Windows は、Windows で実行されるアプリの開発に適しているだけでなく、任意のプラットフォーム用アプリの開発にも強力な環境です。 開発を最大化するために使用できるツールとオプションの詳細について説明します。
Windows developer