---
title: C#で作るWebAssemblyランタイム
tags: 
author: [nuskey](https://image.docswell.com/user/nuskey)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/9J29P98DER.jpg?width=480
description: 超dotnet newの登壇資料です
published: May 29, 26
canonical: https://image.docswell.com/s/nuskey/59NR6X-super-dotnet-new
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/9J29P98DER.jpg)

C#で作るWebAssemblyランタイム
&gt; nuskey8/DotWasm
2026/05/29 @日本マイクロソフト品川オフィス
超dotnet new
#超dotnet new
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/DEY4546MJM.jpg)

- @nuskey8 (a.k.a @annulusgames)
- 大学生です
- Unity・C#・RustのOSS開発やってます
#超dotnet new
#
#
自己紹介
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/VJNYNYZ378.jpg)

- 本来今日話そうとしてた内容の一部です
- 標準のdotnet-formatより高速かつ
いい感じのフォーマッタ
- C#を書くときのQoLが数段上がります
使ってない方は是非
#超dotnet new
#
#
CSharpierはいいぞ
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/YE9PRPZPJ3.jpg)

# nuskey8/DotWasmの紹介
#超dotnet new
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/GE8DWD1XED.jpg)

- C#実装のWebAssemblyランタイム
- WebAssembly 3.0相当のProposalを
ほぼ(Thread以外)全て実装！
- Threadは実装を忘れてただけなので
そのうちサポートします
- インタプリタなのでパフォーマンスは
そこそこ
https://github.com/nuskey8/DotWasm
- Unity対応はまだです！
正式リリースまでにはなんとか…
#超dotnet new
#
#
DotWasm
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LELMNMQN7R.jpg)

- JavaScriptに代わる次世代のブラウザ言語
- 中身はスタックマシンなバイトコード
- 様々な言語がコンパイル先としてサポート
- C/C 、Rust、Go、MoonBit、etc.
- C#はBlazorやNativeAOT-LLVMあたりが頑張ってますが
今のところはまあ、はい
+
+
#超dotnet new
#
#
WebAssemblyとは？
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/4JMYXY1QJW.jpg)

- WebAssemblyはブラウザで色々な言語を動かすためのものだけではない！
- そもそもWebAssmeblyにWebの部分は特にない
(ただのちょっと高級なスタックマシンバイトコード)
- ポータブルな実行可能バイナリとして運用ができる
- ホスト環境に埋め込んでスクリプトやプラグインを実行する用途に使える
- 現在はLuaやJS、MRubyなどが強い分野
- Wasmにはセキュアである、特定の言語に依存しないなどの強みがある
- 実際にFlight SimulatorやZedなどはadd-on・拡張機能のSDKにWasmを採用
#超dotnet new
#
#
なぜC#でWebAssemblyランタイムを？
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/PJR9N9LK79.jpg)

- C#で同じ試みを行ったプロジェクトは既にある
- ruccho/WaaS
- WebAssembly 1.0 + Component Modelの実装
- Unityなどでスクリプトとして使う用途に特化
- kelnishi/WACS
- C#向けのWasmランタイム・ツールチェーン
- Component Model含めほぼ全てのProposalを実装
- CLIからWIT bindegen、Unity対応、WASI、
描画ライブラリなど盛りだくさんですごい
#超dotnet new
#
#
先行研究
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/PEXQNQW5JX.jpg)

- Wasmtime(Rust実装のwasmランタイム、
実質的なリファレンス実装)との比較
- WasmtimeはJITなので当然勝てないが
インタプリタでもWaaSより低速…
- 最適化を頑張ってないわけではないものの、
128x128サイズの画像のグレイスケール変換
色々事情がありまして…
- かなり大規模なパフォーマンス改善を
予定しているのでお楽しみに
#超dotnet new
#
#
パフォーマンス
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/3EK9N9VRED.jpg)

- WasmGCのサポート
- コア仕様ではi32/i64/f32/f64しか扱えず、それ以上は線形メモリの操作が必要
- コンパイラやホストの実装に依存するためポータビリティを損ねる
- WasmGCではヒープに確保する構造体や配列の型が定義出来る
- ホスト環境とデータのやりとりを容易に
- DotWasmはC#実装なので.NETランタイムのGCを使ってかなり楽に実装が可能
- Pure C#な実装 &amp; AOT対応
- FFIではないのでマルチプラットフォーム対応が楽ちん
- 動的コード生成をしないのでAOTセーフ、特にUnityのIL2CPPで重要
#超dotnet new
#
#
DotWasmの目指すところ
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/L73WVWMG75.jpg)

- WasmGC以前からある、リッチな型定義やモジュール同士のimportなどを定義するProposal
- WaaSはこれを用いてホスト環境とのやりとりを行う
- ただし、仕様があり得ないほど複雑怪奇で巨大
- バイナリの構造からコア仕様のモジュールと大きく異なる
- 複数言語をWasm Componentを介して繋げることを目標としている(!)
ので仕方ないと言えば仕方ないが…
- 後発のWasmGCと噛み合ってない仕様が多い、そもそもなんで型定義の仕様が2つあるねん
- 正直かなり厳しいが、WASIなどでComponent Model中心のエコシステムが既に
稼働しているため見直される可能性は低い…
#超dotnet new
#
#
vs Component Model
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/87DK8K6NJG.jpg)

# まとめ
#超dotnet new
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/VJPK8KYNE8.jpg)

- C#でWebAssemblyランタイム作りました！
- スクリプトやプラグインなどの用途にもWasmは便利！
- 使いどころが多いものではありませんが、是非遊んでみてください…！
#超dotnet new
#
#
まとめ
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/2EVVNVGYEQ.jpg)

# Thank you for listening!
#超dotnet new
14


