日本マイクロソフト
大田 一希
Visual Studio 2022 と .NET 6 での
Windows アプリ開発技術の紹介
自己紹介
日本マイクロソフト
App Innovation カスタマー エンジニア本部
カスタマー エンジニア
大田 一希
好き:C#、WPF、UWP、Azure PaaS 系サービス
苦手:変数に型の無い言語全般
Twitter:@okazuki
GitHub:runceel
趣味:ゲーム(スマブラSP 2165時間、モンハン 1500時間)
本セッションの目的
Visual Studio 2022 & .NET 6 でのデスクトップアプリ開発の選択肢の把握
.NET 6 で利用可能な
Windows アプリ開発
技術の紹介
.NET 6
2021年11月に一般提供開始
今日紹介するもの
.NET 6 に含まれているもの
• Windows Forms (Win Forms)
• Windows Presentation Foundation (WPF)
• MAUI (Preview)
• MAUI を素直に使う
• BlazorWebView
.NET 6 には含まれていないもの
• Windows App SDK (Win App SDK)
• Windows UI Library 3.0 (Win UI)
• その他 API
全体像
Windows
OS の API
アプリケーション
.NET の API
ユーザー インターフェース
ロジック
全体像
Windows
OS の API
アプリケーション
.NET の API
ユーザー インターフェース
ロジック
Win Forms WPF MAUI Win UI
Win App SDK
選択肢
Win Forms WPF
MAUI Win UI
UI レイヤーに何を使うか?
Windows Forms
Windows Forms
.NET Framework 1.0 のころからある古き良きフレームワーク
• デザイナーで直感的に画面の作成が可能
• .NET 6 向けのデザイナーは現在プレビュー
• State of the Windows Forms Designer for .NET Applications - .NET Blog (microsoft.com)
• .NET に移植後も改善が続いてる
• dotnet/winforms: Windows Forms is a .NET UI framework for building Windows desktop applications.
(github.com)
• シンプルな画面を作るには直感的でわかりやすい
• HighDPI/PerMonitorDPI 対応にやや難あり
• 以下のような複雑なレイアウトのリストを作るのは大変
デモ:Windows Forms on .NET 6
Windows Presentation
Foundation
Windows Presentation Foundation
.NET Framework 3.0 からあるフレームワーク
• OS のコントロールを使うのではなく全部自前で描画している点が特徴
• テキスト、メディア、3D を統一的に扱えるプラットフォームとして設計
• XML ベースの XAML という言語で UI を記述
• C# でロジックを記述
• 柔軟なレイアウトを作成しやすい
• Model-View-ViewModel (MVVM) パターンでの開発がやりやすい
• Visual Studio に ViewModel 生成機能が追加
デモ:WPF on .NET 6
MAUI (Preview)
MAUI (.NET Multi-platform App UI)
Android、iOS、Windows、macOS 対応のクロス プラットフォーム アプリ開発
• 2022 年 2 月時点でプレビュー リリース
• 2022 年 Q2 リリース予定
• 複数 OS で使える UI の共通レイヤー
• 共通レイヤー部分の機能は最大公約数
• XAML/C# による開発
• Windows アプリを作りたいだけなら
選ぶ理由はあまりない
BlazorWebView
MAUI の画面上に WebView (Web ブラウザ コントロール) を置いて Blazor で画面を開発
• Blazor
• ASP.NET Core Blazor : C# で Single Page Application を作るためのフレームワーク
• BlazorWebView
• ネイティブアプリ内の WebView で Blazor の画面をレンダリング (HTML&CSS)
• 各種ロジックは .NET のランタイム上で動く
BlazorWebView
UI のレンダリング (HTML/CSS)、イベント ハンドリング
UI
.NET
C#
イベントハンドラ、各種ロジック
ロジック
ランタイム
デモ:MAUI & BlazorWebView on .NET 6
Windows App SDK
Windows App SDK
次世代の Windows アプリ開発プラットフォーム
• Windows 10 1809 以降のすべての Windows 10 と Windows 11 に対応
• C++/.NET 対応
• Win32 API や Windows Runtime API の代替ではなく新しい API セットを提供
• 2021 年 11 月に 1.0 がリリース
• OS の更新とは切り離されて NuGet パッケージとしてリリース
• 現状 Win32 アプリのみサポート
• MSIX でパッケージングしたものとパッケージングしていないものに対応
• UWP は現在プレビュー (対応時期未定)
まだ、ちょっと機能が足りない雰囲気…
現在の実装されている機能と 1.1 で実装される予定の機能
1.0 では WinUI で複数ウィ
ンドウが使えないのがアプリに
よっては致命的
Planned - Windows App SDK | Product Roadmap (productboard.com)
開発エクスペリエンス
デバッグ機能は充実
• ライブ ビジュアル ツリー
• ライブ プロパティ
• XAML ライブ プレビュー
開発支援機能
• ホット リロード対応
• デザイナー未実装
デモ:Windows App SDK
各プラットフォームの
比較
何を選ぶか (2021 年 2 月時点)
基本的な
機能
HighDPI
PerMonitor
新しいルック
アンド フィール
配布 備考
Windows Forms 〇 △ × XCOPY, ClickOnce, MSIX HighDPI 対応などに難あり
WPF 〇 〇 △ XCOPY, ClickOnce, MSIX
MAUI △* ◎* 〇* XCOPY*, MSIX* OS 固有機能の利用はクロスプラットフォーム
なので少し手間がかかる
* 現時点ではプレビューなので変わる可能性有
MAUI
BlazorWebView
△* 〇* 〇 (Web UI)* XCOPY*, MSIX*
Windows App SDK △ ◎ 〇 XCOPY, MSIX 現時点ではマルチウィンドウ非対応
2022 年 Q2 対応予定
個人的なお勧め
Windows App SDK への移行を考えつつ WPF で開発
見た目とロジックの分離をしておこう
Web 程ではないが UI フレームワークは変わることがある
• 見た目とロジックの分離をしておくことは重要
• MVVM パターンで作られた WPF アプリを Windows App SDK へ移行した例
• runceel/MigrateToWindowsAppSDKFromWPF: Windows Apps modernization workshop
(github.com)
まとめ
a
Windows
OS の API
アプリケーション
.NET の API
ユーザー インターフェース
ロジック
Win Forms WPF MAUI Win UI
Win App SDK
一番困ることが少ない 今後注力される
クロスプラットフォーム
であれば候補に
まとめ
a
Windows
OS の API
アプリケーション
.NET の API
ユーザー インターフェース
ロジック
Win Forms WPF MAUI Win UI
Win App SDK
一番困ることが少ない 今後注力される
クロスプラットフォーム
であれば候補に
なるべく見た目とロジックを分離して作って UI フレームワークの
変化に対応可能にしておこう
参考ドキュメント
• Windows Forms
• https://docs.microsoft.com/ja-jp/dotnet/desktop/winforms/?view=netdesktop-6.0
• WPF
• https://docs.microsoft.com/ja-jp/dotnet/desktop/wpf/?view=netdesktop-6.0
• MAUI
• https://docs.microsoft.com/ja-jp/dotnet/maui/
• Windows App SDK
• https://docs.microsoft.com/ja-jp/windows/apps/windows-app-sdk/
◼ 本書に記載した情報は、本書各項目に関する発行日現在の Microsoft の見解を表明するものです。Microsoftは絶えず変化する市場に対応しなければならないため、ここに記載した情報に
対していかなる責務を負うものではなく、提示された情報の信憑性については保証できません。
◼ 本書は情報提供のみを目的としています。 Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。
◼ すべての当該著作権法を遵守することはお客様の責務です。Microsoftの書面による明確な許可なく、本書の如何なる部分についても、転載や検索システムへの格納または挿入を行うこと
は、どのような形式または手段(電子的、機械的、複写、レコーディング、その他)、および目的であっても禁じられています。これらは著作権保護された権利を制限するものではあり
ません。
◼ Microsoftは、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。Microsoftから書面によるライセンス契約が明確に供給さ
れる場合を除いて、本書の提供はこれらの特許、商標、著作権、またはその他の知的財産へのライセンスを与えるものではありません。
◼ Microsoft, Windows, その他本文中に登場した各製品名は、Microsoft Corporation の米国およびその他の国における登録商標または商標です。
その他、記載されている会社名および製品名は、一般に各社の商標です。

【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介

  • 1.
    日本マイクロソフト 大田 一希 Visual Studio2022 と .NET 6 での Windows アプリ開発技術の紹介
  • 2.
    自己紹介 日本マイクロソフト App Innovation カスタマーエンジニア本部 カスタマー エンジニア 大田 一希 好き:C#、WPF、UWP、Azure PaaS 系サービス 苦手:変数に型の無い言語全般 Twitter:@okazuki GitHub:runceel 趣味:ゲーム(スマブラSP 2165時間、モンハン 1500時間)
  • 3.
    本セッションの目的 Visual Studio 2022& .NET 6 でのデスクトップアプリ開発の選択肢の把握
  • 4.
    .NET 6 で利用可能な Windowsアプリ開発 技術の紹介
  • 5.
  • 6.
    今日紹介するもの .NET 6 に含まれているもの •Windows Forms (Win Forms) • Windows Presentation Foundation (WPF) • MAUI (Preview) • MAUI を素直に使う • BlazorWebView .NET 6 には含まれていないもの • Windows App SDK (Win App SDK) • Windows UI Library 3.0 (Win UI) • その他 API
  • 7.
    全体像 Windows OS の API アプリケーション .NETの API ユーザー インターフェース ロジック
  • 8.
    全体像 Windows OS の API アプリケーション .NETの API ユーザー インターフェース ロジック Win Forms WPF MAUI Win UI Win App SDK
  • 9.
    選択肢 Win Forms WPF MAUIWin UI UI レイヤーに何を使うか?
  • 10.
  • 11.
    Windows Forms .NET Framework1.0 のころからある古き良きフレームワーク • デザイナーで直感的に画面の作成が可能 • .NET 6 向けのデザイナーは現在プレビュー • State of the Windows Forms Designer for .NET Applications - .NET Blog (microsoft.com) • .NET に移植後も改善が続いてる • dotnet/winforms: Windows Forms is a .NET UI framework for building Windows desktop applications. (github.com) • シンプルな画面を作るには直感的でわかりやすい • HighDPI/PerMonitorDPI 対応にやや難あり • 以下のような複雑なレイアウトのリストを作るのは大変
  • 12.
  • 13.
  • 14.
    Windows Presentation Foundation .NETFramework 3.0 からあるフレームワーク • OS のコントロールを使うのではなく全部自前で描画している点が特徴 • テキスト、メディア、3D を統一的に扱えるプラットフォームとして設計 • XML ベースの XAML という言語で UI を記述 • C# でロジックを記述 • 柔軟なレイアウトを作成しやすい • Model-View-ViewModel (MVVM) パターンでの開発がやりやすい • Visual Studio に ViewModel 生成機能が追加
  • 15.
  • 16.
  • 17.
    MAUI (.NET Multi-platformApp UI) Android、iOS、Windows、macOS 対応のクロス プラットフォーム アプリ開発 • 2022 年 2 月時点でプレビュー リリース • 2022 年 Q2 リリース予定 • 複数 OS で使える UI の共通レイヤー • 共通レイヤー部分の機能は最大公約数 • XAML/C# による開発 • Windows アプリを作りたいだけなら 選ぶ理由はあまりない
  • 18.
    BlazorWebView MAUI の画面上に WebView(Web ブラウザ コントロール) を置いて Blazor で画面を開発 • Blazor • ASP.NET Core Blazor : C# で Single Page Application を作るためのフレームワーク • BlazorWebView • ネイティブアプリ内の WebView で Blazor の画面をレンダリング (HTML&CSS) • 各種ロジックは .NET のランタイム上で動く BlazorWebView UI のレンダリング (HTML/CSS)、イベント ハンドリング UI .NET C# イベントハンドラ、各種ロジック ロジック ランタイム
  • 19.
  • 20.
  • 21.
    Windows App SDK 次世代のWindows アプリ開発プラットフォーム • Windows 10 1809 以降のすべての Windows 10 と Windows 11 に対応 • C++/.NET 対応 • Win32 API や Windows Runtime API の代替ではなく新しい API セットを提供 • 2021 年 11 月に 1.0 がリリース • OS の更新とは切り離されて NuGet パッケージとしてリリース • 現状 Win32 アプリのみサポート • MSIX でパッケージングしたものとパッケージングしていないものに対応 • UWP は現在プレビュー (対応時期未定)
  • 22.
    まだ、ちょっと機能が足りない雰囲気… 現在の実装されている機能と 1.1 で実装される予定の機能 1.0では WinUI で複数ウィ ンドウが使えないのがアプリに よっては致命的 Planned - Windows App SDK | Product Roadmap (productboard.com)
  • 23.
    開発エクスペリエンス デバッグ機能は充実 • ライブ ビジュアルツリー • ライブ プロパティ • XAML ライブ プレビュー 開発支援機能 • ホット リロード対応 • デザイナー未実装
  • 24.
  • 25.
  • 26.
    何を選ぶか (2021 年2 月時点) 基本的な 機能 HighDPI PerMonitor 新しいルック アンド フィール 配布 備考 Windows Forms 〇 △ × XCOPY, ClickOnce, MSIX HighDPI 対応などに難あり WPF 〇 〇 △ XCOPY, ClickOnce, MSIX MAUI △* ◎* 〇* XCOPY*, MSIX* OS 固有機能の利用はクロスプラットフォーム なので少し手間がかかる * 現時点ではプレビューなので変わる可能性有 MAUI BlazorWebView △* 〇* 〇 (Web UI)* XCOPY*, MSIX* Windows App SDK △ ◎ 〇 XCOPY, MSIX 現時点ではマルチウィンドウ非対応 2022 年 Q2 対応予定 個人的なお勧め Windows App SDK への移行を考えつつ WPF で開発
  • 27.
    見た目とロジックの分離をしておこう Web 程ではないが UIフレームワークは変わることがある • 見た目とロジックの分離をしておくことは重要 • MVVM パターンで作られた WPF アプリを Windows App SDK へ移行した例 • runceel/MigrateToWindowsAppSDKFromWPF: Windows Apps modernization workshop (github.com)
  • 28.
    まとめ a Windows OS の API アプリケーション .NETの API ユーザー インターフェース ロジック Win Forms WPF MAUI Win UI Win App SDK 一番困ることが少ない 今後注力される クロスプラットフォーム であれば候補に
  • 29.
    まとめ a Windows OS の API アプリケーション .NETの API ユーザー インターフェース ロジック Win Forms WPF MAUI Win UI Win App SDK 一番困ることが少ない 今後注力される クロスプラットフォーム であれば候補に なるべく見た目とロジックを分離して作って UI フレームワークの 変化に対応可能にしておこう
  • 30.
    参考ドキュメント • Windows Forms •https://docs.microsoft.com/ja-jp/dotnet/desktop/winforms/?view=netdesktop-6.0 • WPF • https://docs.microsoft.com/ja-jp/dotnet/desktop/wpf/?view=netdesktop-6.0 • MAUI • https://docs.microsoft.com/ja-jp/dotnet/maui/ • Windows App SDK • https://docs.microsoft.com/ja-jp/windows/apps/windows-app-sdk/
  • 31.
    ◼ 本書に記載した情報は、本書各項目に関する発行日現在の Microsoftの見解を表明するものです。Microsoftは絶えず変化する市場に対応しなければならないため、ここに記載した情報に 対していかなる責務を負うものではなく、提示された情報の信憑性については保証できません。 ◼ 本書は情報提供のみを目的としています。 Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。 ◼ すべての当該著作権法を遵守することはお客様の責務です。Microsoftの書面による明確な許可なく、本書の如何なる部分についても、転載や検索システムへの格納または挿入を行うこと は、どのような形式または手段(電子的、機械的、複写、レコーディング、その他)、および目的であっても禁じられています。これらは著作権保護された権利を制限するものではあり ません。 ◼ Microsoftは、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。Microsoftから書面によるライセンス契約が明確に供給さ れる場合を除いて、本書の提供はこれらの特許、商標、著作権、またはその他の知的財産へのライセンスを与えるものではありません。 ◼ Microsoft, Windows, その他本文中に登場した各製品名は、Microsoft Corporation の米国およびその他の国における登録商標または商標です。 その他、記載されている会社名および製品名は、一般に各社の商標です。