.NET MAUI アーキテクチャについて説明する
クロスプラットフォーム アプリ開発に使用される一般的なパターンは、ビジネス ロジックをユーザー インターフェイスから分離し、各プラットフォームについて個別のユーザー インターフェイスと UI ロジックを開発することです。 ビジネス ロジックはデバイスの種類ごとに変更されることはありませんが、アプリを駆動してデータを表示するコードは異なる場合があります。 この差異は、デバイスによって提供される機能、API、特徴が異なることが原因です。 このようにマルチプラットフォーム アプリを構築するには、個別のソフトウェア開発キット (SDK) だけでなく、まったく異なる言語やツールセットを扱う必要があります。
.NET MAUI (Multi-platform Application User Interface) の目的は、マルチプラットフォーム アプリの開発を簡略化することです。 .NET MAUI を使用すると、単一のプロジェクトを使用してマルチプラットフォーム アプリを作成しますが、必要に応じてプラットフォーム固有のソース コードとリソースを追加できます。 .NET MAUI の主な目的は、アプリケーション ロジックと UI レイアウトのできるだけ多くの部分を、単一のコードベースで実装できるようにすることです。
このユニットでは、.NET MAUI アーキテクチャと、.NET MAUI アプリケーションを構築するために必要なツールについて説明します。
.NET MAUI テクノロジ スタックとは
.NET には、アプリを作成するためのプラットフォーム固有の一連のフレームワークが用意されています。.NET for Android、.NET for iOS (および iPadOS)、.NET for Mac、WinUI 3 (Windows App SDK を使用) などです。 これらのフレームワークはすべて、同じ .NET 6 基本クラス ライブラリ (BCL) にアクセスできます。 このライブラリには、リソースの作成と管理のための機能と、基になるデバイスの詳細をコードから一般的に抽象化するための機能が用意されています。 BCL は、.NET ランタイムに依存して、コードの実行環境を提供します。 .NET ランタイムのオープンソース実装である Mono は、Android、iOS (と iPadOS)、macOS 環境の実装に使用されます。 Windows では、Win32 が同じ役割を実行します (Windows プラットフォーム用に最適化されている点を除く)。
BCL を使用すると、アプリケーションをさまざまな種類のデバイスで実行しているときでも共通のビジネス ロジックを共有できるようになりますが、プラットフォームが異なれば、アプリケーションのユーザー インターフェイスを定義する方法も異なります。 プラットフォームには、ユーザー インターフェイスの各種要素が通信し、相互動作する方法を指定するためのさまざまなモデルが用意されています。 適切なプラットフォーム固有のフレームワーク (.NET for Android、.NET for iOS、.NET for Mac、または WinUI 3) を使用して、各プラットフォーム用の UI を個別に作成できます。 ただし、このアプローチでは、デバイスの個々のファミリごとにコードベースを維持する必要があります。 .NET MAUI は、モバイル アプリケーション用とデスクトップ アプリケーション用の UI を構築するための単一のフレームワークを提供します。 このフレームワーク (下図の矢印 1 で示す) を使用して UI を作成すると、.NET MAUI によって適切なプラットフォームに変換されます (矢印 2)。
プラットフォーム固有の機能を実装する必要がある場合があります。 このような場合には、次の図の矢印 3 で強調表示されているように、プラットフォーム固有のフレームワークでメソッドを呼び出すことができます。
.NET MAUI の動作のしくみ
.NET MAUI は、その論理的な記述から UI 要素の実装を抽象化します。 XML に基づくプラットフォームに依存しない言語である XAML (Extensible Application Markup Language) を使用して UI を記述することができます。 たとえば、次の XAML フラグメントは、ボタン コントロールの記述を示しています。
<Button Text="Click me"
SemanticProperties.Hint="Counts the number of times you click"
Clicked="OnCounterClicked"
HorizontalOptions="Center" />
この例では、ボタンのラベル ("Click me") を定義しており、ユーザーがボタンを選択したときに OnCounterClicked
という名前のメソッドを実行するよう指定しています。 ボタンとテキストのレイアウトを変更できる他のプロパティもあります。この例では、テキストがボタンの中央に配置されます。 セマンティック プロパティは、視覚障がいのあるユーザー向けに、アクセシビリティのサポートを提供します。
.NET MAUI では、ターゲット デバイス向けのネイティブ コードが常に生成されるため、最適なパフォーマンスが得られます。 .NET MAUI では、各プラットフォームと UI 要素に固有の "ハンドラー" を使用して操作を実行します。 たとえば、アプリのターゲットが iOS である場合、.NET MAUI ハンドラーにより、このコードは iOS UIButton
にマップされます。 Android 上で実行する場合は、Android AppCompatButton です。 これらのハンドラーには、.NET MAUI が提供するコントロール固有のインターフェイスを介して間接的にアクセスします (ボタンの場合は IButton
など)。
Note
必要に応じて、C# コードを使用して UI を動的に作成することもできます。 この方法を使用すると、環境に応じてレイアウトを変更できます。 たとえば、ユーザーが適切な認可レベルをもっていない場合は、特定のコントロールを表示しないようにする場合があります。
.NET MAUI を使用すると、ボタンなどの一般的なコントロールに簡単にアクセスできます。 他の一般的なコントロール (テキスト入力フィールド、ラベル、日付の選択など) も同様に簡単です。 ただし、個々のコントロールでは、リッチ アプリケーションを作成するための優れたプラットフォームを作成することはできません。 .NET MAUI には、次の機能も用意されています。
- ページをデザインするための精巧なレイアウト エンジン。
- 引き出しなどの豊富なナビゲーション タイプを作成するための複数のページ タイプ。
- より洗練された保守性の高い開発パターンのためのデータ バインディングのサポート。
- UI 要素の表示方法を機能拡張するためにカスタム ハンドラーを作成する機能。
- ネイティブ API への直接のアクセスと、UI から切り離されたモバイルおよびデスクトップ アプリの多くの一般的なニーズの抽象化。 Essentials ライブラリを使用して、アプリは GPS、加速度計、バッテリとネットワークの状態などにアクセスできます。 モバイル開発に共通する多数のセンサーとサービスに、このライブラリ経由で使用できます。