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
130
0
Share
wstdなんだか良さそう
UV Study : Rust LT会 ~お好きなCrate紹介してください~
https://uniquevision.connpass.com/event/355069/
asuka
June 17, 2025
More Decks by asuka
See All by asuka
2025年ふりかえり
askua
1
210
ライブラリを公開してメンテナンスした一年
askua
0
84
Wasmの気になる最新情報
askua
1
350
Wasmのエコシステムを使った ツール作成方法
askua
0
370
Pure Goで体験するWasmの未来
askua
1
990
Wasmで社内ツールを作って配布しよう
askua
0
290
Wasm元年
askua
0
340
Dartでウェブ開発 (やりたい)
askua
0
88
Denoでパッケージを作りJSRに公開する
askua
0
87
Other Decks in Technology
See All in Technology
Swift Sequence の便利 API 再発見
treastrain
1
240
全社統制を維持しながら現場負担をどう減らすか〜プラットフォームチームとセキュリティチームで進めたSecurity Hub活用によるAWS統制の見直し〜/secjaws-security-hub-custom-insights
mhrtech
1
240
Agent の「自由」と「安全」〜未来に向けて今できること〜
katayan
0
350
「背中を見て育て」からの卒業 〜専門技術としてのテスト設計を軸に、品質保証のバトンを繋ぐ〜 #genda_tech_talk
nihonbuson
PRO
1
1k
[Oracle TechNight#99] 生成AI時代のAI/ML入門 ~ AIとオラクルデータベースの関係 (後半)
oracle4engineer
PRO
3
250
AI時代の品質はテストプロセスの作り直し #scrumniigata
kyonmm
PRO
4
1.4k
[Oracle TechNight#99] 生成AI時代のAI/ML入門 ~ AIとオラクルデータベースの関係 (前半)
oracle4engineer
PRO
2
240
変化の激しい時代をゴキゲンに生き抜くために 〜ストレスマネジメントのススメ〜
kakehashi
PRO
5
1.2k
ブラウザの投機的読み込みと投機ルールAPIを理解し、Webサービスのパフォーマンスを最適化する
shuta13
3
300
Modernizing Your HCL Connections Experience: Visual Report to chain, Profile Enhancements, and AI Integration
wannesrams
0
300
[Scram Fest Niigata2026]Quality as Code〜AIにQAの思考を再現させる試み〜
masamiyajiri
1
300
『生成AI時代のクレデンシャルとパーミッション設計 — Claude Code を起点に』の執筆企画
takuros
3
2.3k
Featured
See All Featured
Balancing Empowerment & Direction
lara
6
1.1k
sira's awesome portfolio website redesign presentation
elsirapls
0
230
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Why Our Code Smells
bkeepers
PRO
340
58k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
New Earth Scene 8
popppiees
3
2.2k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
780
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
350
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
420
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
170
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のインターフェースを 使いたい時に良さそう