.NET MAUI とは

.NET Multi-Platform App UI (.NET MAUI) は、C# と XAML を使用して、ネイティブのモバイル アプリやデスクトップ アプリを作成するためのクロスプラットフォーム フレームワークです。

.NET MAUI を使用すると、1 つの共有コード ベースから Android、iOS、macOS、Windows で実行できるアプリを開発できます。

.NET MAUI supported platforms.

.NET MAUI はオープンソースであり、Xamarin.Forms を進化させ、モバイルからデスクトップ シナリオに拡張したもので、UI コントロールはパフォーマンスと拡張性のために一から再構築されています。 Xamarin.Forms を使用してクロス プラットフォーム ユーザー インターフェイスを構築したことがある場合は、.NET MAUI と多くの類似点に気づくことでしょう。 ただし、相違点もいくつかあります。 .NET MAUI を使用して、1 つのプロジェクトを使用して複数プラットフォームのアプリを作成できますが、必要に応じてプラットフォーム固有のソース コードとリソースを追加できます。 .NET MAUI の主な目的の 1 つは、アプリ ロジックと UI レイアウトのできるだけ多くの部分を単一のコード ベースで実装できるようにすることです。

.NET MAUI の対象者

.NET MAUI は、次の目的を持つ開発者向けです。

  • Visual Studio の 1 つの共有コード ベースから、XAML と C# でクロス プラットフォーム アプリを記述する。
  • プラットフォーム間で UI のレイアウトと設計を共有する。
  • プラットフォーム間でコード、テスト、ビジネス ロジックを共有する。

.NET MAUI の仕組み

.NET MAUI は、Android、iOS、macOS、Windows の各 API を 1 つの API に統合することで、「1 度書けばどこでも動く」という開発者エクスペリエンスを実現すると同時に、それぞれのネイティブ プラットフォームのあらゆる側面に深くアクセスできるようにします。

.NET 6 以降では、.NET Android、.NET iOS、.NET macOS、Windows UI 3 (WinUI 3) ライブラリなど、アプリを作成するための一連のプラットフォーム固有のフレームワークが提供されます。 これらのフレームワークはすべて、同じ .NET 基本クラス ライブラリ (BCL) にアクセスできます。 このライブラリは、基になるプラットフォームの詳細をコードから抽象化します。 BCL は、.NET ランタイムに依存して、コードの実行環境を提供します。 Android、iOS、macOS の場合、環境は.NET ランタイムの実装である Mono によって実装されます。 Windows では、.NET CoreCLR によって実行環境が提供されます。

BCL を使用すると、さまざまなプラットフォームで実行されているアプリで共通のビジネス ロジックの共有が可能になりますが、プラットフォームが異なると、アプリのユーザー インターフェイスを定義する方法が異なり、ユーザー インターフェイスの要素が通信および相互作用する方法を指定するために提供されるモデルが異なります。 プラットフォームごとに、適切なプラットフォーム固有のフレームワーク (.NET Android、.NET iOS、.NET Mac、または WinUI 3) を使用して UI を個別に作成できますが、この方法では、個々のデバイスのファミリごとにコード ベースを維持する必要があります。

.NET MAUI は、モバイル アプリ用とデスクトップ アプリ用の UI を構築するための単一のフレームワークを提供します。 次の図は、.NET MAUI アプリのアーキテクチャのハイレベルなビューを示します。

.NET MAUI architecture diagram.

.NET MAUI アプリでは、主に .NET MAUI API (1) と対話するコードを記述します。 その後、.NET MAUI はネイティブ プラットフォーム API を直接使用します (3)。 さらに、必要に応じて、アプリ コードでプラットフォーム API (2) を直接実行できます。

.NET MAUI アプリは、PC または Mac で記述し、ネイティブ アプリ パッケージにコンパイルできます。

  • .NET MAUI を使って構築された Android アプリでは、アプリケーションの起動時に、C# が 中間言語 (IL) にコンパイルされてから、ネイティブのアセンブリに Just-In-Time (JIT) コンパイルされます。
  • .NET MAUI を使用して構築された iOS アプリは、C# からネイティブ ARM アセンブリ コードに完全に Ahead-Of-Time (AOT) コンパイルされます。
  • .NET MAUI を使用して構築された macOS アプリでは、Mac Catalyst を使用します。これは、UIKit で構築された iOS アプリをデスクトップに取り込み、必要に応じて追加の AppKit とプラットフォーム API で拡張する Apple のソリューションです。
  • .NET MAUI を使用して構築された Windows アプリでは、Windows UI 3 (WinUI 3) ライブラリを使用して、Windows デスクトップを対象とするネイティブ アプリを作成します。 WinUI 3 に関する詳細については、「Windows UI ライブラリ」をご覧ください。

Note

iOS および macOS 用のアプリを構築するには、Mac が必要です。

.NET MAUI が提供するもの

.NET MAUI には、データの表示、アクションの開始、アクティビティの示し、コレクションの表示、データの選択などを行うために使用できるコントロールのコレクションが用意されています。 .NET MAUI には、コントロールのコレクションに加えて、次の機能も用意されています。

  • ページをデザインするための精巧なレイアウト エンジン。
  • 引き出しなどの豊富なナビゲーション タイプを作成するための複数のページ タイプ。
  • より洗練された保守性の高い開発パターンのためのデータ バインディングのサポート。
  • ハンドラーをカスタマイズして、UI 要素の表示方法を機能拡張する機能。
  • ネイティブ デバイス機能にアクセスするためのクロス プラットフォーム API。 これらの API を使用すると、アプリは GPS、加速度計、バッテリ、ネットワークの状態などのデバイス機能にアクセスできます。 詳細については、「デバイス機能のクロス プラットフォーム API」をご覧ください。
  • クロス プラットフォーム グラフィックス機能。図形とイメージの描画と描画、合成操作、およびグラフィカル オブジェクト変換をサポートする描画キャンバスを提供します。
  • マルチターゲットを使用した Android、iOS、macOS、Windows をターゲットにする 1 つのプロジェクト システム。 詳細については、「.NET MAUI 単一プロジェクト」をご覧ください。
  • .NET ホット リロードを行うと、アプリの実行中に XAML とマネージド ソース コードの両方を変更し、次にアプリをリビルドせずに変更の結果を確認できます。 詳細については、「.NET ホット リロード」をご覧ください。

デバイスの機能用のクロスプラットフォーム API

.NET MAUI は、ネイティブ デバイスの機能にクロスプラットフォーム API を提供します。 .NET MAUI には、次のデバイス機能にアクセスするための機能が用意されています。

  • 加速度計、コンパス、ジャイロメーターなどのセンサーへのアクセス。
  • デバイスのネットワーク接続状態をチェックし、変更を検出する機能。
  • アプリが実行されているデバイスに関する情報が提供されます。
  • アプリ間で、システム クリップボードにテキストをコピーして貼り付けます。
  • デバイスから 1 つまたは複数のファイルを選択します。
  • キーと値のペアとしてデータを安全に格納します。
  • 組み込みのテキスト読み上げエンジンを使用して、デバイスからテキストを読み取ります。
  • 特定のアプリに登録されている URL へのコールバックをリッスンする、ブラウザー ベースの認証フローを開始します。

単一プロジェクト

.NET MAUI 単一プロジェクトでは、アプリの開発時に通常発生するプラットフォーム固有の開発エクスペリエンスを利用し、Android、iOS、macOS、Windows をターゲットにできる単一の共有プロジェクトに抽象化します。

.NET MAUI 単一プロジェクトは、対象となるプラットフォームに関係なく、シンプルで一貫したクロスプラットフォーム開発エクスペリエンスを提供します。 .NET MAUI 単一プロジェクトには、次の機能があります。

  • Android、iOS、macOS、Windows をターゲットにできる 1 つの共有プロジェクト。
  • .NET MAUI アプリを実行するための簡略化されたデバッグ ターゲットの選択。
  • 単一プロジェクト内の共有リソース ファイル。
  • アプリのタイトル、ID、バージョンなどを指定する 1 つのアプリ マニフェスト。
  • 必要に応じて、プラットフォーム固有の API とツールにアクセスできます。
  • 単一のクロスプラットフォーム アプリ エントリ ポイント。

.NET MAUI 単一プロジェクトは、マルチターゲットの使用と SDK スタイルのプロジェクトの使用により可能になります。 .NET MAUI 単一プロジェクトの詳細については、「.NET MAUI 単一プロジェクト」をご覧ください。

ホット リロード

.NET MAUI には、.NET ホット リロードのサポートが含まれています。これにより、アプリの実行中にマネージド ソース コードを変更できます。手動で一時停止またはブレークポイントにヒットする必要がありません。 次に、コードの編集を、再コンパイルせずに実行中のアプリに適用できます。

.NET MAUI には、XAML ホット リロードのサポートも含まれています。これにより、XAML ファイルを保存し、再コンパイルせずに実行中のアプリに反映された変更を確認できます。 さらに、ナビゲーションの状態とデータが維持されるため、アプリ内での居場所を失うことなく、UI をすばやく反復処理できます。