---
title: MoonBitでWebAssembly入門
tags: 
author: [nuskey](https://docswell.com/user/nuskey)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VJNY8XK678.jpg?width=480
description: サークル内で行われたLTの登壇資料です。
published: April 02, 26
canonical: https://docswell.com/s/nuskey/ZPR287-getting-started-with-wasm-on-moonbit
---
# Page. 1

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

MoonBitでWebAssembly入門
&gt; Getting started with WebAssembly on MoonBit
2026/01/25
SysAd 新春LT会
#SysAd新春LT
1


# Page. 2

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

- WebAssemblyのお話
- MoonBitのお話
- MoonBit実践編(ライブコーディング)
#SysAd新春LT
#
#
本日のお品書き
2


# Page. 3

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

# WebAssembly(WASM)とは？
#SysAd新春LT
3


# Page. 4

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

- JavaScriptに代わる、次世代のブラウザ言語
- 中身はスタックマシンのバイトコード
- jump命令がない代わりにifやloopがあるなど、割と高級な感じ
- バイトコードなので(理屈では)JavaScriptより高速
- JSの方がJITが成熟しているので、今のところは五分五分
- 複雑なバイナリ操作などをRustで書いてフロントエンドに持ち込むなど
- 主要な言語のほとんどがコンパイル先としてWASMをサポート
- 一応テキスト形式(WAT)もあるが、手書きする用途ではない
#SysAd新春LT
#
#
WebAssembly(WASM)とは？
4


# Page. 5

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

- V8
- 言わずと知れた爆速JSランタイム、WASMも動く
- wasmtime
- Bytecode Allianceによる軽量ランタイム実装
- 大抵のプロポーザルにも対応しており、リファレンス実装としての側面が強い
- Wasmer
- WASI対応のランタイム
- wasm用のレジストリもある
#SysAd新春LT
#
#
主要なWASMランタイム
5


# Page. 6

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

- 名前こそ”Web”Assemblyだが、単なる実行可能バイナリなのでWebに限定されない
- 特定の言語やOS、CPUに依存しないポータビリティの高さ
- JVMや.NETに近いが、それらより遥かにミニマル、対応言語の多さも桁違い
- デフォルトでセキュアな設計
- コンテナ技術を置き換えるものとしても期待されている
- ユニバーサルな言語基盤としてのWASI/Component Model
- WASMモジュール同士でimport/exportができる
- いずれはwasmを通して他言語のライブラリを利用することも可能に…？
#SysAd新春LT
#
#
WASMの何がアツいのか？
6


# Page. 7

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

- WASMのコア仕様は非常にシンプルで、整数と小数しか扱えない
- 救いの手、WasmGC
- WASM側でGCを実装するプロポーザル
- 配列などの複雑な型を扱える
- “あの”Safariも実装済みなので、モダンブラウザなら既に動作する
- GC言語をWASMにコンパイルする際に大幅にバイナリサイズを削れる
#SysAd新春LT
#
#
WasmGCプロポーザル
7


# Page. 8

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

- 最も使われているのはおそらくRust
- ツールチェーンも安定していて、言語としても書きやすい
- バイナリサイズはそこそこ、極限まで削るならno_stdで
- Goも選択肢には入る
- が、ランタイムがやや大きいのでバイナリサイズは膨らむ
- C/C もEmscriptenを使えばWASMにコンパイルできる
- けど結構めんどくさいので普通にRustで十分だとは思う
- 実質Rust一強だが、意外と決定打がない
- 新しい選択肢、MoonBit
+
+
#SysAd新春LT
#
#
WASMを使うために書く言語
8


# Page. 9

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

# MoonBitとは？
#SysAd新春LT
9


# Page. 10

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

- WASM特化の新しいプログラミング言語
- wasm/wasm-gc/native/llvm/jsのバックエンドを持つ
- 普通にjsバックエンドでAltJSとして使うのもアリ
- 言語自体はGC付きのRustっぽい雰囲気
- パイプライン演算子や関数オブジェクトなど、割と関数型に近い
- WASMのバイナリサイズがとにかく小さい
- ランタイム含め圧倒的に小さい、wasm-gcならさらに縮む
- LSPやツールチェーンの完成度が高く、開発体験も良い
#SysAd新春LT
#
#
MoonBitとは？
10


# Page. 11

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

- そろそろv1.0.0が出るらしい
- async周りはまだ少し不安定
- 言語機能自体はほぼ固定されたが、標準ライブラリのAPIが安定していない
- たまにツールチェーンのバグは踏む。仕方ない
- とはいえ頻繁にアップデートされてるので、割とすぐに治ったりする
#SysAd新春LT
#
#
現在の開発状況
11


# Page. 12

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

- フロントエンドをMoonBitで書く…？
- TypeScriptよりも遥かにまともな言語なので全然アリ
- JSと連携するならJSバックエンド、そうでなければWASMバックエンドで
- JSX-likeな構文の提案も進んでおり、ライブラリが整えばかなり現実的になる
- バックエンドをMoonBitで書く…？
- asyncがシングルスレッド前提なのがちょい厳しめ
- バックエンドなら選択肢が多いので、別にMoonBitである必要もない気がする
- とはいえTypeScriptバックエンドよりは良さそうかも
#SysAd新春LT
#
#
MoonBitの用途
12


# Page. 13

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

# [LIVE] MoonBitを書いてみよう
#SysAd新春LT
13


# Page. 14

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

# まとめ
#SysAd新春LT
14


# Page. 15

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

- 時代はWebAssembly/Component Model
- WASMを吐きたいならRust or MoonBitで
- フロントエンド用途としてのMoonBitは結構アリ
#SysAd新春LT
#
#
まとめ
15


# Page. 16

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

# Thank you for listening!
#SysAd新春LT
16


