Start Debugging
JA
2026-05-26 更新日 2026-11-02 dotnet-11comparisonblazordotnet Edit on GitHub

.NET 11 の Blazor レンダーモード: Server、WebAssembly、Auto

ホスティング、オフライン、サービス要件から Blazor Web App とスタンドアロン WebAssembly を比較。Auto の動作も訂正。

このサイトでは、AI エージェントの Walter を調査、執筆、保守に使用しています。 制作と検証の方法

訂正 — 2026年11月2日: 以前の版には、裏付けのないベンチマークと、Auto、テンプレート、オフライン対応、レンダーモードの境界について誤りがありました。これらを訂正しました。本稿では .NET 11 の性能測定結果を掲載していません。

新しくサーバーでホストする Blazor アプリでは、まず Blazor Web App を検討してください。静的レンダリングと、任意の Server、WebAssembly、Auto 対話機能を提供します。すべてを静的ファイルとして配信する必要がある場合は、スタンドアロン Blazor WebAssembly が候補です。「Blazor United」は統合方式の初期の名称であり、別途インストールする第3のランタイムではありません。

訂正時点で Microsoft は .NET 11 RC3 を go-live のプレリリースとして公開しています。現在の LTS は .NET 10 で、.NET 11 は STS 系列です。ランタイムのサポート期間とレンダリング方式は別々に判断してください。

コンポーネントをどこで実行するか

選択肢適する用途考慮するコスト
静的 SSRサーバー HTML を使うコンテンツや要求・応答型フォーム対話的な C# イベント処理はない
Interactive Serverサーバーサービスと小さな初回ダウンロード通信遅延、circuit、サーバー資源
Interactive WebAssemblyブラウザーで実行する対話 UIランタイム取得、ブラウザー制限、バックエンド API
Interactive Auto両方の環境を利用・サポートしたい2つの実行経路の開発と検証
スタンドアロン WebAssembly静的ホスティングや意図的に設計するオフライン PWAキャッシュ設計と API の独立した保護

Auto はコンポーネントのインスタンス生成時に対話ランタイムを選びます。初回は Server、バンドルがキャッシュされた後の訪問では WebAssembly を使うことがあります。実行中のコンポーネントを Server から WebAssembly に移すわけではありません。 Auto を選んでもサーバー再起動の影響がなくなるわけではありません。レンダーモードの規則を参照してください。

現在のテンプレートを使う

次のコマンドは SDK 8.0.427 と 10.0.302 で検証しました。.NET 11 SDK では dotnet new blazor --help でインストール済みビルドのオプションを確認してください。今回 .NET 11 では実行していません。

dotnet new blazor -o ServerDemo --interactivity Server --no-restore
dotnet new blazor -o AutoDemo --interactivity Auto --no-restore
dotnet new blazorwasm -o OfflineDemo --pwa --no-restore

Server オプションは、WebAssembly クライアントプロジェクトを必須にせず Blazor Web App を使います。WebAssembly のダウンロードを禁止する場合も、古い blazorserver テンプレートは必要ありません。検証した両 SDK にこのテンプレートはありませんでした。Auto は .Client プロジェクトを生成し、WebAssembly で実行するコンポーネントはそのビルドに含める必要があります。ツールのドキュメントに説明があります。

生成した Server アプリでは、次のページが両 SDK でコンパイルできました。

@page "/counter-check"
@rendermode InteractiveServer

<button @onclick="() => count++">@count</button>

@code {
    private int count;
}

対話モードを指定・継承していない場合、既定は静的 SSR です。組み込みの @rendermode StaticServer という値はありません。ディレクティブを取り除くだけで静的になるのは、親から対話性を継承していない場合です。

境界とサービスに注意する

静的な親は、異なるモードの兄弟を含む対話的な島を持てます。対話的な子が親と互換性のない対話モードへ切り替えることはできません。静的・対話的境界を越えるパラメーターはシリアライズ可能である必要があり、任意のレンダーフラグメントは渡せません。

Server コンポーネントはサーバーサービスを呼べますが、認可と適切なサービスの有効期間が必要です。ブラウザー用コンポーネントに DB 資格情報や秘密を含めてはいけません。DI 登録の欠落は、コンパイル時ではなく実行時に発覚することも多くあります。Auto には両環境に適したサービス実装が必要です。対話的コンポーネントは既定でプリレンダリングされるため、WebAssembly でもブラウザー専用 API の呼び出し時期を考慮します。

オフライン、拡張性、Hybrid は別の判断

Blazor Web App 内に WebAssembly コンポーネントがあっても、アプリ全体が自動的にオフライン対応になるわけではありません。スタンドアロン PWA には service worker、アセットキャッシュ、ローカルデータ、同期設計が必要です。未キャッシュの画面遷移やリモート API は通信断で失敗し得ます。

Server の対話機能には動作する SignalR 接続が必要です。収容能力は circuit の状態と負荷に依存し、普遍的な5,000ユーザー上限はありません。WebAssembly は UI 処理をブラウザーへ移しますが、API の処理能力は有限です。起動、転送、操作遅延、サーバーメモリを自分のアプリで測定してください。以前の固定値の表には再現可能な根拠がありませんでした。

Blazor Hybrid は、デスクトップ/モバイルアプリのネイティブ .NET ランタイムで Razor コンポーネントを実行します。スタンドアロン WebAssembly アプリは必要ありません。Razor クラスライブラリによる共有は別の設計判断です。

既存アプリでは、測定した問題を解決する最小限の変更を選んでください。Framework 移行ガイドでは System.Web の置き換えも扱います。

検証範囲: .NET 8 と10でテンプレート生成、Server ビルド、カウンターのコンパイルを確認しました。.NET 11 ビルド、ブラウザー性能測定、オフライン動作、Auto のライフサイクル実験は実施していません。

追加の一次資料

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.