Skip to content

MS_WebAssembly

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

WebAssembly

概要

下記リンク先に記載。

補足(本ページはハブである): 原文はリンク集で、
内容の本体は 開発基盤部会 Wiki(DNET_WebAssembly.md)側にある。
ここでは、.NET 開発者にとっての WebAssembly
を補っておく。

補足(WebAssembly とは何か): .NET 開発の文脈で最も重要な技術の 1 つ
になったため、基本を押さえておく。

【WebAssembly(Wasm)】
   ブラウザで動く【バイナリ命令形式】
     ・JavaScript より高速(ネイティブに近い)
     ・【言語を問わない】(C/C++/Rust/Go/C# … からコンパイルできる)★
     ・サンドボックス内で動く(安全)
     ・全主要ブラウザが対応済み(2017 年頃から)
【JavaScript との関係】★ 誤解が多い点
   ・Wasm は JavaScript を【置き換えるものではない】
   ・Wasm は【DOM を直接操作できない】
      → JavaScript 経由で操作する(相互運用)
   ・「計算の重い部分だけ Wasm、UI は JS」という
     使い分けが本来の想定だった

.NET との関わり:

技術 内容
Blazor WebAssembly .NET ランタイムを Wasm で動かし、C# でクライアントを書く
Uno Platform XAML の UI を Wasm でも動かす
.NET の Wasm ビルド wasm-tools ワークロード。ライブラリ単体の Wasm 化
WASI ブラウザ外で Wasm を動かす仕様(サーバ・エッジ)
【Blazor WebAssembly の仕組み】
   ブラウザ
     └ Wasm 上で【.NET ランタイム(Mono ベース)】が動く
          └ アプリの .dll(IL)を読み込んで実行
            ※ AOT を有効にすると IL を Wasm に事前コンパイルできる

 → 【C# のコードがブラウザで動く】★
 → JavaScript を書かずに SPA が作れる

トレードオフ:

【利点】
   ・サーバとクライアントで【C# のコードとモデルを共有できる】★
   ・型安全([TypeScript](MS_TypeScript) より強い)
   ・既存の .NET ライブラリが使える
   ・JavaScript のエコシステムを覚えなくてよい

【欠点】
   ・【初回のダウンロード サイズが大きい】(ランタイム込み)
      → 数 MB。トリミング・圧縮・AOT で削るが、JS の SPA より重い
   ・起動が遅い(ランタイムの初期化)
   ・実行速度は【ネイティブ JS より遅い場合がある】
      → 特に DOM 操作は JS 相互運用のコストがかかる
   ・デバッグ体験が JS ほど成熟していない

Blazor の 2 つのモデルは必ず区別する。

Blazor Server Blazor WebAssembly
実行場所 サーバ ブラウザ(Wasm)
通信 SignalR で UI 差分を往復 初回に一式をダウンロード
初回表示 速い 遅い
応答性 ネットワーク遅延に依存 ローカルで完結
オフライン 不可 (PWA 化できる)
サーバ負荷 接続ごとに状態を持つ 低い
秘密情報 サーバにあるので安全 ブラウザに置かれる(漏れる)★
【.NET 8 以降】
   「Blazor Web App」テンプレートで
   【ページ単位・コンポーネント単位に render mode を選べる】
     ・静的 SSR
     ・Server(対話)
     ・WebAssembly
     ・Auto(初回は Server、以降 Wasm)★
   → 二者択一ではなくなった

補足(ブラウザ外の Wasm ── WASI): 近年の動きとして重要である。

【WASI(WebAssembly System Interface)】
   Wasm を【ブラウザの外】で動かすための仕様
     ・ファイル、ネットワーク等の API を規定
     ・コンテナより軽量・高速に起動する
     ・言語を問わず、同じバイナリがどこでも動く ★

【用途】
   ・エッジ コンピューティング(起動が数 ms)
   ・プラグイン機構(サンドボックスで安全に他人のコードを動かす)
   ・サーバーレス

【.NET の対応】
   wasi-experimental ワークロードで実験的に対応
   → まだ本番向けとは言い難い段階

「コンテナの次」として注目されているが、
現時点で業務システムに採用する段階ではない——
という距離感で捉えておくのが妥当である。

参考

.NET 開発基盤部会 Wiki

  • WebAssembly(DNET_WebAssembly.md

Microsoft Learn


Tags: 移行, プログラミング, ASP.NET, ASP.NET Web API, ASP.NET SPA, JavaScript

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally