Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
wstdなんだか良さそう
Search
asuka
June 17, 2025
Technology
0
80
wstdなんだか良さそう
UV Study : Rust LT会 ~お好きなCrate紹介してください~
https://uniquevision.connpass.com/event/355069/
asuka
June 17, 2025
Tweet
Share
More Decks by asuka
See All by asuka
Pure Goで体験するWasmの未来
askua
1
150
Wasmで社内ツールを作って配布しよう
askua
0
220
Wasm元年
askua
0
220
Dartでウェブ開発 (やりたい)
askua
0
61
Denoでパッケージを作りJSRに公開する
askua
0
48
WASI 0.2のinit処理
askua
1
120
TSのコードをRustで書き直した話
askua
4
1.1k
久しぶりに自作ライブラリをリファクタした話
askua
0
120
今年の振り返り
askua
0
100
Other Decks in Technology
See All in Technology
PythonとLLMで挑む、 4コマ漫画の構造化データ化
esuji5
0
120
履歴 on Rails: Bitemporal Data Modelで実現する履歴管理/history-on-rails-with-bitemporal-data-model
hypermkt
0
1.6k
Goに育てられ開発者向けセキュリティ事業を立ち上げた僕が今向き合う、AI × セキュリティの最前線 / Go Conference 2025
flatt_security
0
240
北海道の人に知ってもらいたいGISスポット / gis-spot-in-hokkaido-2025
sakaik
0
190
DEFCON CHV CTF 2025 Write-up
bata_24
0
190
生成AIで「お客様の声」を ストーリーに変える 新潮流「Generative ETL」
ishikawa_satoru
1
210
analysis パッケージの仕組みの上でMulti linter with configを実現する / Go Conference 2025
k1low
1
240
AI Agentと MCP Serverで実現する iOSアプリの 自動テスト作成の効率化
spiderplus_cb
0
220
“2件同時配達”の開発舞台裏 〜出前館PMが挑んだダブルピック実現に向けた体験設計〜
demaecan
0
140
ZennとCloud Runの歩み - プロダクト開発に全集中できる相棒になるまで
wadayusuke
5
620
5年間のFintech × Rails実践に学ぶ - 基本に忠実な運用で築く高信頼性システム / 5 Years Fintech Rails Retrospective
ohbarye
9
3.2k
業務自動化プラットフォーム Google Agentspace に入門してみる #devio2025
maroon1st
0
170
Featured
See All Featured
Optimizing for Happiness
mojombo
379
70k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Six Lessons from altMBA
skipperchong
28
4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Documentation Writing (for coders)
carmenintech
75
5k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Docker and Python
trallard
46
3.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
Transcript
wstdなんか良さそう UV Study : Rust LT会 June 17, 2025
WHOAMI asuka • 株式会社モニクル/SWE ◦ Monicle Techbook vol.1 技術書典17 •
Wasm関連の同人誌・商業誌の執筆 ◦ 実践入門WebAssembly ◦ WebAssembly System Interface入門 ◦ ご注文はWASIですか?? 技術書典16 ◦ Wasm Cookbook vol.2 技術書典17 ◦ Wasm Cookbook vol.3 技術書典18 ◦ Wasm Cookbook vol.4 技術書典NT • 新宿御苑.dev ◦ 新宿御苑.wasm #2025.6.25 LT会 2 商業誌 Cookbookシリーズ ごちWASI
前提知識 3
前提知識 4 • WASI 0.2というWasmのシステムインターフェースの仕様が存在する • WASI 0.2はWIT(Wasm Interface Type)でインターフェースが定義されている
• RustはWASI 0.2をサポートしている Wasmの詳しい話は こういう本を読むと良い
前提知識 5 • WASI 0.2というWasmのシステムインターフェースの仕様が存在する • WASI 0.2はWIT(Wasm Interface Type)でインターフェースが定義されている
• RustはWASI 0.2をサポートしている Wasmの詳しい話は こういう本を読むと良い
RustはWASI 0.2をサポートしている cargo build -r –-target wasm32-wasip2 6 $ wasmtime
run <TARGET_PATH>/hello-world.wasm Hello, WASI 0.2! ターゲットにWASIp2 (WASI 0.2)を指定すると 「wasi:cli/command」ワールドが実装される
wasi:cli/commandワールド CLI実行に必要なFSなどの一般的なインターフェース実装 7 $ wasm-tools component wit <TARGET_PATH>/hello-world.wasm | head
package root:component; world root { import wasi:cli/
[email protected]
; import wasi:cli/
[email protected]
; import wasi:io/
[email protected]
; import wasi:io/
[email protected]
; import wasi:cli/
[email protected]
; import wasi:cli/
[email protected]
; import wasi:cli/
[email protected]
; import wasi:clocks/
[email protected]
; import wasi:filesystem/
[email protected]
; import wasi:filesystem/
[email protected]
; export wasi:cli/
[email protected]
; } https://wa.dev/wasi:cli
wasi:cli/commandワールド CLI実行に必要なFSなどの一般的なインターフェース実装 → ネットワーク関連のインターフェース定義は含まれていない 8 wasi:httpやwasi:socketといったパッケージ定義はあるが, ビルドターゲットとなる wasi:cli/commandには含まれていない WASIのインターフェース 使いたいなー
wasi:cli/commandに含まれていない WASIインターフェースを使うには 9
WASIインターフェースを使うには 10 1. WITを使ってインターフェースを定義 & 実装する a. wit-bindgen 2. WASIのインターフェースをラップしたクレートを使う
a. wasmcloud → 今回説明しない b. wstd
WITを使ってインターフェースを定義 & 実装する wit-bindgenを使う 11 インターフェースの定義 インターフェースの実装
WITを使ってインターフェースを定義 & 実装する wit-bindgenを使う 12 wasi:http/proxyを実装してみると... WITのインターフェース定義を そのまま使うのは少々面倒
WASIのインターフェースを もう少し簡単に扱いたい 13
WASIのインターフェースをラップした クレートを使おう 14
wstd 15
wstd 16 https://github.com/yoshuawuyts/wstd An async standard library for Wasm Components
and WASI 0.2 $ wasmtime run -S http <TARGET_PATH>/example.wasm <!doctype html> <html> <head> <title>Example Domain</title> ... 実行できる
wstd 1. 非同期をサポートしている 2. WASIの薄いラッパーである 17 #[wstd::main] WASI 0.2には非同期インターフェースがない (WASI
0.3で導入予定) pollingインターフェースをラップして Futureとして扱えるように
wstd 1. 非同期をサポートしている 2. WASIの薄いラッパーである 18 WASIとの対応がわかりやすい
wstd 1. 非同期をサポートしている 2. WASIの薄いラッパーである 19 Request::get(“https::example.com”).body(io::empty())?; WITの定義をそのまま使うともっと冗長になる
wstd 20 WASIのインターフェースを 使いたい時に良さそう