かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Windows デスクトップアプリ開発と消えた Prism for Windows (Prism は消えてないよ)

これの続きです。

blog.okazuki.jp

Prism for Windows(UWP) って書いてるけど MVVM アプリって何で作ったらいいんだっていう感じのコメントがついてるので事実だけを淡々と

Prism は以下のプラットフォーム向けに提供されていた

  • WPF
  • Xamarin.Forms
  • UWP

これがこうなった

  • WPF
  • Xamarin.Forms

以上

UWP...?

UI テクノロジーという意味では、今後開発リソースが注がれる Windows UI Library がメインストリームとなるという感じです。OSS で GitHub 上で開発されています。 ロードマップも出ています。

github.com

今まで Windows UI の機能強化は Windows 10 の一部として UWP をターゲットとして提供されてきていました。 つまり UI まわりの機能強化は UWP じゃないと使えないという状況がこれまででした。

Windows UI Library 2 系も UWP をターゲットにしていました。

Windows UI Library 3.0 は UWP 特化ではない

ロードマップに以下のような図がありますが、これが全てだと思います。

f:id:okazuki:20190706000054p:plain

引用元:microsoft-ui-xaml/roadmap.md at master · microsoft/microsoft-ui-xaml · GitHub

つまり…?

今まで UWP が Windows 10 向けの UI 関連機能強化と裏側の機能強化のターゲットでしたが UI 部分は Win32 と UWP 両方をターゲットに開発される Windows UI Library がメインになります。恐らく UWP は、裏方の API は追加されていくと思います。この新しい API はWindows 10 APIs と表記されてたりしますね。

そして、アプリケーションのパッケージング方式として MSIX にパッケージングしてストアに出せる形のものと、そうでない従来の xcopy でのインストールや msi でのインストールなどになると思います。

まとめると…

アプリケーションモデル インストール方法 Windows 10 APIs Win32 APIs 備考
UWP msix ごくごく一部 多分 Windows UI Library 3.0 の UI は一番シームレスに乗ると思うんだけど…。Win UI Library 3.0 の出来が良かったら WPF とかにもシームレスに乗るかも。ここで動く悪質なウィルス作るのは超しんどそう
Win32 msix ウィルス作るのはしんどそう
Win32 msix 以外(xcopy や msi) ほぼ全てのウィルスは、ここに属する

Win32 アプリから呼び出せる Windows 10 APIs については以下のドキュメントを参考にしてください。

docs.microsoft.com

端的にいうと全部呼べるわけではないのと、msix で固めたほうが呼べる API は増えますが、セキュリティはちょっと厳しくなります。 ここら辺も読んでおくといいと思います。

docs.microsoft.com

まとめ

  • UI フレームワークとしての UWP は機能強化はされない
  • Windows UI Library の方にシフトしていって OSS で開発されていく
  • Windows UI Library 3.0 は UWP 以外にも Win32 アプリ (WPF や WinForms など) もサポートする。
  • UWP も Win32 アプリも UI 周りは、ほぼ同じ機能が使えるようになるようになっていくはず
  • Windows 10 の最新の API は UWP が一番種類が多く呼べる
  • Win32 アプリも msix 形式でインストールするようにすると呼べる Windows 10 の最新の API が増える

こんな感じかなぁ?間違ってたら修正していこう。