.NET
WPF
WinForms
Electron
UWP

[Microsoft] Windowsデスクトップ向け業務アプリ開発には何を採用すべきか?

Windowsデスクトップ向けの業務アプリケーション開発において、どのようなテクノロジを採用すべきか考えたいと思います。


Win32 API

そういえばこの手もありましたね。

これじゃないといけない要件があるのなら仕方ないです。

開発言語

C++等



配置方法

Windowsインストーラ、あるいは実行ファイルをコピー



更新方法

Windowsインストーラを再配布、あるいは実行ファイルをコピー


Windows Forms (WinForms)

.Net Framework 1.0とともに登場した最も歴史ある(もうあまり新規開発がなさそうな)テクノロジです。

高DPI環境で難がありましたが、.Net Framework 4.7 + Windows 10で解決するようです。1

開発言語

C#、VB.NET等



配置方法

ClickOnceがおすすめ



更新方法

ClickOnceにお任せ



よいところ




* 古くからあるので、開発者を確保しやすい(あるいはこれしかできない)かもしれない。

* 所有しているUIコントロールが、WinFormsにしか対応していなかったりするかもしれない(そんなん捨てたほうがいい)



いけてないところ




* コントロール配置が固定なので、大画面環境になっても使いやすさが向上しない。

* 高DPI(125%とか200%とかの)環境だと、画面が崩れて使えない。

* いかんせん古い。

* テストを書きづらい。あるいはできない。:zap:


Windows Presentation Framework (WPF)

.Net Framework 3.0とともに登場しました。

XAMLで作る画面はHTMLのフローレイアウトっぽく扱えるので、画面サイズに応じたアプリを作りやすいです。美麗な画面も作りやすいです。

開発言語

C#、VB.NET等



配置方法

ClickOnceがおすすめ



更新方法

ClickOnceにお任せ



よいところ




* 大画面、高DPI環境に対応している。

* 美麗なUIを作りやすい。

* MVVMアーキテクチャやPrismを利用してテストしやすいコードを書ける。 :zap:



いけてないところ




* 未だWinFormsやっているところは開発者がいないかもしれない。

* 最近のMicrosoftはUWPにばかり注力してるよね?


Universal Windows Platform (UWP)

Windows 10 8とともに登場しました。

セキュリティのためか、プラットフォーム非依存にするためか、アプリケーション外との接続が面倒だったりできなかったりしました。Windows 10 ver.1709以降なら、そのような制限はありません。

作成したアプリケーションを配置するには、Microsoftストアを使うかサイドローディングを設定する必要があります。

開発言語

C#、VB.NET、JavaScript等



配置方法




* Microsoftストアから配信

* プライベートストアから配信

* Windows 10の設定を変更してサイドローディング



更新方法




* Windows 10にお任せ



よいところ




* インストールに管理者権限を必要としない。

* 更新が簡単。

* 大画面、高DPI環境に対応している。

* 美麗なUIを作りやすい。



いけてないところ




* 実質Windows 10 ver.1709以降が必要。

* 配置方法が面倒。

* 1画面1スレッドなので、複数画面使うときはそれなりのコツが必要。

* 欲しいUIコントロールがないかもしれない。


Electron

ご存知Visual Studio Codeの開発に使われています。

開発言語

JavaScript、TypeScript



配置方法




* パッケージを作成して実行してもらう。



更新方法




* Electronの機能を使える。



よいところ




* Googe Chromeでできることが全部できる。



いけてないところ




* 頑張らないと重くなる。

* 気をつけないとXSSする。


.Net Core 3 23

WinForms/WPF/UWPと並行する概念ではないけれど、とりあえず書いておきます。.Net Core上で開発すれば、OSと.Net Frameworkの組み合わせから自由になれる(はず)。

2019年にリリースされる予定です。

よいところ




* OS/.Net Frameworkのバージョンに縛られない。

* .NET Frameworkよりテストが書きやすい。 :zap:



いけてないところ




* まだ(2018年9月現在)リリースされていない。 2019年9月にリリース予定です。4 :zap:


WinForms + XAML Islands / WPF + XAML Islands

WinFormsあるいはWPFからUWPのUIコントロールを使えるようにするためのものです。ガワネティブならぬガワWinFormsやガワWPFができます。

https://docs.microsoft.com/ja-jp/windows/uwp/xaml-platform/xaml-host-controls

よいところ




* Windows 7でUWPを動かせる(?)



いけてないところ




* まだ出たばかり。


UWPの周辺テクノロジ

WinForms/WPFに関する情報は多いので、未だ発展し続けるUWPについてまとめてみます。


Windows Template Studio

UWPアプリの雛形を作ってくれるVisual Studio 2017の追加機能です。

https://marketplace.visualstudio.com/items?itemName=WASTeamAccount.WindowsTemplateStudio


Windows UI Library

JavaScriptで言うところのshimみたいなもの+UIコントロール集です。

https://github.com/Microsoft/microsoft-ui-xaml


Windows Community Toolkit

Windows SDKに不足しているUIコントロール集です。

積極的に開発されています。

https://github.com/Microsoft/WindowsCommunityToolkit


サイドローディング

UWPアプリをMicrosoftストアを介さずにインストールする方法です。

Windows 10の設定を変更する必要があります。


プライベートストア

私的出品が可能なMicrosoftストアです。

ビジネス向けと教育機関向けがあります。


結論

UWPで要件を満たせるのであればUWP。

Webに慣れた開発者が多ければElectron。

そうでなければWPF一択です。





  1. Windows フォームでの高 DPI サポート https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/high-dpi-support-in-windows-forms 



  2. .NET Core 3はWindowsデスクトップアプリをサポートする https://www.infoq.com/jp/news/2018/05/net-core3-announced 



  3. Windows Forms/WPFはOSSになりました https://github.com/dotnet/winforms https://github.com/dotnet/wpf :zap: 



  4. Introducing .NET 5 https://devblogs.microsoft.com/dotnet/introducing-net-5/ :zap: