はじめに
Windows アプリの開発手段は幾つもあります。新たにアプリを作るときにどれを選ぶのがいいのか、まとめてみました。
Windows アプリの開発手段の選択肢をまとめてみた #.NET - Qiita
この続きです。
Windows アプリの種類と概要
前回の記事の表の続きです。「Win API アプリ」「VB6 アプリ」は除きました。↓
| アプリの種類 | WinUI 3 アプリ | UWP アプリ | WPF アプリ | WinForms アプリ | |
|---|---|---|---|---|---|
| 非パッケージの配布 | 可能 | × | 可能 | 可能 | |
| パッケージ化 | MSIX | APPX | MSI など | MSI など | |
| 開発ツール | Visual Studio | VS など | VS | VS | |
| UI デザイナ | なし | なし | あり | あり(神) | |
| UI フレームワーク | XAML | XAML など | XAML | WinForms | |
| 開発言語 | C#(C++) | C# など | C# など | C# など | |
| UI サブシステム | WinUI 3 | WinUI | WPF | WinForms | |
| API | WinRT | × | WinRT | .NET または .NET Framework | |
| × | Win API | × | Win API | ||
| 実行環境 | Win 10 以降 | ||||
| × | Win 7 以前 | ||||
| 導入時期 | 2020年 | 2015年 | 2006年 | 2002年 | |
-
UWP(Universal Windows Platform) は、異なるデバイス向けに提供される Windows 用のアプリを共通の基盤上で動作させることのできる、統合されたプラットフォーム。ベースとなるフレームワークは WinRT (Windowsランタイム)
(ユニバーサルWindowsプラットフォーム - Wikipedia) -
WinRT(Windows Runtime) は、Modern UI スタイルのアプリケーションを作成するバックボーンとなる API である。Windows 8 以降のオペレーティングシステムで実装されている。
WinRT API は、Win32 API サブセットの上に構築されており、Win32 API の代替というよりはむしろ高レベルのラッパーであるといえる。これは内部実装に Win32 API を利用している .NET Framework で使われているのと同じアプローチである。
WinRT アプリケーションはサンドボックス内で実行される。そのため、従来のデスクトップアプリケーションと比べてインストールや動作に関する制約が設けられる。セキュリティ面での安全性は向上する。
(Windowsランタイム - Wikipedia) -
WinUI(Windows UI Library) は、Windows 8 、Windows 8.1 、Windows 10 OS 用の UWP アプリのバックボーンを形成する WinRT プログラミングモデルの一部である。
WinRT のために組込された UI フレームワークの一つ。XAML テクノロジーを使用してユーザーインターフェイスを宣言・記述できる。
(Windows UI Library - Wikipedia) -
WinUI(1) は、Windows OS に組込されて提供される。そのため OS を更新しないと WinUI ライブラリも更新できない。
-
WinUI 2 は、Windows OS から分離してアプリに組込できるようにした
-
WinUI 3 は、Windows App SDK の一部として提供される
(WinUI の歴史とアーキテクチャ #Windows - Qiita) -
Windows App SDK は、Project Reunion として発表された。Microsoft が提供する SDK で、Windows 11 および Windows 10 のデスクトップアプリケーション開発に使用できる、統一された API とコンポーネントセットを提供します。Windows SDK の代替を意図したものではありません。
(Windows App SDK - Wikipedia)
-
Microsoft Windows Installer は、Windows でソフトウェアのインストール・メンテナンス・削除を行うエンジンである。
インストールパッケージ (installation package) には、インストール処理に関する情報とインストールされるファイルとがパッケージングされている。インストールパッケージのデフォルトのファイル拡張子が "MSI" であることから MSI ファイルとも呼ばれる。
(Microsoft Windows Installer - Wikipedia) -
AppX ファイルは、アプリケーションの配布とインストールに使用される配布可能なパッケージ ファイル形式です。Windows 8 で導入され、Microsoft Windows Store で公開されました。 Windows アプリケーションのインストールに必要なすべてのファイルが含まれています。
(APPX ファイルとは? | FILEFORMAT) -
MSIX(MSI eXtended)は、あらゆる Windows アプリに最新のパッケージ化エクスペリエンスを提供する Windows アプリ パッケージ形式です。MSIX パッケージ形式では、Win32、WPF、および WinForms アプリの新しい最新のパッケージ化と展開機能を有効にするだけでなく、既存のアプリ パッケージの機能やファイルのインストールも保持されます。
(MSIX とは? | Microsoft Learn)
UWP の以前と以後について
UWP の利用が提案されていた前後は、Windows アプリの開発手段に対する Microsoft の方針が迷走していた記憶があります。以下の記事に当時の経緯がまとめられているのを見つけました。
- Windowsの主役は再びネイティブ開発に | Embarcadero RAD Studio, Delphi, & C++Builder Blogs
- UWPからデスクトップアプリに回帰すべく、MSが送り出した「Project REUNION」:ASCII.jp
- Windows(および他のプラットフォーム)開発の未来 - InfoQ
整理すると以下のようになるでしょうか。
- Win API を使った「Windows ネイティブアプリ」
いずれ非推奨とされる古いスタイルと考えられていた - .NET Framework および .NET
WinForms が提供される(2002 年) - WPF(Windows Presentation Foundation)が提供される(2006 年)
以前の Win API+GDI と一線を画す UI フレームワークであり、後の WinUI の先祖 - モダン UI スタイルアプリ(ストアアプリ)
Windows 8 に伴って(2012 年)。モバイルデバイスに対応したモダンで安全なアプリ。このために WinRT API が用意された。デスクトップアプリから置換しようとしていた。 - UWP(Universal Windows Platform)が提供される
Windows 10 に伴って(2015 年)。モダン UI スタイルのデスクトップアプリを作ることができる。より安全なプラットフォームを実現する。Windows の機能をフルに活用できない。
.NET アーキテクチャから置換されると考えられていた。
ところが、アプリ開発者の対応は鈍かった - 従来のデスクトップアプリから UWP API を使えるようにするアプローチ
Desktop Bridge が提供される(2016 年)。XAML Island が提供される(2019 年)
Project Reunion が発表される(2020 年)。Windows App SDK がリリースされる(2021 年)
前回と今回の記事の表には、Win 8 および 8.1 の「モダン UI スタイルアプリ」は記述していない。あくまで Windows アプリといえばデスクトップアプリでしょう。
UWP アプリから WinUI 3 アプリに移行するまでの混乱の時期に提供された Desktop Bridge や XAML Island も記述していない。今になって当時のアプローチでアプリを作ろうとしないでしょう。
モダン UI スタイルアプリが発表された頃に「デスクトップアプリ開発はどうなるか」と心配したことを覚えています。また、WinRT や UWP が発表された頃に「.NET アプリ開発は切捨されるのか」と心配されていたことを覚えています。
今日になってみると「デスクトップアプリへの回帰」と「ネイティブおよび .NET の復権」となったと言えるように思います。
Windows アプリの開発手段の選択肢
Windows アプリを開発するのに、以下の選択肢がありそうです。
「UWP」アプリ
| アプリの種類 | UWP アプリ | |
|---|---|---|
| 非パッケージの配布 | × | |
| パッケージ化 | APPX | |
| 開発ツール | VS など | VS など |
| UI デザイナ | あり | なし |
| UI フレームワーク | XAML | HTML |
| 開発言語 | C# など | JavaScript |
| UI サブシステム | WinUI | |
| API | WinRT | |
| × | ||
| 実行環境 | Win 10 以降 | |
| × | ||
| 導入時期 | 2015年 | |
モダン UI スタイルのデスクトップアプリを作れます。
WinRT をベースにした UWP 環境に依存します。Win API は呼出できません。
HTML+JavaScript でアプリ開発するアプローチがありました。
制約が多く、このアーキテクチャでアプリを作成するメリットが、今やありません。
WinUI および WinRT API を使えるアプリを作るなら、下記の「Win UI 3」を使うことになります。
「WinUI 3」アプリ
| アプリの種類 | WinUI 3 アプリ | |
|---|---|---|
| 非パッケージの配布 | 可能 | |
| パッケージ化 | MSIX | |
| 開発ツール | Visual Studio | |
| UI デザイナ | なし | |
| UI フレームワーク | XAML | |
| 開発言語 | C#(C++) | |
| UI サブシステム | WinUI 3 | |
| API | WinRT | × |
| × | Win API | |
| 実行環境 | Win 10 以降 | |
| × | ||
| 導入時期 | 2020年 | |
Project Reunion(Windows App SDK)により、UWP アプリのように WinUI を使えて、Win API も WinRT API も呼出できるようになりました。
アプリのコードは .NET API を呼出しますが、これは SDK に組込されています。
従来の .NET ないし Win API アプリが WinUI および WinRT を使えるようにするアプローチと、従来の UWP アプリが .NET ないし Win API を使えるようにするアプローチがあって、前者が生き残ったようです。ブランドとすると、UWP アプリの後継と言えそうです。
「.NET MAUI」アプリ
| アプリの種類 | .NET MAUI (Win) | |
|---|---|---|
| 非パッケージの配布 | 可能 | |
| パッケージ化 | MSIX | |
| 開発ツール | Visual Studio | |
| UI デザイナ | なし | |
| UI フレームワーク | XAML | |
| 開発言語 | C# | |
| UI サブシステム | WinUI 3 | |
| API | WinRT | × |
| × | Win API | |
| 実行環境 | Win 10 以降 | |
| × | ||
| 導入時期 | 2022年 | |
.NET MAUI は、Xamarin の後継で、「マルチプラットフォーム」対応です。作成できる Windows アプリは「WinUI 3」アプリになります。
「WinForms」アプリ
| アプリの種類 | WinForms (.NET) | WinForms アプリ | |
|---|---|---|---|
| 非パッケージの配布 | 可能 | 可能 | |
| パッケージ化 | MSI など | MSI など | |
| 開発ツール | Visual Studio | Visual Studio | |
| UI デザイナ | あり(神) | あり(神) | |
| UI フレームワーク | WinForms | WinForms | |
| 開発言語 | C# など | C# など | |
| UI サブシステム | WinForms | WinForms | |
| API | .NET | .NET Framework | |
| WinRT | Win API | Win API | |
| 実行環境 | Win 10 以降 | Win 10 以降 | |
| × | Win 7 以前 | Win 7 以前 | |
| 導入時期 | 2020年 | 2002年 | |
伝統的な .NET アプリです。
Visual Studio に組込された UI デザイナが「神」ですね。
アプリのコードが呼出する .NET API は、OS に組込されます。
.NET Framework から .NET に移植されました。.NET 5 以降は WinRT API の呼出も可能になっています。
「WPF」アプリ
| アプリの種類 | WPF (.NET) | WPF アプリ | |
|---|---|---|---|
| 非パッケージの配布 | 可能 | 可能 | |
| パッケージ化 | MSI など | MSI など | |
| 開発ツール | Visual Studio | Visual Studio | |
| UI デザイナ | あり | あり | |
| UI フレームワーク | XAML | XAML | |
| 開発言語 | C# など | C# など | |
| UI サブシステム | WPF | WPF | |
| API | .NET | .NET Framework | |
| WinRT | Win API | Win API | |
| 実行環境 | Win 10 以降 | Win 10 以降 | |
| × | Win 7 以前 | Win 7 以前 | |
| 導入時期 | 2020年 | 2006年 | |
上記の WinForms と同様です。
Visual Studio に用意された UI デザイナは、WinForms ほどではありません。