Previous slide
Next slide
Toggle fullscreen
Open presenter view
.NET 7 時代の Windows アプリ開発事情
.NET Conf 2022 Recap 福岡
Tatsuro Shibamura @shibayan
私について
芝村 達郎 @shibayan
Microsoft MVP for Microsoft Azure
Blog :
https://blog.shibayan.jp
GitHub :
https://github.com/shibayan
Windows アプリ開発してますか?
Windows の機能は進化し続けている
タイトルバーのカスタマイズ / ダークモード
ウィンドウのスナップ
プッシュ通知
モダンな Web 技術に対応した WebView
パワーマネジメント
Windows アプリを作る方法は多い
Win32 API / MFC (C++)
.NET Framework (C#)
React Native (Node.js)
Electron (Node.js)
Flutter Windows (Dart)
Windows アプリの作りやすさは C# が一番
当然ながら親和性が一番高い
.NET 7 での重要なキーワード
Unified (Target Framework Moniker)
.NET MAUI
Native AOT
ARM64 (Windows on ARM 含む)
最新の Windows アプリに必要な要素
モダンなウィンドウ、ダイアログ、UI コントロール、機能
WinUI と WinRT が担う領域
最新仕様に対応した WebView
Chromium Edge ベースの WebView2
ランタイム同梱のシングルファイルアプリケーション
Self-contained App / Native AOT
Windows on ARM (ARM64) の存在
モバイル分野では ARM64 への対応が無視できなくなる時代が来る、かも
低消費電力、常時接続という特徴は大きい
意外に業務アプリでの需要が多くなる可能性
Surface Pro 9 5G が ARM64 搭載
今後は主流になる可能性が無いとも言えない…
.NET 7 と Windows の機能を活用しないと
デスクトップアプリの価値が減る
ネイティブ機能を使わない場合は Web アプリで良い
.NET を使った Windows アプリ開発の方法
P/Invoke (Win32 API / COM)
Windows Forms
Windows Presentation Foundation
Universal Windows Platform
WinUI 2
Windows App SDK
WinUI 3
.NET Multi-Platform App UI
WinUI 3
アプリ開発の方法が多すぎる
順を追って説明していきます
P/Invoke (Win32 API / COM)
地味に C# での Win32 API や COM の使い勝手が向上している
Source Generator を使った Win32 API / COM 定義生成
microsoft/win32metadata: Tooling to generate metadata for Win32 APIs in the Windows SDK.
microsoft/CsWin32: A source generator to add a user-defined set of Win32 P/Invoke methods and supporting types to a C# project.
Native AOT に対応した COM 相互運用
ComWrappers API の使用 | Microsoft Learn
P/Invoke (Win32 API / COM) の個人的見解
Win32 API / COM の知識がある場合には自由度が高い
他の SDK を使って開発している際にネイティブ機能を +α 出来る
新しい機能を素早く利用できる
基本は Win32 API / COM なので知っていて損はない
特に CsWin32 はネイティブ相互運用コードを楽に書ける
Windows Forms
デザイナーを使って Windows アプリの開発が可能
.NET Framework 1.0 から利用可能
アクセシビリティ改善や HiDPI サポートなど、継続的なアップデート
PerMonitor V2 の対応 / CsWin32 への移行などが予定されていて積極的
What's new in Windows Forms in .NET 7.0 - .NET Blog
Windows Forms の個人的見解
モダンな UI が必要ない、業務アプリなどでは必要十分
デザイナーを使って素早くアプリを作れる
.NET Framework で作られている場合は .NET 7 に移行する価値あり
Native AOT へのサポートが比較的進んでいる(COM 周り)
最初に対応される可能性が高そう
Windows Presentation Foundation
XAML を使った宣言的な UI 定義が可能で 10 年以上の実績あり
Visual Studio は WPF ベース (但し .NET Framework)
パフォーマンスやアクセシビリティの改善が行われている
WPF は仕組み上パフォーマンスが悪くなりがち
特にコミュニティベースでの改善が多い
What's new for WPF in .NET 7 - .NET Blog
Windows Presentation Foundation の個人的見解
若干ながら将来性に不安がある
Windows 11 の新しいテーマへの対応が行われていない
ダークモード対応もまだ
Native AOT への対応はかなり厳しそう
WPF はリフレクションが多用されているため
XAML と Win32 API の知見があれば一番楽に書けるはず
Universal Windows Platform
Windows App SDK の基礎となっている WinRT ベース
UWP SDK は既にアップデートが完全に止まっている
稀に脆弱性修正程度のアップデートは行われている
現在は Windows App SDK への移行が推奨されている
UWP から Windows App SDK への移行 - Windows apps | Microsoft Learn
Universal Windows Platform の個人的見解
早急に Windows App SDK への移行を行う方が良い
Windows App SDK への移行は比較的容易
Upgrade Assistant を使った支援が利用可能
名前にある Universal 要素は既に失われている
Windows App SDK からも UWP テンプレートは削除予定
Windows App SDK
最新の Windows 機能に対応したアプリを作成可能な SDK
OS とは切り離されたリリースサイクルを持つ
WinUI 3 によるモダンな UI が利用可能
実体は WinRT を C++ / C# から利用するために一部をラップし直したもの
SDK は C++ 実装 + C# への言語プロジェクション
Windows 11 の最新機能へのサポートあり
Widgets や Acrylic / Mica といったエフェクトに対応
Windows App SDK の個人的見解
現在のバージョン(1.2)では WPF / UWP ほど機能は揃っていない
API に一貫性がなく、Win32 と WinRT の悪いところを引き継いでいる
率直に言うとまだまだ粗削りすぎる
ロードマップから欲しい機能に投票可能のは良い
https://portal.productboard.com/winappsdk/1-windows-app-sdk
Microsoft 的には注力すると言っているが…
Windows App SDK を使ってデスクトップ Windows アプリを作成する - Windows apps | Microsoft Learn
少しだけディープな話
Windows アプリのウィンドウは実質 3 種類ある
Win32 API ベースのウィンドウ (
CreateWindowEx
)
Windows Forms / WPF など全ての基礎に
WinRT ベースのウィンドウ (
CoreWindow
/
AppWindow
)
UWP / Windows App SDK / .NET MAUI
WinUI ベースのウィンドウ (
Window
)
Windows App SDK / .NET MAUI (内部的に)
.NET Multi-platform App UI
元々は Xamarin.Forms だったが、Windows アプリも作成可能
WinUI 3 が利用されているので、UI は Windows App SDK に近い
実際に Windows App SDK が使われている
.NET でクロスプラットフォームのアプリを実装する際にはほぼ一択
iOS / Android / Windows / macOS などに対応
.NET Multi-platform App UI の個人的見解
Windows App SDK で直接書くよりもサポートが充実しているのでは…?
Xamarin.Forms で培われたライブラリ・ノウハウが利用出来る
実は一番の有力株なのでは…
各プラットフォーム向けレンダラーが分離されているので、Windows App SDK より優れた SDK が出た場合にもサポートが期待できる
.NET MAUI を使って Windows アプリをビルドする - Windows apps | Microsoft Learn
.NET 7 時代はどれを選ぶのが正解?
決定版は未だ出ていないと言える
Windows 固有や新機能への対応
Windows App SDK / Win32 API
Native AOT への対応
Windows Forms (実験) / Windows App SDK (予定) / Win32 API (COM は大変)
WinUI によるモダンな UI
UWP / Windows App SDK / .NET MAUI
開発のしやすさ、機能の多さ、安定感
Windows Forms / Windows Presentation Foundation
現実的な選択肢は何?
完全に新規で Windows アプリケーションを開発する
将来性に期待しつつ Windows App SDK を使う
WPF + CsWin32 で無難に行く
クロスプラットフォーム対応を検討している
.NET MAUI の一択
既に Windows Forms や WPF の知見がある
.NET 7 の Windows Forms と WPF へ移行する
話せなかった内容(ぶっちゃけトーク)は
夜の部でやります
公式ドキュメント
Windows デスクトップ アプリの開発 - Windows apps | Microsoft Learn
Windows UI ライブラリ (WinUI) - Windows apps | Microsoft Learn