SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

マルチターゲットアプリ開発の新しいアプローチ~.NET 9 新テンプレートの基本~

.NET 9のテンプレート「.NET MAUI Blazor」を学ぼう。マルチターゲットアプリ開発の新しいアプローチ

マルチターゲットアプリ開発の新しいアプローチ~.NET 9 新テンプレートの基本~ 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

.NET MAUI

 .NET MAUIは、Microsoftが開発・提供しているオープンソースのクロスプラットフォームフレームワークです。前身であるXamarin.Formsの進化形として開発されており、単一のC#コードベースと単一のプロジェクト構成から、Windows、macOS、iOS、Android向けの完全なネイティブアプリケーションをビルドできます。

.NET MAUIの特徴

 .NET MAUIの大きな特徴は、UIがWebView(ブラウザエンジン)で描画されるのではなく、各プラットフォームが提供するネイティブUIコントロールとして直接レンダリング(描画、表示)される点です。

 具体的に示すと、<Button>や<Label>といった、.NET MAUIの抽象化されたUIコントロールを、XAML(XMLベースのマークアップ言語)またはC#コードで記述するだけで、コンパイル時や実行時に各プラットフォームのネイティブコントロールに自動的に変換、描画されます。

 この仕組みにより、アプリケーションは、各OSの標準的なルック&フィール(見た目と操作感)で、ネイティブアプリ並の高いパフォーマンスを実現します。

 その他の特徴として、次の点が挙げられます。

単一プロジェクト構成

 以前のXamarin.Formsでは、共有コードプロジェクトとは別に、プラットフォームごとの専用プロジェクトファイルが必要でした。.NET MAUIでは、すべてが1つのプロジェクトファイルに統合されています。これにより、ライブラリの管理やビルド設定、依存関係の解決などが簡素化され、開発効率が大きく向上しました。テンプレートで生成される初期のプロジェクト構造は、次のようになります。

MAUIのプロジェクト構造
MAUIのプロジェクト構造

UIコントロールとレイアウトシステム

 .NET MAUIでは、多くのUIコントロールと、次のレイアウトシステムが標準で提供されています。

表:主なレイアウト
レイアウト名 概要
Grid 行と列を定義する表形式レイアウト
FlexLayout CSS Flexboxと同様の柔軟なレイアウト
StackLayout 縦方向または横方向に要素を順次配置するレイアウト
AbsoluteLayout 絶対座標による位置を定義するレイアウト

MVVMパターンとデータバインディングのサポート

 MVVM(Model-View-ViewModel)パターンとは、UIとロジックを分離する設計パターンです。アプリケーションの保守性と拡張性を高めることができます。

MAUIのMVVMパターン
MAUIのMVVMパターン
表:MVVMのコンポーネント
コンポーネント 概要
Model データとビジネスロジック(業務処理)
View UI(画面表示)
ViewModel ViewとModelの橋渡し(データバインディング)

 データバインディング機能により、ViewModelのプロパティ(データ)の変更が自動的にUI要素に反映されます。また逆に、UI要素の変更もViewModelに自動で伝播します。このしくみにより、UIの状態管理がシンプルになり、テストしやすく保守性の高いコードを記述できます。

ネイティブAPIのアクセス

 .NET MAUIでは、センサーやカメラといったデバイス固有の機能、通知システムなどのOS固有のAPIに直接アクセス可能です。これにより、Web技術だけでは難しい高度な機能も実装可能です。

Blazor

 Blazorは、C#と.NETを用いてWebアプリケーションを開発するためのフレームワークです。Webでの動的な処理は、従来、JavaScriptを用いるのが一般的でした。しかしBlazorでは、WebAssemblyという技術を活用して、.NETのコードをブラウザ上で直接実行することが可能です。WebAssembly(WASM)は、ブラウザ上で高速に実行できるバイナリ形式のコードです。W3C(World Wide Web Consortium)によって標準化された技術で、JavaScript以外の言語(C++、Rust、C#など)で書かれたコードをブラウザ上で実行できます。

 Blazoについては、「ASP.NET Core Blazorチュートリアル」の記事も参考にしてください。

Blazorの特徴

 Blazorでは、Razorというテンプレート構文でUIコンポーネントを記述します。Razor構文では、HTMLマークアップ内に@記号を使って、C#のコードを自然に直感的な形で記述できます。

 次のサンプルページは、ボタンクリックで挨拶メッセージを変更するものです。

@page "/greeting"
<p>今日は @today.ToLongDateString() です。</p>
<input @bind="name" placeholder="名前を入力してください" />
<button class="change-button" @onclick="ChangeGreeting">挨拶を変更</button>
<p class="message">@message</p>

@code {
    private string name = "ゲスト";
    private DateTime today = DateTime.Now;
    private string message = "素敵な一日になりますように!";

    private void ChangeGreeting()
    {
        message = $"{name} さん、今日もがんばりましょう!";
    }
}

 このように、ひとつのファイル(.razorファイル)内で、コンポーネントのUI構造(HTML)や動作ロジック(C#)を統合的に記述できます。

Blazorのホスティングモデル

 ホスティングモデルとは、Blazorアプリがどこで実行されるか(サーバーかクライアントか)を決める仕組みのことです。Blazorでは、次の2つのホスティングモデルが提供されています。

Blazor ServerとBlazor WebAssemblyの構造
Blazor ServerとBlazor WebAssemblyの構造

Blazor Server

 アプリケーションのロジックはサーバー上で実行し、UIの更新情報だけをSignalRというリアルタイム通信を使ってクライアント(ブラウザ)に送信するモデルです。SignalRは、サーバーとクライアント間で、HTTP接続よりも低遅延な双方向通信を実現するためのライブラリです。

 ブラウザでボタンクリックなどの操作を行うと、その情報がサーバーに送られてUIの差分を計算し、更新が必要な部分だけを、サーバーがクライアントに送り返して画面を描画します。リアルタイム性が高い反面、常にサーバーとの接続が必要なため、オフラインでは動作しません。

Blazor WebAssembly (Wasm)

 Blazor WebAssemblyは、WebAssembly技術を使い、C#や.NETのコードをブラウザ上で直接実行するモデルです。アプリケーションの初回アクセス時に、.NETランタイムなどのファイルがブラウザにダウンロードされ、その後は、クライアントのみでアプリケーションが動作します。サーバーと通信する必要がある場合は、Web API呼び出しを通じて行います。

対話型レンダリングモード

 .NET 8以降のBlazorでは、従来のServer/WebAssemblyの選択に加えて、次のような対話型レンダリングモードが導入されています。対話型レンダリングモードとは、「どこで、どのようにUIをインタラクティブ(対話型)にするか」という選択肢です。

 Blazorでは、ページやコンポーネントの要件に応じて最適なモードを選択できる仕組みが提供されています。

静的サーバー (Static SSR)モード

 サーバー側でHTMLを生成し、ブラウザに送信するだけの最もシンプルなモードです。クライアント側は、受け取ったHTMLを表示するだけで、ボタンのクリックなどのイベントには反応しません。

対話型サーバー (Interactive Server)モード

 従来のBlazor Serverのモードです。

対話型WebAssembly(Interactive Wasm)モード

 従来のBlazor WebAssemblyのモードです。

自動(Interactive Auto)モード

 上記の対話型サーバーモードとWasmモードの「いいとこどり」とも言えるモードです。最初はサーバーモードで迅速にページを表示し、ユーザーの待機時間を最小限に抑えます。その間に、裏でWasmのダウンロードを進めます。ダウンロードが完了すると、自動的にWasmモードに切り替わり、以降はクライアント側で快適に動作します。

次のページ
.NET 9で追加された「.NET MAUI Blazor HybridアプリとWebアプリ」

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
この記事の著者

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/22093 2025/08/26 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング