Help us understand the problem. What is going on with this article?

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

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の設定を変更しないとIMEを制御できない :zap: :zap: :zap: :zap: :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する。

Xamarin :zap: :zap:

iOS/AndroidアプリをC#で開発できるXamarinです。Windowsアプリも作れます。

よいところ

* iOS/Androidとビジネスロジックコードを共有できる。

いけてないところ

* ビルドしてデバッグ実行するまでが、それなりに一苦労(でした。今はどうでしょう?)。

Delphi :zap: :zap: :zap:

まだまだ元気(?)なDelphiです。

よいところ

* Visual BasicのようなRAD環境がある。
* iOS/Androidとビジネスロジックコードを共有できる。

いけてないところ

* ベンダーロックインが心配。
* 新たに言語を覚えなくてはいけない。

React Native :zap: :zap:

React Native WindowsがMicrosoftから公式にスポンサードされて再実装中です。
ドキュメント→Getting Started Guide
アナウンス→ブログ

React Native本体のバージョンに追随するように着々と進んでいます。2020年2月現在 Version 0.61 :zap: :zap: :zap: :zap:

よいところ

* iOS/Androidと同じ知識で対応できる。
* テストが書きやすい(はず)。

いけてないところ

* まだ(2019年7月現在)リリースされていない。

.NET Core 3 + WinForms/WPF 23

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

2020年2月現在 3.1.2 がリリースされています。 :zap: :zap: :zap: :zap:

よいところ

* OS/.NET Frameworkのバージョンに縛られない。
* .NET Frameworkよりテストが書きやすい。 :zap:
* WinForms/WPFがOSSになり、ソースを追いかけて納得できない挙動を把握できる。 :zap: :zap: :zap: :zap:
* VB.NETはサポートされていない!(今のところ) :zap: :zap: :zap: :zap:

いけてないところ

* まだ(2018年9月現在)リリースされていない。 2019年9月にリリース予定です。4 :zap:
* 期待するほど .NET Frameworkと変わらない。 :zap: :zap: :zap: :zap:
* 色々憶測が飛び交う中、WinForms/WPFがOSSになりました。もしかするとMicrosoftはやめたがっているのかもしれない(憶測)。 :zap: :zap: :zap: :zap:
* まだ(2020年2月現在)ビジュアルデザイナーが動かない。 :zap: :zap: :zap: :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かReact Native。
iOS/Android向けアプリも一緒に開発するならXamarinかReact Native。
そうでなければWPF一択です。

2019年7月 追記 :zap: :zap: :zap:

WPFを選択した場合、.NET Framework 4.7/4.8にするか、.NET Core 3にするのかも選ばなければいけません。

将来的なサポートやテストしやすさを考えれば、.NET Core 3から.NET 5へと続く道へ。
リリースが間近か、現在ある資産をどうしても手放せないのであれば、.NET Framework 4.7/4.8でしょうか。

参考リンク :zap: :zap: :zap:


  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: 

sengoku
テスト原理主義者。 記事は日々の記録です。2020年は、Java。2019年は、Angular/TypeScript/ASP.NET Core/C#が多めです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away