Windows アプリ プラットフォームの選択Choose your Windows app platform

Windows PC 用の新しいデスクトップ アプリケーションを作成する場合は、まず、どのアプリケーション プラットフォームを使用するかを決定します。When you want to create a new desktop application for Windows PCs, the first decision you make is which application platform to use. Windows には、次の 4 つの主要なアプリケーション プラットフォームが用意されており、それぞれに長所があります。Windows provides four main application platforms, each with different strengths:

  • ユニバーサル Windows プラットフォーム (UWP): このプラットフォームには、Windows 10 を実行するすべてのデバイスに共通の型システム、API、およびアプリケーション モデルが用意されています。Universal Windows Platform (UWP): This platform provides a common type system, APIs, and application model for all devices that run Windows 10. UWP アプリケーションは、ネイティブでもマネージドでもかまいません。UWP applications can be native or managed.
  • WPFWindows フォーム: これらの .NET ベースのプラットフォームには、マネージド アプリケーションに共通の型システム、API、およびアプリケーション モデルが用意されています。WPF and Windows Forms: These .NET-based platforms provide a common type system, APIs, and application model for managed applications.
  • Win32: これは、Windows とハードウェアへの直接アクセスを必要とするネイティブ C/C++ の Windows アプリケーション向けの最初のプラットフォームです。Win32: This is the original platform for native C/C++ Windows applications that require direct access to Windows and hardware. これにより、Win32 API 最高レベルのパフォーマンスとシステム ハードウェアへの直接アクセスを必要とするアプリケーションに適したプラットフォームになっています。This makes the Win32 API the platform of choice for applications that need the highest level of performance and direct access to system hardware.

これらの各プラットフォームには、一連の UI フレームワークおよび UI コントロールが備わっています。それを使用すると、従来の Windows デスクトップで実行される Word、Excel、Photoshop などのデスクトップ アプリを作成し、その環境固有の機能を最大限に活用できます。Each of these platforms include a complete UI framework and set of UI controls that let you create desktop apps like Word, Excel, and Photoshop that run in the classic Windows desktop and take full advantage of that environment's specific features. Windows 10 では、この各プラットフォームで Windows UI ライブラリ (WinUI) を使用したユーザー インターフェイスの作成がサポートされています。On Windows 10, each these platforms also support using the Windows UI Library (WinUI) to create their user interfaces.

これらのプラットフォームの一部はいくつかの特徴を共有し、特定の種類のアプリケーションにより適しています。Some of these platforms share some traits and are better suited for certain types of applications. たとえば、UWP と .NET はどちらも Visual Studio と緊密に統合されています。For example, both UWP and .NET have deep integration with Visual Studio. これには、特に開発者の生産性、洗練されたカスタマイズ可能な UI、アプリケーションのセキュリティの領域において、多くの利点があります。This provides many benefits, especially in the areas of developer productivity, sophisticated and customizable UI, and application security. これらのフレームワークは、UI を迅速に作成するためのビジュアル デザイナーと UI マークアップをサポートしているため、基幹業務アプリケーションに特に適しています。Because these frameworks support visual designers and UI markup for rapidly creating UI, they are particularly well-suited for line-of-business applications.

注意

どのアプリ プラットフォームを選択しても、Windows 10 の多くの機能を使用して、アプリで最新のエクスペリエンスを実現できます。No matter which app platform you choose, you can use many Windows 10 features to deliver a modern experience in your app. たとえば、デスクトップ アプリが WPF、Windows フォーム、または Win32 API を使用して構築されている場合でも、MSIX パッケージの展開を引き続き利用できます。For example, even if your desktop app is built using WPF, Windows Forms, or the Win32 API, you can still use MSIX package deployment. デスクトップ アプリを現代化するためのすべての方法の詳細については、「デスクトップ アプリの現代化」を参照してください。For more information about all the ways to modernize your desktop apps, see Modernize your desktop apps.

UWPUWP

UWP は、Windows 10 アプリケーションおよびゲーム用の最先端のプラットフォームです。UWP is the leading-edge platform for Windows 10 applications and games. XAML マークアップを使用してコード (ビジネス ロジック) から UI (プレゼンテーション) を分離する、高度にカスタマイズ可能なプラットフォームです。It's a highly customizable platform that uses XAML markup to separate UI (presentation) from code (business logic). UWP は、高度な UI、スタイルのカスタマイズ、およびグラフィックス集中型のシナリオを必要とするデスクトップ アプリケーションに適しています。UWP is suitable for desktop applications that require a sophisticated UI, styles customization, and graphics-intensive scenarios. また、UWP には、既定の UX エクスペリエンスのための Fluent Design System の組み込みサポートもあり、Windows ランタイム (WinRT) API へのアクセスを提供します。UWP also has built-in support for the Fluent Design System for the default UX experience and provides access to the Windows Runtime (WinRT) APIs. Fluent を導入することにより、UWP では一般的な入力方式 (インク、タッチ、ゲームパッド、キーボード、マウスなど) が自動的にサポートされます。By adopting Fluent, UWP automatically supports common input methods such as ink, touch, gamepad, keyboard, and mouse.

UWP は、Windows PC 用のデスクトップ アプリケーションを作成できるだけでなく、Xbox、HoloLens、および Surface Hub アプリケーションで唯一サポートされているプラットフォームでもあります。Not only can you use UWP to create desktop applications for Windows PCs, but UWP is also the only supported platform for Xbox, HoloLens, and Surface Hub applications. UWP は最新で最先端のアプリケーション プラットフォームです。UWP is our newest, leading-edge application platform.

UWP の詳細については、次の記事を参照してください。For more information about UWP, see the following articles:

WPFWPF

WPF は、.NET Core にアクセスできるか、.NET Framework にフル アクセスできるマネージド Windows アプリケーション用に確立されたプラットフォームであり、XAML マークアップを使用してコードから UI を分離します。WPF is the established platform for managed Windows applications with access to .NET Core or the full .NET Framework, and it also uses XAML markup to separate UI from code. このプラットフォームは、高度な UI、スタイルのカスタマイズ、およびグラフィックス集中型のシナリオを必要とするデスクトップ アプリケーションのために設計されています。This platform is designed for desktop applications that require a sophisticated UI, styles customization, and graphics-intensive scenarios. WPF の開発スキルは UWP の開発スキルに似ているため、WPF から UWP アプリへの移行は Windows フォームからの移行よりも簡単です。WPF development skills are similar to UWP development skills, so migration from WPF to UWP apps is easier than migration from Windows Forms.

WPF の詳細については、次の記事を参照してください。For more information about WPF, see the following articles:

Windows フォームWindows Forms

Windows フォームは、軽量 UI モデルや、.NET Core へのアクセスと .NET Framework へのフル アクセスを備え、Windows マネージド アプリケーションのために用意された最初のプラットフォームです。Windows Forms is the original platform for managed Windows applications with a lightweight UI model and access to .NET Core or the full .NET Framework. プラットフォームを初めて使用する場合であっても、開発者がアプリケーションの構築をすぐに開始できる点で優れています。It excels at enabling developers to quickly get started building applications, even for developers new to the platform. これは、ビジュアルおよび非ビジュアルのドラッグアンドドロップ コントロールの大規模な組み込みコレクションを備えた、フォームベースの高速なアプリケーション開発プラットフォームです。This is a forms-based, rapid application development platform with a large built-in collection of visual and non-visual drag-and-drop controls. Windows フォームでは XAML を使用しないため、後でアプリケーションを UWP に拡張する場合は、UI を完全に再記述する必要があります。Windows Forms does not use XAML, so deciding later to extend your application to UWP entails a complete re-write of your UI.

Windows フォームの詳細については、次の記事を参照してください。For more information about Windows Forms, see the following articles:

Win32Win32

C++ で Win32 API を使用すると、WinRT や .NET などのマネージド ランタイム環境以上のターゲット プラットフォームの制御の強化をアンマネージド コードを使用して行うことで、最高レベルのパフォーマンスと効率を実現できます。Using the Win32 API with C++ makes it possible to achieve the highest levels of performance and efficiency by taking more control of the target platform with unmanaged code than is possible on a managed runtime environment like WinRT and .NET. ただし、アプリケーションの実行に対してこのようなレベルの制御を行うには、正しく行うための十分な慎重さと注意が必要です。また、実行時のパフォーマンスと開発の生産性が引き換えになります。However, exercising such a level of control over your application's execution requires greater care and attention to get right, and trades development productivity for runtime performance.

ここでは、高パフォーマンスのアプリケーションの構築を可能にする、Win32 API と C++ が提供するものについて説明します。Here are a few highlights of what the Win32 API and C++ offers to enable you to build high-performance applications.

  • リソース割り当て、オブジェクトの有効期間、データ レイアウト、アラインメント、バイト パッキングなどの厳密な制御を含むハードウェア レベルの最適化。Hardware-level optimizations, including tight control over resource allocation, object lifetimes, data layout, alignment, byte packing, and more.
  • 組み込み関数による SSE や AVX などのパフォーマンス指向の命令セットへのアクセス。Access to performance-oriented instruction sets like SSE and AVX through intrinsic functions.
  • テンプレートを使用した、効率的でタイプセーフな汎用プログラミング。Efficient, type-safe generic programming by using templates.
  • 効率的で安全なコンテナーとアルゴリズム。Efficient and safe containers and algorithms.
  • DirectX、特に Direct3D および DirectCompute (UWP は DirectX 相互運用機能も提供)。DirectX, in particular Direct3D and DirectCompute (note that UWP also offers DirectX interop).

詳細については、以下の記事を参照してください。For more information, see the following articles:

プラットフォームの比較:UWP、WPF、Windows フォームPlatform comparison: UWP, WPF, and Windows Forms

次の表は、Windows フォーム、WPF、UWP のさまざまな特性を詳細に比較したものです。The following table compares various characteristics of Windows Forms, WPF, and UWP in detail.

機能またはシナリオFeature or scenario UWPUWP WPFWPF Windows フォームWindows Forms
サポートされているバージョンSupported versions Windows 10Windows 10 Windows 7 以降Windows 7 and later Windows 7 以降Windows 7 and later
言語Languages C#、 C++/WinRT、 C++/CX、VB、JavaScriptC#, C++/WinRT, C++/CX, VB, JavaScript C#、 C++/CLI (C++ マネージド拡張)、F#、VBC#, C++/CLI (Managed Extensions for C++), F#, VB C#、 C++/CLI (C++ マネージド拡張)、F#、VBC#, C++/CLI (Managed Extensions for C++), F#, VB
UI ランタイムUI runtime ネイティブ (C++WinRT および C++/CX) とマネージド (.NET ネイティブ)Native (C++/WinRT and C++/CX) and managed (.NET Native) マネージド (.NET Framework および .NET Core 3)Managed (.NET Framework and .NET Core 3) マネージド (.NET Framework および .NET Core 3)Managed (.NET Framework and .NET Core 3)
オープン ソースOpen source はい (Windows UI ライブラリのみ)Yes (Windows UI Library only) はい (.NET Core のみ)Yes (.NET Core only) はい (.NET Core のみ)Yes (.NET Core only)
XAML をサポートSupports XAML はいYes はいYes いいえNo
特長Strengths
  • UI の XAML マークアップXAML markup for UI
  • 豊富でカスタマイズ可能な UXRich and customizable UX
  • 既存のコードベースは .NET Standard 対応Your existing code bases are .NET Standard compliant
  • 高 DPI サポートHigh DPI support
  • Windows デバイス間での複数の入力の種類のサポート (タッチ、ペン、ゲームパッド、マウス、キーボードなど)Support for multiple input types across Windows devices (including touch, pen, gamepad, mouse, and keyboard)
  • Xbox、HoloLens、IoT、または Surface Hub のサポートSupport for Xbox, HoloLens, IoT or Surface Hub
  • オプションの高密度 (コンパクト) UIOptional dense (compact) UI
  • ネイティブ C++ のサポートSupport for native C++
  • 最適化されたバッテリー寿命Optimized battery life
  • 最新のアクセシビリティ サポート (スクリーン リーダーなど)Modern accessibility support (such as screen readers)
  • リッチ テキスト データ機能 (組み込みのスペル チェックなど)Rich text data capabilities (such as built-in spell check)
  • 手描き入力のサポートInking support
  • アプリケーション コンテナーによるセキュリティで保護された実行 (たとえば、信頼されていないコンテンツのサンドボックス化)Secure execution via application containers (for example, untrusted content is sandboxed)
  • UI の XAML マークアップXAML markup for UI
  • 豊富でカスタマイズ可能な UXRich and customizable UX
  • Microsoft とパートナーのコントロールの大規模なコレクションLarge collection of controls from Microsoft and partners
  • 高密度 UIDense UI
  • Windows 7 のサポートSupport for Windows 7
  • 入力検証のプラットフォームのサポートPlatform support for input validation
  • 迅速なアプリケーション開発Rapid application development
  • UI を構築するための WYSIWYG エディターWYSIWYG editor for building UI
  • Microsoft とパートナーのコントロールの大規模なコレクションLarge collection of controls from Microsoft and partners
  • 高密度 UIDense UI
  • Windows 7 のサポートSupport for Windows 7
  • キーボードとマウス入力Keyboard and mouse input
サポートが限定されているシナリオScenarios that have limited support
  • 複数のウィンドウのサポート 1Multiple window support1
  • 入力検証のプラットフォームのサポート 1Platform support for input validation1
  • Windows 7 はサポートされませんWindows 7 is not supported
  • 一部の Windows ランタイム API では、Windows 10 の特定の最小バージョンが必要ですSome Windows Runtime APIs require specific minimum versions of Windows 10
  • 完全なプラットフォームのサポートとシェルの統合 (たとえば、現在、UWP はシステム トレイの統合またはすべてのデバイスへのフル アクセスをサポートしていません)Full platform support and shell integration (for example, UWP currently doesn't support System Tray integration or full access to all devices)
  • ディスク上のすべてのファイルへの直接アクセスDirect access to all files on disk
  • ADO.NETADO.NET
  • .NET Standard 以外または Windows アプリ認定キット以外に準拠した API を使用する既存のコードベース クラス ライブラリExisting code-base class libraries that use non-.NET Standard or non-Windows App Certification Kit compliant APIs
  • ローカル ネットワーク ループバックのサポート (つまり、アプリがターゲット デバイスにループバックの除外を作成せずに localhost と通信する必要がある場合)Local network loopback support (that is, if your app needs to communicate with localhost without creating a loopback exemption on the target device)
  • 集中型のファイル I/OIntensive file I/O
  • 高 DPI サポート 2High DPI support2
  • タッチ入力 2Touch input2
  • 高 DPI サポート 2High DPI support2
  • タッチ入力 2Touch input2
  • カスタマイズ可能な UICustomizable UI
  • 豊富なグラフィックスとユーザー エクスペリエンス (タッチやアニメーションなど)Rich graphics and user experiences (such as touch and animations)
  • ビューとデータ モデルの豊富な抽象化Rich abstraction of views and data models

1 Windows 10 の今後のリリースでこのシナリオに対処する機能が公開されています。1 We have publicly announced features that will address this scenario in a future release of Windows 10.

2 プラットフォームには、このシナリオに対する最上級の API のサポートがありませんが、開発者はこのシナリオを回避策によりサポートできます。2 Although the platform lacks first-class API support for this scenario, developers can support this scenario with workarounds.

Windows アプリで Windows UI ライブラリを使用するUse the Windows UI Library with Windows apps

Windows のメインのアプリ プラットフォームを補うために、アプリで Windows UI ライブラリ (WinUI) を使用することもできます。To supplement the main Windows app platforms, you can also use the Windows UI Library (WinUI) in your apps. WinUI は、ダウンレベル バージョンの Windows 10 を対象とする UWP アプリ用の WinRT コントロールの新しいバージョンと更新バージョンを提供するツールキットとして開始されました。WinUI started as a toolkit that provides new and updated versions of WinRT controls for UWP apps that target down-level versions of Windows 10. WinUI 3 (まだプレビュー段階) の時点で、WinUI は、UWP、.NET、および Win32 アプリ プラットフォームにわたって Windows 10 アプリのプレミア ネイティブ ユーザー インターフェイス (UI) フレームワークになるように範囲が拡大しています。As of WinUI 3 (still in preview), WinUI is growing in scope to become the premier native user interface (UI) framework for Windows 10 apps across UWP, .NET, and Win32 app platforms.

Windows アプリでは、次の方法で WinUI を使用できます。You can use WinUI in the following ways in Windows apps.

  • WinUI 2.x:WinUI 2.x:

    • UWP アプリでは、Windows SDK によって提供される WinRT コントロールの代わりに、WinUI 2.x コントロールを使用できます。UWP apps can use WinUI 2.x controls in place of WinRT controls provided by the Windows SDK. WinUI のこれらのリリースには、刷新されたコントロールと、Windows SDK からの既存のコントロールの更新されたバージョンの両方が含まれています。These releases of WinUI include both all-new controls and updated versions of existing controls from the Windows SDK.
    • WPF、Windows フォーム、および C++/Win32 の既存のアプリを更新し、XAML Islands を使用して WinUI 2.x コントロールをホストできます。You can update existing WPF, Windows Forms, and C++/Win32 apps to host WinUI 2.x controls by using XAML Islands.
  • WinUI 3 (プレビュー段階):WinUI 3 (preview):

    • WinUI 3 以降では、WinUI ベースの UI を全面的に使用する .NET アプリと C++/Win32 アプリおよび UWP アプリを作成できます。Starting with WinUI 3, you can create .NET and C++/Win32 apps and UWP apps that use an entirely WinUI-based UI. このリリースには、これらのアプリを作成するために必要なすべてを提供する Visual Studio プロジェクト テンプレートが含まれています。This release includes Visual Studio project templates that provide everything you need to create these apps.

注意

WinUI 3 はまだプレビュー段階であり、運用環境のアプリでは使用しないでください。WinUI 3 is still in preview, and should not be used for production apps.

その他のアプリ プラットフォームOther app platforms

プログレッシブ Web アプリ (PWA)Progressive Web Apps (PWAs)

PWA により、開発者は Web サイト コードをパッケージ化し、Windows 10 の PC 上のアプリケーションのようにインストールして実行できるようになります。PWAs let developers package their website code so it can be installed and run like an application on Windows 10 PCs. 詳細については、プログレッシブ Web アプリに関する記事を参照してください。For more information, see Progressive Web Apps.

XamarinXamarin

Xamarin は、Windows 10 用でありながら iOS および Android でも実行できるクロスプラットフォーム アプリケーションの作成に使用します。Use Xamarin to build cross-platform applications for Windows 10 that can also run on iOS and Android. 詳細については、Xamarinに関する記事を参照してください。For more information, see Xamarin.

Uno PlatformUno Platform

Uno Platform は、Windows UWP ベースのコード (C# および XAML) を iOS、Android、macOS、Linux、WebAssembly で実行できるようにします。The Uno Platform enables Windows UWP-based code (C# and XAML) to run on iOS, Android, macOS, Linux and WebAssembly. Windows 10 2004 (19041) での UWP に対する完全な API 定義と、Windows.UI.Xaml などの UWP API のパーツの実装を提供し、UWP アプリケーションをこれらのプラットフォームで実行できるようにします。It provides full API definitions for UWP in Windows 10 2004 (19041), and the implementation of parts of the UWP API, such as Windows.UI.Xaml, to enable UWP applications to run on these platforms. 詳しくは、Uno Platform に関するドキュメントをご覧ください。For more information, see the Uno Platform docs.