Windowsデスクトップ向けの業務アプリケーション開発において、どのようなテクノロジを採用すべきか考えたいと思います。
Win32 API
そういえばこの手もありましたね。
これじゃないといけない要件があるのなら仕方ないです。
Windows Forms (WinForms)
.NET Framework 1.0とともに登場した最も歴史ある(もうあまり新規開発がなさそうな)テクノロジです。
高DPI環境で難がありましたが、.NET Framework 4.7 + Windows 10で解決するようです。1
Windows Presentation Framework (WPF)
.NET Framework 3.0とともに登場しました。
XAMLで作る画面はHTMLのフローレイアウトっぽく扱えるので、画面サイズに応じたアプリを作りやすいです。美麗な画面も作りやすいです。
Universal Windows Platform (UWP)
Windows 10 8とともに登場しました。
セキュリティのためか、プラットフォーム非依存にするためか、アプリケーション外との接続が面倒だったりできなかったりしました。Windows 10 ver.1709以降なら、そのような制限はありません。
作成したアプリケーションを配置するには、Microsoftストアを使うかサイドローディングを設定する必要があります。
Electron
ご存知Visual Studio Codeの開発に使われています。
Xamarin
iOS/AndroidアプリをC#で開発できるXamarinです。Windowsアプリも作れます。
Delphi
まだまだ元気(?)なDelphiです。
React Native
React Native WindowsがMicrosoftから公式にスポンサードされて再実装中です。
ドキュメント→Getting Started Guide
アナウンス→ブログ
React Native本体のバージョンに追随するように着々と進んでいます。2020年2月現在 Version 0.61
.NET Core 3 + WinForms/WPF 23
WinForms/WPF/UWPと並行する概念ではないけれど、とりあえず書いておきます。.NET Core上で開発すれば、OSと.NET Frameworkの組み合わせから自由になれる(はず)。
2019年にリリースされる予定です。
2020年2月現在 3.1.2 がリリースされています。
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
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ストアです。
ビジネス向けと教育機関向けがあります。
- プライベート ストアを使ってアプリを配布する https://docs.microsoft.com/ja-jp/microsoft-store/distribute-apps-from-your-private-store
- Working with 基幹業務アプリ https://docs.microsoft.com/ja-jp/microsoft-store/working-with-line-of-business-apps
結論
UWPで要件を満たせるのであればUWP。
Webに慣れた開発者が多ければElectronかReact Native。
iOS/Android向けアプリも一緒に開発するならXamarinかReact Native。
そうでなければWPF一択です。
2019年7月 追記
WPFを選択した場合、.NET Framework 4.7/4.8にするか、.NET Core 3にするのかも選ばなければいけません。
将来的なサポートやテストしやすさを考えれば、.NET Core 3から.NET 5へと続く道へ。
リリースが間近か、現在ある資産をどうしても手放せないのであれば、.NET Framework 4.7/4.8でしょうか。
参考リンク
-
Windows フォームでの高 DPI サポート https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/high-dpi-support-in-windows-forms ↩
-
.NET Core 3はWindowsデスクトップアプリをサポートする https://www.infoq.com/jp/news/2018/05/net-core3-announced ↩
-
Windows Forms/WPFはOSSになりました https://github.com/dotnet/winforms https://github.com/dotnet/wpf ↩