Mauiの学習の道 -- 開幕

Mauiの学習の道 -- 開幕

.NET Mauiとは

最終更新 2022/06/23 23:08
轩研 Maui开发者
読了目安 4 分
カテゴリ
MAUI
タグ
.NET C# MAUI

長い間考えましたが、まずは Maui の紹介を投稿することにしました。既に何度も語られているテーマではありますが、このような議論は欠かせません(お手軽記事をお許しください)。

.NET MAUI とは

.NET MAUI は、マイクロソフトが提供する .NET マルチプラットフォーム アプリ UI (.NET MAUI) をベースとしたクロスプラットフォームフレームワークです。C# と XAML を使用してネイティブのモバイルおよびデスクトップアプリを作成でき、単一の共有コードベースから Android、iOS、macOS、Windows 上で動作するアプリを開発できます。

.NET MAUI は Xamarin.Forms から派生しており、Xamarin.Forms の使用経験があれば、MAUI を非常にスムーズに使いこなせるでしょう。.NET MAUI を使用すると、単一のプロジェクトでマルチプラットフォームアプリを作成できますが、必要に応じてプラットフォーム固有のソースコードやリソースを追加することも可能です。.NET MAUI の主な目標は、可能な限り多くのアプリロジックと UI レイアウトを単一のコードベースに集約することです。

.NET MAUI がサポートするプラットフォーム

  • Android 5.0 以降(API 21)
  • iOS 10 以降(UIKit)
  • macOS 10.13 以降(Mac Catalyst UIKit)
  • Windows 11 および Windows 10(1809)以降(WinUI3 WindowsAppSdk)
  • Tizen(Samsung がサポート、現在はプロジェクトテンプレートに統合済み)
  • Linux(コミュニティサポート)

.NET MAUI の動作原理

.NET MAUI は、Android、iOS、macOS、Windows の API を単一の API に統合し、一度書けばどこでも実行できる開発者体験を提供すると同時に、各ネイティブプラットフォームのあらゆる側面への深いアクセスも可能にします。

.NET 6 は、アプリを作成するためのプラットフォーム固有のフレームワーク群を提供します:.NET for Android、.NET for iOS、.NET for macOS、Windows UI 3 (WinUI 3) ライブラリです。これらのフレームワークはすべて同じ .NET 6 ベースクラスライブラリ (BCL) にアクセスできます。BCL は基盤となるプラットフォームの詳細をコードから抽象化します。BCL は .NET ランタイムに依存し、コードに実行環境を提供します。

Android、iOS、macOS の場合、実行環境は Mono(.NET ランタイムの実装)によって提供されます。Windows では、Win32 が実行環境を提供します。

BCL により、異なるプラットフォームで動作するアプリは共通のビジネスロジックを共有できますが、各プラットフォームはアプリのユーザーインターフェースを定義する方法が異なり、UI 要素の通信や相互運用の方法も異なるモデルを提供しています。Android、iOS、macOS、WinUI 3 用の .NET を使用してプラットフォームごとに個別に UI を作成することも可能ですが、その場合はデバイスファミリごとにコードベースを維持する必要があります。.NET MAUI は、モバイルおよびデスクトップアプリ向けの UI を構築するためのフレームワークを提供します。

次の図は、.NET MAUI アプリのアーキテクチャの高レベルな概要を示しています:

.NET MAUI アプリでは、主に .NET MAUI API とやり取りするコードを記述し、.NET MAUI がネイティブプラットフォームの API を直接利用します。さらに、アプリコードは必要に応じてプラットフォーム API を直接使用することもできます。

.NET MAUI アプリは Windows PC または Mac で記述でき(現時点では VS2022 プレビューが必要)、ネイティブアプリパッケージにコンパイルされます:

  • Android:.NET MAUI を使用してコンパイルされたアプリは、C# から中間言語 (IL) にコンパイルされ、アプリ起動時に Just-In-Time (JIT) コンパイルされてネイティブアセンブリに変換されます。
  • iOS:.NET MAUI を使用してコンパイルされたアプリは、完全にネイティブコンパイル(C# からネイティブ ARM アセンブリコードへの Ahead-Of-Time (AOT) コンパイル)されます。
  • macOS:.NET MAUI を使用してコンパイルされたアプリは、Mac Catalyst を利用します。これは Apple が提供するソリューションで、UIKit を使用してビルドされた iOS アプリをデスクトップに導入し、必要に応じて追加の AppKit やプラットフォーム API で拡張します。
  • Windows:.NET MAUI を使用して生成されたアプリは、Windows UI 3 (WinUI 3) ライブラリを使用して、Windows デスクトップ向けのネイティブアプリを作成します。

.NET MAUI のその他の利用方法

  • .NET MAUI は各プラットフォームのネイティブコントロールのラッパーを提供しますが、MAUI が提供する自己描画エンジン(Microsoft.Maui.Graphics)を使用して、独自の要件に合ったコントロールを描画することもできます。
  • .NET MAUI Blazor アプリを作成し、ウェブページと同様のユーザー体験を実現することもできます。.NET MAUI Blazor アプリには、より新しいプラットフォーム固有の WebView コントロールが必要です。現在サポートされているプラットフォームは以下の通りです:
    • Android 7.0(API 24)以降(Chrome)
    • iOS 14 以降(Safari)
    • Mac Catalyst macOS 11 以降(Safari)
    • Windows 11、Windows 10(1809)以降(Edge WebView2)
    • Tizen(不明)
    • Linux(不明)

.NET MAUI 開発に必要な技術知識

  • 基礎:
    • .NET
    • C#
    • XAML
    • MAUI
  • 拡張:
    • WinUI3 API および Windows プラットフォーム API(Windows)
    • Android API(Android)(通常は不要、ハードウェア呼び出しが必要な場合に使用)
    • UIKit、iOS プラットフォーム API(iOS)(通常は不要、ハードウェア呼び出しが必要な場合に使用)
    • UIKit、AppKit、macOS API(Mac)
    • Blazor(必須ではない)

.NET MAUI の長所と短所

  • 長所:

    • C# + .NET で開発できるため、習得が容易でアップグレードも簡単。宇宙一の IDE と組み合わせることで、作業効率が格段に向上する。
    • マイクロソフトの技術には共通点が多い(WPF に容易に移行可能)。
    • 大手企業によるサポート。
    • 各プラットフォームでそのプラットフォームのコントロールを使用するため、ネイティブのパフォーマンスを確保。
    • Blazor と組み合わせることで、Web と一貫したユーザー体験を実現可能。
  • 短所:

    • Windows 7 をサポートしておらず、Windows 10 のバージョンにも制限がある。
    • 現在は正式リリースされているものの、まだ十分に安定していない。
    • C# であるため、Java 系やフロントエンド系に比べて、適した仕事を見つけるのが難しい可能性がある(大手企業は Java 系が一般的)。
    • マイクロソフトはプロダクトを打ち切ることが多い。
    • ネイティブであることを保証する一方で、各プラットフォームに応じた適用作業が必要(自己描画でない場合)。
    • ネイティブであることを保証する一方で、プラットフォーム固有の知識(コントロールの動作の違いなど)を学ぶ必要がある(もちろん、これはどのクロスプラットフォームフレームワークでも必要)。

類似のクロスプラットフォーム開発フレームワーク

  • QT(C++ を使用、筆者はこれを真のクロスプラットフォームと考える。組み込みもサポート)(自己描画)
  • Flutter(Google のクロスプラットフォームフレームワーク、Dart 言語を使用)(自己描画)
  • Uno Platform(C#、実装方法は MAUI に類似)
  • Avalonia(C#、WPF に類似)(自己描画)
  • CPF(C# 国産クロスプラットフォーム UI 開発フレームワーク、龍芯に対応)(自己描画)
  • Electron(Web 技術スタック)

関連学習リンク

さらに探索

関連読書

その他の記事
同じカテゴリ / 同じタグ 2023/01/12

Maui Blazor でカメラ機能を実装する方法

Maui Blazor ではインターフェースが WebView でレンダリングされるため、Android のカメラを使用する際に画面コンポーネントにバインドする必要があるため、カメラを取得できません。

続きを読む