Webナイト宮崎 · 2026-07-03
476バイトの Hello World から、 ブラウザで動く LLM まで
自作言語 Almide で見てきた WebAssembly の現在地
@O6lvl4 — Almide という「LLM のための言語」を作っています
まずこれを見てください
// hello.almd — ソースはこれで全部
fn main () -> Unit = {
println("Hello, world!" )
}
$ almide build hello.almd --target wasm
$ ls -l hello.wasm
-rw-r--r-- 1 o6lvl4 staff 476
$ wasmtime hello.wasm
Hello, world!
476 bytes
kB ですらない。rustc も LLVM も呼ばれていない。
WASM は、ここまで小さくなれる
プログラム .wasm のサイズ
Hello World 476 B
Fibonacci(再帰) 787 B
FizzBuzz 910 B
クロージャ 979 B
代数的データ型 + match 3,828 B
.wasm はブラウザ専用ではなく、どこでも動く小さな実行ファイル形式
476 B の中にメモリ管理も文字列処理も同梱 — 依存ゼロで自己完結
最適化ツール wasm-opt をかけても 0〜4 バイトしか縮まない — ほぼフォーマットの下限
この .wasm を吐いたのは自作言語 Almide(LLVM を使わず WASM を直接出力)。道具の紹介はのちほど 1 枚だけ。
WASM が動いている場所 — 8 クラスタ
① ブラウザ
Figma / Photoshop Web / Unity / FFmpeg.wasm — 圧倒的成熟
② Edge / サーバレス
Fastly Compute は WASM ネイティブで起動 35µs。Cloudflare Workers も WASM 対応
③ プラグイン基盤
Envoy / Shopify Functions / Zed — 覇権争い中
④ ブロックチェーン
NEAR / CosmWasm / Internet Computer — 決定論が核
⑤ 組込み
WAMR / ESP32 — OTA 更新 = .wasm 配布
⑥ データ / DB
SQLite-wasm / DuckDB-wasm(Postgres は拡張で実験段階)
⑦ AI 実行サンドボックス
MCP サーバ / エージェントのツール実行 — 2024–26 急成長
⑧ AI 推論
ONNX Runtime Web / whisper.cpp — 端末内 LLM
緑枠 はすでに本番技術。ブラウザは 8 分の 1 にすぎない。
今日の道具(この 1 枚だけ)
自作言語 Almide — 今日の .wasm は全部これ製
AI(LLM)が正確に書けることを目標に設計した自作言語。コンパイルすると Rust か WASM が出てくる
WASM へは直接出力 — さっきの 476 B の正体 。この小ささが、以降のデモ全部の土台
ネットやファイルなどの副作用が型に現れる設計 — WASM の「権限を絞って安全に動かす」文化と噛み合う
言語そのものの話(AI との相性、メモリ安全の形式検証など)は今日は割愛 — github.com/almide
§1
WASM だと、 こんなことができる
ここからは実物です。中身は全部、自作言語 Almide 製の .wasm — 数字はすべて実測値。
0.5 KB から 148 KB までに、これだけ入る
1 KB
10 KB
100 KB
1 MB
※対数目盛
Hello World 0.5 KB
音が鳴るシンセ 2.6 KB
2D の棒グラフ描画 5.8 KB
3D の球の描画 6.6 KB
参考: 同じ処理を Rust で 11.2 KB
音質補正イコライザ 11.5 KB
3D 回転キューブ(WebGL) 17.3 KB
1-bit LLM を動かすエンジン 36.9 KB
UI アニメーションエンジン 55.0 KB
音声認識エンジン(Whisper) 83.5 KB
UI フレームワーク一式 148.1 KB
参考: 初代ポケモンの ROM 512 KB
灰色は参考点。Rust + wasm-bindgen は同じ 3 関数で 11.2 KB(Almide 版は 1.5 KB — 差の大半はランタイム )。青と緑を全部足しても約 359 KB — 初代ポケモン 1 本(512 KB)の 3 分の 2 。Almide 分は全バイナリ実測。
live demo ① 音
2,637 バイトで、音が鳴る
AudioWorklet(音声専用スレッド)の中で 8 倍音加算シンセ が動く。ソースは 61 行の .almd
制約の世界: 128 サンプルごと・予算 2.6ms・malloc / IO / DOM 禁止
実測 128 フレーム 18µs — 予算 2,667µs の 0.7% 、リアルタイム余裕 約 140 倍 (SIMD もバッチングもなしで)
https://o6lvl4.github.io/almide-audio-poc/ # その場で鳴らせます
絵
グラフィックスも直 emit で桁が変わる
Canvas 2D
棒グラフデモ一式で 5,792 B 。JS 側は薄い glue だけ
WebGL
シェーダ込みの回転キューブで 17,267 B
obsid(3D ランタイム)
メッシュ + オービットカメラ + ライティング。同じ .wasm がブラウザでも、wasmtime + wgpu 経由でデスクトップでも動く
https://almide-graphics.github.io/obsid/ # Heightmap / 球 / トーラス切替・ドラッグで回せます
live demo ② GPU UI
UI フレームワークごと WASM に入れる — 145 KB
全 UI 要素を WebGPU compute shader で描画 (Canvas 2D 不使用)
Yoga 互換 Flexbox (準拠テスト 74 本)、仮想リスト、リアクティブ状態管理
DOM オーバーレイでテキスト選択・コピー・IME 入力・ARIA まで成立
# ライブデモ(WebGPU = Chrome 系で)
https://almide-graphics.github.io/ceangal/
https://almide-graphics.github.io/ceangal/stress.html # 5000 要素 + FPS HUD
live demo ③ コンパイラ
WASM が、その場で WASM を生む
Almide コンパイラ(Rust 製)を丸ごと WASM 化 — 約 6 MB の .wasm がブラウザで動く
parse → 型検査 → codegen まで全部クライアントサイド 。サーバ往復ゼロ
出力された .wasm をその場で instantiate して実行。Rust へのトランスパイル表示も
https://almide.github.io/playground/
live demo ④ 本命
ブラウザだけで、LLM と会話する
Qwen3(0.6B / 1.7B)がブラウザの中で動く — サーバなし・API なし・100% ローカル
エンジンは Almide の nn スタック — 推論は WebGPU 、トークナイザは 21.7 KB の WASM
純 WASM 版もある — 1-bit モデル(248 MB)を 37 KB のエンジンで駆動 。遅いが、純度の全振り版
https://almide-graphics.github.io/nn/web/ # WebGPU = Chrome 系で。初回はモデル 640 MB を DL
AI サンドボックス
LLM が書いたコードを、安心して実行する
$ porta run curl -- https://example.com # OK(ネイティブはデフォルト開放)
$ porta run curl --allow-net '*:443' -- https://example.com # OK
$ porta run curl --allow-net '*:80' -- https://example.com # exit 7 — 443 を遮断
WASM 分離(capability 9 種 deny-by-default ・宣言外の WASI import はロード時に拒否)+ macOS Seatbelt の二層
Docker 不要・単一バイナリ 。Claude Code をネットワーク・FS 制限つきで走らせられる
さっきの 8 クラスタ ⑦「AI 実行サンドボックス」の先行実装。ほぼ全部 Almide 製(wasmtime ブリッジのみ Rust、テスト 98 本)
CLI ツールのため Web デモなし — github.com/almide/porta(macOS・単一バイナリ)
§2 · 手元に届く形
wasm-bindgen 相当を、Almide 自身で書いた
mylib.almd
→ almide-wasm-bindgen →
.wasm
.d.ts
ESM glue
package.json
Almide
1.5 KB
Rust + wasm-bindgen
11.2 KB
同一処理の wasm バンドル(両者 wasm-opt -O3, Node 22)— 7.53 倍小、matmul 256² は 1.84 倍速
Node / Bun / Deno / Browser / wasmtime / wasmtime-py の 6 ランタイムで検証済み。型は Almide → TS へ自動写像(variant → union など 19 型)。
§3 · この先
「同じロジックを 2 回書く」が、消える
フロントで書いたバリデーション、サーバでもう 1 回書いてませんか。片方だけ直して、ズレて、事故る——あれの話です。
いま
ブラウザ用に TypeScript で 1 回 サーバ用に別言語でもう 1 回 仕様変更のたびに両方 直す
WASM なら
ロジックは .wasm 1 個 ブラウザ / Node / Bun / Deno / エッジ — 同じバイナリだから同じ挙動 6 ランタイムで検証済み
同一バイナリの持ち回りはここまでが現在の事実。この先、マイコンや作曲ソフトのプラグインまで同じコードで届かせるのがロードマップ(合計 100 KB 未満が目標)。
まとめ — WASM は次の Docker
WASM は「ブラウザの技術」から「言語非依存のユニバーサル実行単位」 になった — 8 クラスタに広がり、うち 5 つはすでに本番
音・絵・UI・LLM、porta や playground — 道具立てはすべて個人製 。LLM には純 WASM 版(エンジン 37 KB)まである
LLM 時代の安全実行基盤は WASM が本命 — tiny binary × effect × capability はそのための組み合わせ
WASM づくしで世界を組む — その世界は、もう動き始めている。
今日の URL
Playground(ブラウザ内コンパイル) almide.github.io/playground/
nn chat — Qwen3 をブラウザで(Chrome 系) almide-graphics.github.io/nn/web/
Bonsai — 1-bit LLM を純 WASM で almide.github.io/bonsai-almide/
ceangal — WebGPU UI(Chrome 系) almide-graphics.github.io/ceangal/
音のシンセ(2,637 B・AudioWorklet) o6lvl4.github.io/almide-audio-poc/
obsid — 3D デモ(Heightmap / 球 / トーラス) almide-graphics.github.io/obsid/
MSR 日次ダッシュボード almide.github.io/almide-dojo/
言語本体 github.com/almide/almide
このスライド o6lvl4.github.io/O6lvl4-webnight-miyazaki-20260703-slide/
ありがとうございました 🙌 — @O6lvl4