Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Pract...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
petamoriken / 森建
May 07, 2026
Programming
1.3k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
fukuoka.ts #4
https://fukuoka-ts.connpass.com/event/387858/
petamoriken / 森建
May 07, 2026
More Decks by petamoriken / 森建
See All by petamoriken / 森建
Security issues being discussed on Web Platforms
petamoriken
0
1.5k
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
250
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
300
Module Harmony
petamoriken
3
1.2k
Denoでフロントエンド開発 2025年春版 / Frontend Development with Deno (Spring 2025)
petamoriken
1
1.7k
非ブラウザランタイムとWeb標準 / Non-Browser Runtimes and Web Standards
petamoriken
0
700
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
360
フロントエンドの標準仕様をどう追っているか / How I follow the frontend standards specs
petamoriken
4
2.9k
ECMAScript、Web標準の型はどう管理されているか / How ECMAScript and Web standards types are maintained
petamoriken
3
700
Other Decks in Programming
See All in Programming
AWSに止められる覚悟してますか?
morizo_1984
2
540
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.7k
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
830
AI-Powered Domain-Driven Design
ziobrando
0
200
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.2k
Verilogで学ぶCPU自作入門
uyuki234
8
4.2k
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
170
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
530
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
Mobile First: as difficult as doing things right
swwweet
225
10k
Automating Front-end Workflow
addyosmani
1369
210k
The browser strikes back
jonoalderson
0
1.8k
From π to Pie charts
rasagy
1
400
Paper Plane
katiecoart
PRO
5
54k
Unsuck your backbone
ammeep
672
58k
Writing Fast Ruby
sferik
630
63k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Believing is Seeing
oripsolob
1
250
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Transcript
WebAssembly を読み込む ベストプラクティス 2026 年春版 fukuoka.ts #4 pixiv Inc. 森内建太 @petamoriken 2026.5.7
2 自己紹介 • Web エンジニア • Deno / ECMAScript コントリビューター • フロントエンドカンファレンス福岡スピーカー • Web 標準 を追うのが好き
petamoriken WebDev in Fukuoka
3 https://scrapbox.io/petamoriken/
背景 4
5 • W3C ワーキンググループが策定しているバイトコード • C/C++, Rust, AssemblyScript などからコンパイル ◦ C/C++ は Emscripten を使ってコンパイルする •
ほとんどの JS エンジン上で実行できる ◦ Chrome, Firefox, Safari, Ladybird ◦ Deno, Node.js, Bun, Cloudflare Workers WebAssembly
6 • 洞窟物語 Pixel さんが作った独自音楽形式 “pxtone” を ブラウザでデコード、再生するライブラリ • 10年前に Pixel さんにメールで頼み込んで C++ ソース コードをもらい、Emscripten をつかってコンパイル PxtoneJS
7 • Emscripten の出力サイズがとにかくでかい ◦ Emscripten に依存せずに Wasm 化する方法を模索 👉 Wasm 化できる標準 C++ ライブラリがなさそう • いっそのこと C++ を Rust にポートしよう 👉
挫折 PxtoneJS v3 (2017-02)
8 • 2026-02 Ladybird が LibJS を C++ から Rust へポート ◦ AI Agent を使えば Rust 化できるのでは?
9 • GW に Claude Code を使って Rust にポートできた! ◦ コンパイル後約 60% の容量削減 • ついでにストリーム再生 API を追加 ◦ Web 標準仕様にストリーム再生用の API がなかった ◦
今は WebCodecs の AudioData がいい感じ PxtoneJS v4 (2026-05)
WebAssembly の読み込み 10
11 WebAssembly の読み込み ArrayBuffer WebAssembly.Module WebAssembly.Instance const url = import.meta.resolve("./foo.wasm"); const
response = await fetch(url); const buffer = await response.arrayBuffer(); const module = new WebAssembly.Module(buffer); const instance = new WebAssembly.Instance(module); const { foo } = instance.exports;
12 WebAssembly の読み込み ArrayBuffer WebAssembly.Module WebAssembly.Instance const url = import.meta.resolve("./foo.wasm"); const
response = await fetch(url); const buffer = await response.arrayBuffer(); const module = new WebAssembly.Module(buffer); const instance = new WebAssembly.Instance(module); const { foo } = instance.exports; モジュールの依存に入らない(要バンドラー設定)
13 WebAssembly の読み込み ArrayBuffer WebAssembly.Module WebAssembly.Instance const url = import.meta.resolve("./foo.wasm"); const
response = await fetch(url); const buffer = await response.arrayBuffer(); const module = new WebAssembly.Module(buffer); const instance = new WebAssembly.Instance(module); const { foo } = instance.exports; Top-level await で非同期モジュールが強制される
14 WebAssembly の読み込み ArrayBuffer WebAssembly.Module WebAssembly.Instance const base64 = "AGFzbQEAAAABkAEVYAJ/fwF/YAJ..."; const
{ buffer } = Uint8Array.fromBase64(base64); const module = new WebAssembly.Module(buffer); const instance = new WebAssembly.Instance(module); const { foo } = instance.exports;
15 WebAssembly の読み込み ArrayBuffer WebAssembly.Module WebAssembly.Instance const base64 = "AGFzbQEAAAABkAEVYAJ/fwF/YAJ..."; const
{ buffer } = Uint8Array.fromBase64(base64); const module = new WebAssembly.Module(buffer); const instance = new WebAssembly.Instance(module); const { foo } = instance.exports; Base64 文字列で無理矢理インライン化して解決
16 WebAssembly の読み込み Stage 2.7 Import Bytes (Deno, Node.js, Bun サポート) ArrayBuffer
WebAssembly.Module WebAssembly.Instance import buffer from "./foo.wasm" with { type: "bytes", }; const module = new WebAssembly.Module(buffer); const instance = new WebAssembly.Instance(module); const { foo } = instance.exports;
17 WebAssembly の読み込み Stage 3 Source Phase Imports (Deno, Node.js, Cloudflare
Workers サポート) ArrayBuffer WebAssembly.Module WebAssembly.Instance import source module from "./foo.wasm"; const instance = new WebAssembly.Instance(module); const { foo } = instance.exports;
18 WebAssembly の読み込み Phase 3 ES Module Integration for WebAssembly (Deno,
Node.js サポート) ArrayBuffer WebAssembly.Module WebAssembly.Instance import { foo } from "./foo.wasm";
19 • AI Agent で C/C++ を Rust にポートするのが容易に ◦ ライセンスに注意 • ストリーム再生は WebCodecs の AudioData が便利 • WebAssembly を使ったライブラリを配布する場合、
現状 Base64 文字列でインライン化するのがよさそう ◦ 将来的に解決される予定 まとめ