---
title: .NET MAUI、 何がうれしいの
tags:  #.net maui #.net  
author: [Tomohiro Suzuki](https://convert.docswell.com/user/hiro128_777)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/54JM1NNV7W.jpg?width=480
description: .NET MAUI の Xamarin.Forms と比べた主な改善点について。
published: June 18, 22
canonical: https://convert.docswell.com/s/hiro128_777/58Q1WZ-2022-06-18-003249
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/54JM1NNV7W.jpg)

.NET MAUI、 何がうれしいの？
Tomohiro Suzuki
@hiro128_777


# Page. 2

![Page Image](https://bcdn.docswell.com/page/ZPJRLDDWJ9.jpg)

自己紹介
鈴木友宏
Microsoft 製品の技術支援の仕事をしています。
Twitter：@hiro128_777
blog：https://hiro128.hatenablog.jp/
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/NPEXW11VJX.jpg)

Xamarin.Foms と .NET MAUI 何が違う？
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/63EKV225JD.jpg)

Xamarin.Forms と .NET MAUIの主な違い
Xamarin.Forms
プロジェクトの構造
.NET MAUI
非SDKスタイル（Franken-proj）
SDK スタイル
プラットフォームごとに個別のプロジェクトを使用
単一のプロジェクトで、複数プラットフォームを
ターゲットにできる
ツールチェーン
.NETFramework
.NET CLI
リソース管理
プラットフォームごとに個別管理
単一のプロジェクト内で一元管理
ネイティブ UI コントロールのカスタマイズ
プラットフォーム固有のデバイスの解像度に応じたイ SVGを準備し、各プラットフォームの解像度の
メージを準備
PNGに変換できる
ブートストラップ
独自（App クラス）
.NET Generic Host
ホットリロード
完全な XAMLホットリロード
完全な .NETホットリロード
（SDK5.x および Visual Studio 2019 16.9以降） 完全な XAMLホットリロード
UI コントロール
アーキテクチャ
レンダラー
ハンドラー
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4L73M441E5.jpg)

最大のコンセプトの違いは、レンダラーからハンドラーへの変更
ハンドラーアーキテクチャの採用によってプラットフォーム固有のレン
ダリングの責務を、共有コードの抽象化 UI フレームワークの実装
から分離したこと。
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/V87D6QQKJG.jpg)

Xamarin.Forms レンダラーアーキテクチャー
共有コード
プラットフォーム固有コード
Xamarin.Forms.Platform.iOS
Xamarin.Forms
LabelRenderer
Label
Xamarin.Forms.Platform.Android
LabelRenderer
レンダラーは、共有プロジェクトの UI コントロール実装に依存している
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/4VJPYLL3J8.jpg)

Xamarin.Forms レンダラーアーキテクチャーの問題点
• レンダラーが Xamarin.Forms の UI コンポーネントと密結合している。
• アセンブリスキャンとリフレクションというコストの大きい処理を使用して UI コントロールのレンダ
ラーを取得するため遅い。
• 共有プロジェクトからネイティブ UI コントロールにアクセスする場合、レンダラーを介してアクセス
する手段は一応あるが非常に手間がかかる。
• 共有プロジェクトからネイティブ UI コントロールのプロパティを変更する場合、たった1つのプロパ
ティの変更であっても、共有プロジェクトとネイティブプロジェクトにまたがるレンダリングの仕組
みを理解した上で、レンダラーに対し定型的な多くのコードを記述する必要があり、非常に手
間がかかる。
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/L2EVGQQNEQ.jpg)

.NET MAUI ハンドラーアーキテクチャー
共有コード
抽象化UIコントロール
インターフェース
プラットフォーム固有コード
Partial Class
Microsoft.Maui.Controls
Microsoft.Maui
Microsoft.Maui.Handlers
Label
ILabel
LabelHandler
LabelHandler.cs
LabelHandler.iOS.cs
LabelHandler.Android.cs
Microsoft.Maui.Controls
Microsoft.Maui
Microsoft.Maui.Handlers
ハンドラーはインターフェースにのみ依存し、共有プロジェクトの抽象化 UI コントロールの実装には依存し
ない。
共有プロジェクトでも、プラットフォーム固有プロジェクトでも、ネイティブ UI コントロールを直接操作できる
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/Z57G8WW57L.jpg)

.NET MAUI で導入されたハンドラーアーキテクチャー
Xamarin.Forms におけるレンダラーの役割は、.NET MAUI のハンドラーに引き継がれました。
最大のコンセプトの違いは、ハンドラによって処理されるプラットフォーム固有のレンダリングの責
務を、共有コードの抽象化 UI フレームワークの実装から分離したことです。
これによって以下のようなメリットが生まれました。
• ハンドラーはアセンブリスキャンが不要➡︎速度向上
• 共有コード内でもでもネイティブ UI コントロールに直接アクセスしてプロパティを変更できる。
• ハンドラーは、.NET MAUI の .NET Generic Host 内に直接記述も可能で、簡単に実装およ
び使用でき、特定のコントロール、またはアプリで使用されるすべてのコントロールに簡単に追
加できる。
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/V4EQ933LEP.jpg)

（参考）.NET Generic Host
単一のクロスプラットフォームアプリエントリポイント（MauiProgram.cs）でアプリのグローバル構
成を管理するデザインパターンであり、シンプルで保守も簡単です。
プラットフォームフォルダには、各プラットフォームでアプリを起動するプラットフォーム固有のコードが
含まれています。
なお、Blazor アプリや ASP.NET Coreアプリでも同様のパターンが提供されています。
ビルダーでは以下の内容を構成できます。
• 起動するアプリクラスの指定
• フォント登録
• Dependency injection
• ネイティブ UI コントロールのカスタマイズ
1


# Page. 11

![Page Image](https://bcdn.docswell.com/page/DKJ4X115J1.jpg)

.NET MAUI のブートストラップ サンプルコード
MauiProgram.cs
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/PLE1NGG2JG.jpg)

起動するアプリクラスの指定
MauiProgram.cs
App.xaml.cs
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/8GEW4KK272.jpg)

フォントの登録
MauiProgram.cs
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/W47Z2ZZ4E3.jpg)

Dependency injection : AppSlell クラスを DI コンテナに登録
MauiProgram.cs
App.xaml.cs
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/KYJ6VZZG7V.jpg)

ネイティブ UI コントロールのカスタマイズ
MauiProgram.cs
レンダリング結果
共有プロジェクトでも、ネイティブ UI
コントロールを直接操作できる
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/5GJ5DWWXJ4.jpg)

まとめ
.NET MAUI のアドバンテージは、以下の2点に集約されます。
• Xamarin.Forms の面倒だった部分が非常に扱いやすくなり、直感的でシンプルなコードで記
述できるよう改善された。
• アセンブリスキャンやリフレクションなどコストの高い処理を回避し速度が向上した。
つまり、「 .NET MAUI ＝ より簡単で使いやすくなった Xamarin.Forms」と言えます。
というわけで、早速使ってみましょう！
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/V9E28QQQER.jpg)

ご清聴ありがとうございました


