はじめに
Windows アプリの開発手段は幾つもあります。新たにアプリを作るときにどれを選ぶのがいいでしょうか。
知りたくて幾つか記事を読んでみました。例えば、
これまで使ったことのないコンセプトも出てきてよく分からないし、新たに聞く用語もあるので調べてみるがさらに分からなくなります。
記事を読んでいて混乱する理由は、記事で同列に並べられているコンセプトが、実は異なるレイヤーのもののようだと分かってきました。
そこで、用語とコンセプトを整理してみました。
Windows アプリの種類と概要
アプリの種類と概要を整理して、キーワードを調べてみました。
| アプリケーションの種類 | UWP アプリ | デスクトップアプリ | ||||||
| 配布方式 | 主に Microsoft Store 経由 | 直接ダウンロード可能 | ||||||
| パッケージ形式 | APPX | MSI または独自インストーラ | ||||||
| 開発ツール | Visual Studio | VS など | 右のいずれか | VS | VS | VB | VC++ など | VC++ など |
| UI フレームワーク | XAML | HTML | XAML | WinForms | 独自 | MFC など | なし | |
| 開発言語 | C# など | JavaScript | C# など | C# など | VB | C++ など | C++ など | |
| UI サブシステム | WinUI | WPF | WinForms | VB ランタイム | × | |||
| API | WinRT | .NET Framework | VB ランタイム | × | ||||
| ×(Win API) | Win API | |||||||
| 実行環境 | Win 10 | |||||||
| × | Win 7 以前 | |||||||
-
Windows API とは、Microsoft Windows のシステムコール用 API のこと。特に Windows 95 以降や Windows NT で利用できるものは Win32 API と呼ばれる。
(Windows API - Wikipedia) -
.NET Framework は、実行中のアプリにさまざまなサービスを提供する、Windows 向けのマネージド実行環境です。
実行中のアプリを処理する実行エンジンである共通言語ランタイム (CLR) と、開発者が独自のアプリから呼び出すことができる検証済みの再利用可能なコード ライブラリである .NET Framework クラス ライブラリから構成されています。
(.NET Framework の概要 | Microsoft Docs) -
WinForms(Windows Forms) は、.NET Framework に含まれるグラフィカルユーザーインターフェイス API である。Windows API(GDI/GDI+)をマネージコードでラップし、Windows のユーザーインターフェイス要素へのアクセスを提供するフレームワークである。
従来から Visual C++ 用に提供されていた、複雑なネイティブ C++ ベースの MFC や、旧 Visual Basic(VB6)のフォームにとって代わるものとされる。
(Windows Forms - Wikipedia) -
WPF(Windows Presentation Foundation) は、.NET Framework 3.0 以降に含まれるユーザインタフェースサブシステムである。
(Windows Presentation Foundation - Wikipedia)
WPF は、Extensible Application Markup Language (XAML) を使用して、アプリケーションのプログラミング用に、宣言型モデルを提供します。
(WPF とは - Visual Studio | Microsoft Docs) -
UWP(Universal Windows Platform) は、異なるデバイス向けに提供される Windows 用のアプリを共通の基盤上で動作させることのできる、統合されたプラットフォームである。
Windows 8 で、従来の Win APIベース(ネイティブコード)のデスクトップアプリや、.NET Frameworkベース(マネージコード)のデスクトップアプリに加えて、新たに WinRT をフレームワークとする Windows Store アプリが登場した。Windows Store アプリは、C#/VB.NET/C++言語+XAML もしくは JavaScript 言語+HTML を用いて開発される、Windows Store を通して配布される、WinRT のサンドボックス内で動作するなどの特徴を持つ。
Windows 8.1 で、WinRT ベースの「ユニバーサル Windows アプリ」としてプラットフォームが統合された。
Windows 10 で、あらゆるデバイスに対するアプリケーションの基盤を統合するための仕組として「ユニバーサル 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) -
XAML(Extensible Application Markup Language)とは、Microsoft によって開発された、アプリケーションソフトのユーザーインターフェースを記述するための言語仕様のことである。
XML をベースとしたマークアップ言語であり、例えば HTML が Web ページの構造を定義するように、アプリケーションの外観やボタン配置などを設定することができる
(XAMLとは何? Weblio辞書) -
デスクトップブリッジは、従来のデスクトップアプリ(.NET Framework のものとは限りません)を「UWP アプリ化」する技術です。
「UWP アプリ化」によって、まず、アプリの配布方法が UWP アプリと同じになります。一般向けの Microsoft Store などで公開したり、購入したデジタル証明書を使って署名したパッケージを配布したりできます。
「UWP アプリ化」したアプリには、UWP のパッケージ ID が与えられます。これによって、従来のデスクトップアプリからは利用できなかった UWP の API の一部が、利用できるようになります。
(簡単になったUWP Bridge:CodeZine)
Windows アプリの開発手段の選択肢
Windows アプリを開発するのに、以下の選択肢がありそうです。
「Win API」アプリ
いわゆる「Windows ネイティブ」なデスクトップアプリです。
| アプリケーションの種類 | デスクトップアプリ | |
| 開発ツール | VC++ など | VC++ など |
| UI フレームワーク | MFC など | なし |
| 開発言語 | C++ など | C++ など |
| UI サブシステム | × | |
| API | × | |
| Win API | ||
| 実行環境 | Win 10 | |
| Win 7 以前 | ||
「WinForms」アプリ
.NET Framework で用意された WinForms を利用するデスクトップアプリです。
| アプリケーションの種類 | デスクトップアプリ |
| 開発ツール | Visual Studio |
| UI フレームワーク | WinForms |
| 開発言語 | C# など |
| UI サブシステム | WinForms |
| API | .NET Framework |
| Win API | |
| 実行環境 | Win 10 |
| Win 7 以前 |
「WPF」アプリ
.NET Framework で用意された WPF(Windows Presentation Foundation) を利用するデスクトップアプリです。
| アプリケーションの種類 | デスクトップアプリ |
| 開発ツール | Visual Studio |
| UI フレームワーク | XAML |
| 開発言語 | C# など |
| UI サブシステム | WPF |
| API | .NET Framework |
| Win API | |
| 実行環境 | Win 10 |
| Win 7 以前 |
「UWP」アプリ
Windows 10 で用意された UWP(Universal Windows Platform) を利用します。UWP は、新たに用意された WinRT と WinUI を含みます。
| アプリケーションの種類 | UWP アプリ | ||
| 配布方式 | 主に Microsoft Store 経由 | ||
| パッケージ形式 | APPX | ||
| 開発ツール | Visual Studio | VS など | 従来 |
| UI フレームワーク | XAML | HTML | |
| 開発言語 | C# など | JavaScript | |
| UI サブシステム | WinUI | ||
| API | WinRT | ||
| ×(Win API) | |||
| 実行環境 | Win 10 | ||
| × | |||
WinUI を使うことで、いわゆる「モダンな」見かけのアプリが作れます。
WinRT アプリは、Win API を呼出できません。
Microsoft Store を通して配布されます。
従来のデスクトップアプリもデスクトップブリッジを使って UWP アプリ化できます。
「Xamarin」アプリ
Xamarin は「マルチプラットフォーム」対応ですが、そのうち .Forms を使って 「UWP」アプリが作成できます。
| アプリケーションの種類 | UWP アプリ |
| 開発ツール | Visual Studio |
| UI フレームワーク | XAML |
| 開発言語 | C# |
| UI サブシステム | WinUI |
| API | WinRT |
| ×(Win API) | |
| 実行環境 | Win 10 |
| × |
「Delphi」アプリ
Delphi を使うと、「Win API」アプリが作成できます。ただし、WinRT API を呼出することもできるようです。
| アプリケーションの種類 | デスクトップアプリ | ||
| 開発ツール | Delphi | ||
| UI フレームワーク | FireMonkey | VCL | |
| 開発言語 | Delphi 言語(Object Pascal) | ||
| UI サブシステム | 独自 | 独自 | |
| API | WinRT | × | × |
| ×(Win API) | Win API | Win API | |
| 実行環境 | Win 10 | ||
| × | Win 7 以前 | ||
「Electron」アプリ
Electron も「マルチプラットフォーム」対応ですが、作成できる Windows アプリは 「Win API」アプリになります。アプリのコードは、Electron が用意する Chromium の描画システムと Node.js の API を利用できます。
| アプリケーションの種類 | デスクトップアプリ | |
| 開発ツール | VS など | |
| UI フレームワーク | HTML | |
| 開発言語 | JavaScript | |
| UI サブシステム | (Chromium) | |
| API | (Node.js) | |
| Win API | ||
| 実行環境 | Win 10 | |
| Win 7 以前 | ||
おわりに
「UWP アプリ」前後の経緯を整理してみました。