Windows アプリの開発手段の選択肢をまとめてみた


はじめに

Windows アプリの開発手段は幾つもあります。新たにアプリを作るときにどれを選ぶのがいいのか、
知りたくて幾つか記事を読んでみました。例えば、

これまで使ったことのないコンセプトも出てきてよく分からないし、新たに聞く用語もあるので調べてみるがさらに分からなくなります。
記事を読んでいて混乱する理由は、記事で同列に並べられているコンセプトが、実は異なるレイヤーのもののようだと分かってきました。
そこで、用語とコンセプトを整理してみました。勘違いしているところもあるかも知れませんが。

Windows アプリの種類と概要

アプリケーションの種類 UWP アプリ デスクトップアプリ
配布方式 主に Microsoft Store 経由 直接ダウンロード可能
パッケージ形式 APPX MSI または独自インストーラ
開発ツール Visual Studio VS など 右のいずれか VS VS VB6 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 ランタイム ×
右のいずれか Win32/64
実行環境 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 10 のコアだと言える。そこにデバイスごとの機能を追加したものが、デバイスに応じた Windows 10 の各製品である。
    UWPアプリの開発には、主に C#/VB.NET/C++ 言語と XAML 、もしくは JavaScript 言語と HTML を用いる。
    ベースとなるフレームワークは Windowsランタイム (WinRT) だが、デバイスに応じてWindows API や DirectX 、そして .NET Framework を用いることも可能である。
    (UWP(ユニバーサルWindowsプラットフォーム)とは? UWPアプリ開発の特徴 - Build Insider)

  • WinRT(Windows Runtime)とは、Modern UI スタイルのアプリケーションを作成するバックボーンとなるAPIである。
    Windows 8 以降のオペレーティングシステムで実装されている。
    ネイティブ言語である C++/CX(C++ Component Extensions)、マネージ言語である C# および VB.NET 、そしてスクリプト言語である JavaScript および TypeScript による開発に対応する。
    (Windowsランタイム - Wikipedia)

  • WinUI(Windows UI Library)は、モダンな Windows アプリ(UWP/XAML)を構築するためのコントロールとスタイルを含んだユーザーインターフェイスレイヤー。
    最新バージョンの Windows 10 でしか利用できないコントロールを以前のバージョンの Windows 10 でも利用できるよう後方互換性を提供するほか、XAML に低レベル API へのアクセスを提供する XamlDirect でミドルウェア開発者のライブラリ開発を支援する。
    (UWPアプリの洗練されたUIをWin32アプリでも ~Microsoft、「WinUI 3」を発表)

  • XAML(Extensible Application Markup Language)とは、Microsoft によって開発された、アプリケーションソフトのユーザーインターフェースを記述するための言語仕様のことである。
    XAML は XML をベースとしたマークアップ言語であり、例えば HTML が Web ページの構造を定義するように、アプリケーションの外観やボタン配置などを設定することができる
    (XAMLとは何? Weblio辞書)

  • デスクトップブリッジとは、従来のデスクトップアプリ(.NET Framework のものとは限りません)を「UWP アプリ化」する技術です。
    「UWP アプリ化」によって、まず、アプリの配布方法が UWP アプリと同じになります。一般向けの Microsoft Store などで公開したり、購入したデジタル証明書を使って署名したパッケージを配布したりできます。
    「UWP アプリ化」したアプリには、UWP のパッケージ ID が与えられます。これによって、従来のデスクトップアプリからは利用できなかった UWP の API の一部が、利用できるようになります。
    「UWP アプリ化」したアプリは、UWP のサンドボックスに制限されません。
    (簡単になったUWP Bridge:CodeZine(コードジン))

Windows アプリの開発手段の選択肢

  • 「Win 32 API」アプリ
アプリケーションの種類 デスクトップアプリ
開発ツール VC++ など VC++ など
UI フレームワーク MFC など なし
開発言語 C++ など C++ など
UI サブシステム ×
API ×
Win32/64
実行環境 Win 10
Win 7 以前
  • 「WinForms」アプリ
アプリケーションの種類 デスクトップアプリ
開発ツール Visual Studio
UI フレームワーク WinForms
開発言語 C# など
UI サブシステム WinForms
API .NET Framework
Win32/64
実行環境 Win 10
Win 7 以前
  • 「WPF」アプリ
アプリケーションの種類 デスクトップアプリ
開発ツール Visual Studio
UI フレームワーク XAML
開発言語 C# など
UI サブシステム WPF
API .NET Framework
Win32/64
実行環境 Win 10
Win 7 以前
  • 「UWP」アプリ
アプリケーションの種類 UWP アプリ
配布方式 主に Microsoft Store 経由
パッケージ形式 APPX
開発ツール Visual Studio VS など
UI フレームワーク XAML HTML
開発言語 C# など JavaScript
UI サブシステム WinUI
API WinRT
実行環境 Win 10
×
  • 「Xamarin」アプリ

Xamarin を使って、どのタイプの Windows アプリを開発できるのか、分かりません。

  • 「Electron」アプリ

Electron を使って、上記の「Win 32 API」アプリが作れると思われます。

アプリケーションの種類 デスクトップアプリ
開発ツール VS など
UI フレームワーク HTML
開発言語 JavaScript
UI サブシステム ×
API ×
Win32/64
実行環境 Win 10
Win 7 以前
  • 「Delphi」アプリ

Delphi を使うと、「Win 32 API」アプリも「UWP アプリ」も作れると思われます。

アプリケーションの種類 UWP アプリ デスクトップアプリ
開発ツール Delphi
UI フレームワーク FireMonkey VCL
開発言語 Delphi 言語(Object Pascal)
UI サブシステム WinUI ×
API WinRT ×
Win32/64
実行環境 Win 10
× Win 7 以前