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
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-...
Search
TOMIKAWA Sotaro
October 25, 2025
Programming
56k
15
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
https://vuefes.jp/2025/
TOMIKAWA Sotaro
October 25, 2025
More Decks by TOMIKAWA Sotaro
See All by TOMIKAWA Sotaro
ReactとSvelteのその先、Ripple-TS / Beyond React and Svelte: Ripple-TS
ssssota
3
2.6k
Atomics APIを知る / Understanding Atomics API
ssssota
2
1.4k
Web技術を最大限活用してRAW画像を現像する / Developing RAW Images on the Web
ssssota
2
3.3k
漸進。
ssssota
0
3.7k
Preact、HooksとSignalsの両立 / Preact: Harmonizing Hooks and Signals
ssssota
1
3.8k
useSyncExternalStoreを使いまくる
ssssota
6
7k
React CompilerとFine Grained Reactivityと宣言的UIのこれから / The next chapter of declarative UI
ssssota
8
6.3k
新しいAPI createRawSnippet触ってみた / What is the createRawSnippet?
ssssota
2
340
脱法Svelte / Evasion of svelte rules
ssssota
1
350
Other Decks in Programming
See All in Programming
Cloudflare is Agents
chimame
0
190
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
610
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
120
MySQLとPostgreSQLって何が違うの?
akagami
0
160
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
570
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
510
T3DD26: From RAGs to Riches
martinhelmich
0
130
ALB ログから Trace を気合で繋げる技術
fohte
7
840
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.2k
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
0
130
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
140
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
180
Featured
See All Featured
Designing Powerful Visuals for Engaging Learning
tmiket
1
520
Navigating Team Friction
lara
192
16k
GitHub's CSS Performance
jonrohan
1033
470k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
ラッコキーワード サービス紹介資料
rakko
1
4.7M
The Art of Programming - Codeland 2020
erikaheidi
57
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
370
Crafting Experiences
bethany
1
270
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
260
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
We Have a Design System, Now What?
morganepeng
55
8.3k
Transcript
なんでRustの環境構築してないのに Rust製のツールが動くの? Why Do Rust-Based Tools Run Without a Rust
Environment? sssssota / #vuefes
深刻な「Rust製ツールチェイン侵⾷」問題 いま、フロントエンド開発を始めるとRust製のツールチェインが必ず登場する(?) Rolldown, Oxc, SWC, Biome, Deno, Rspack, Lightning CSS,
etc... その勢いはとどまるところを知らず、 ランタイム、エンジン、リンター、フォーマッター、バンドラー、などなど...
いや、待てよ...? JavaScriptのためにNode.jsは⼊れたけど、 「Rustの環境構築」してないぞ...?
なぜか動くRust製ツールたち なんでうごくの...?こわくなってきた...😰 Rust製ツールこわい npmでinstallしただけなのに (そうじゃないものもあるけど) なんなら、JavaScriptで機能を拡張したり協調して動くことだってある。ヒェッ ...主にパターンは3つ。CLIかNode-APIかWASM。
1. CLIベースのRust製ツール DenoやBiomeがこれに該当。 インストールすると、単純なCLI、バイナリが配置される。 Node.jsをインストールする行為に近い。 バイナリということは、OS/CPUによって対応してたりしてなかったり。 package.jsonの `optionalDependencies` という仕組みで OS/CPUに応じたバイナリがインストールされる。
2. Node-APIベースのRust製ツール Rolldown, Oxc, SWC, Rspackなどが該当。 OS/CPU依存のネイティブバイナリ、でもNode.jsと通信できる。 =Node-API Rustには、Node-APIを実装するためのフレームワークNAPI-RSがある。 NAPI-RSにより手軽にNode.jsとRustの世界をつなぐことができる。
3. WASMベースのRust製ツール WebAssemblyベースのRust製ツールはOS/CPUに依存しない。 →ブラウザ上でも動かせる。OS/CPU毎にビルドしなくて良い。 ただし、1,2のようなネイティブな手法よりは動作が遅い。 現在、RustからWASMを作る方法としては以下の2つが主流: 1. wasm-bindgen 2. NAPI-RS
(WASI) (上記のいずれも使わない方法もあるが省略)
WASM (WebAssembly: ワズム) WebAssemblyはいわば高階関数(関数を返す関数)みたいなもの できることは関数呼び出し、メモリ操作と計算だけ。Importsでできることが決まる
WASI (WebAssembly System Interface: ワズィ) WASIは入出力の仕様が決まっているWASM ファイルの読み書き、時間取得など入出力関数のシグネチャが定義されている。
3. WASMベースのRust製ツール(wasm-bindgen) wasm-bindgenは • 非WASIなWebAssembly • それを使うためのJavaScript + 型定義ファイル を出力する。
Rustで提供される標準ライブラリの大部分は使えない。 =ファイルシステムやネットワークへのアクセスには工夫が必要 一方、DOM操作APIをRustから使える仕組みがあるなどの利点もある。 SWCやNode.jsのTypeScript対応(Amaro)などで利用されている。
3. WASMベースのRust製ツール(NAPI-RS) NAPI-RSはWASIベースのWASMも出力できる。 wasm-bindgenと比べ制約も少なく、RustのコードベースをWASMにできる。 WASIなので、ファイルシステムなども扱えるし、WASMなのでブラウザで動く。 →ブラウザで動く開発環境(StackBlitz等)を支える主力な技術となっている
おわり Rust製ツールチェインは、 • ネイティブコンパイル (CLI / Node-API) • WASM (WASI)
により開発環境がなくてもJavaScriptと協調して動く。 今後のRust製ツールチェインの進化が怖い!