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
WebAssembly Hands-on! ~ powered by Dev Containe...
Search
Naoya
November 17, 2022
Programming
0
57
WebAssembly Hands-on! ~ powered by Dev Containers ~
Naoya
November 17, 2022
Tweet
Share
More Decks by Naoya
See All by Naoya
スクラムを成功へ導くマインド
nakir323
1
76
やさしいチームトポロジー
nakir323
39
6.1k
マスタリング Credit Card
nakir323
0
130
正しいスクラムを正しく行う
nakir323
0
180
Other Decks in Programming
See All in Programming
CJK and Unicode From a PHP Committer
youkidearitai
PRO
0
110
AIと私たちの学習の変化を考える - Claude Codeの学習モードを例に
azukiazusa1
8
3.5k
TDD 実践ミニトーク
contour_gara
1
290
今だからこそ入門する Server-Sent Events (SSE)
nearme_tech
PRO
0
110
Azure SRE Agentで運用は楽になるのか?
kkamegawa
0
2k
testingを眺める
matumoto
1
140
MCPで実現するAIエージェント駆動のNext.jsアプリデバッグ手法
nyatinte
7
1.1k
ProxyによるWindow間RPC機構の構築
syumai
3
1.1k
OSS開発者という働き方
andpad
5
1.7k
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
220
プロパティベーステストによるUIテスト: LLMによるプロパティ定義生成でエッジケースを捉える
tetta_pdnt
0
300
アルテニア コンサル/ITエンジニア向け 採用ピッチ資料
altenir
0
100
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
54
11k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.8k
Bash Introduction
62gerente
615
210k
The Cult of Friendly URLs
andyhume
79
6.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Building an army of robots
kneath
306
46k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Into the Great Unknown - MozCon
thekraken
40
2k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
It's Worth the Effort
3n
187
28k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
31
2.2k
Transcript
WebAssembly Hands-on! ~ powered by Dev Containers ~
▹ WebAssemblyを知る ▹ Dev Containersを知る ▹ ついでにRustの雰囲気をつかむ Purpose 2
▹ 基礎知識(座学) ▹ ハンズオン! ▹ まとめ Agenda 3
1. 基礎知識 各用語をざっくりと解説
WebAssembly? ウェブ...のアセンブリ...? 5
6 ▹ ブラウザで動作するハイパフォーマ ンスなコード ▹ バイナリ(.wasm)の手前に人が読め る中間表現であるテキスト形式 (.wat)がある ▹ C/C++やRustのコンパイル対象と
なっている ▹ jsから.wasmを呼び出して実行する WebAssembly 6 .watの例 https://developer.mozilla.org/ja/docs/WebAssembly/Understa nding_the_text_format .wasmをjsから呼び出す例 https://developer.mozilla.org/ja/docs/WebAssembly/Understa nding_the_text_format
Dev Containers? 開発用のコンテナ...? 7
Dev Containersの概念図 https://code.visualstudio.com/docs/devcontainers/containers 8 ▹ VSCodeのextension ▹ Dockerコンテナを開発環境として利 用できる ▹
extensionやコード補完もコンテナ 内で動作 ▹ VSCodeのterminalもコンテナ内で 実行される ▹ extensionを含めた開発環境の共有 が容易に Dev Containers 8
2. Hands-on! Rustからwasmを生成しjsで 読み込みhello worldするの巻
10 1. VSCode Dev ContainersでRustの開発環境を作る 2. Rustのコードを記述 3. .wasmにコンパイル 4.
JSから呼び出して、hello world! Hands-on Outline 10
11 VSCodeにDev Containers extensionをインストール ms-vscode-remote.remote-containers Step 1 11
12 wasm-rust(任意)というフォルダを作ってVSCode開き、 Dockerfileを作り、FROM rust:1.65.0と記述 Step 2 12
左下の緑色の><を押下、 → Open Folder in Container... → wasm-rust → Existing
Dockerfile 13 Step 3 13
VSCodeのterminalで下記を実行 $ cargo install wasm-pack 14 Step 4 14 ※CargoはRustのビルドシステム兼パッケージマネージャ
https://doc.rust-jp.rs/book-ja/ch01-03-hello-cargo.html
下記の通りフォルダ/ファイルを作成 15 Step 5 15 wasm-rust/ ├ index.html ├ Cargo.toml
└ src/ └ lib.rs
[package] name = "wasm-rust" version = "0.1.0" edition = "2021"
[lib] crate-type = ["cdylib"] [dependencies] wasm-bindgen = "0.2" 下記の通りCargo.tomlを記述 16 Step 6 16
use wasm_bindgen::prelude::*; #[wasm_bindgen] extern { pub fn alert(s: &str); }
#[wasm_bindgen] pub fn greet(name: &str) { alert(&format!("hello {}", name)); } 下記の通りlib.rsを記述 17 Step 7 17
VSCodeのterminalで下記を実行 $ wasm-pack build --target web 18 Step 8 18
<!DOCTYPE html> <html lang="en-US"> <head><meta charset="utf-8"></head> <body> <script type="module"> import
init, { greet } from "./pkg/wasm_rust.js"; init() .then(() => { greet("world") }); </script> </body> </html> 下記の通りindex.htmlを記述 19 Step 9 19
20 Live Server extensionをインストール。 ritwickdey.liveserver Step 10 20
index.htmlを右クリック → Open with Live Serverを選択 21 Step 11 21
🎉🎉🎉 22 Step 12 22
3. Summary さらっと要点まとめ
▹ Rustをコンパイルすると.wasmを生成できる ■ wasm-packなら、ついでにそれを呼び出 す.jsも作れる ▹ Dev Containersで楽に開発環境を作れる ■ 新たに言語を試すのがとても楽
▹ jsからWebAssembly.instantiate()等を使う ことで.wasmからexportした関数を呼び出せる Summary 24
興味が出た人向けの小ネタ 4. Appendix
▹ 実はブラウザだけじゃなくNode.jsでもWebAssemblyオブジェクトが使える ■ https://developer.mozilla.org/en-US/docs/WebAssembly#browser_com patibility ▹ Google EarthはWebAssemblyで作られている ■ https://medium.com/google-earth/google-earth-comes-to-more-brows
ers-thanks-to-webassembly-1877d95810d6 ▹ .watを手書きしている記事 ■ https://www.kabuku.co.jp/developers/webassembly ▹ 最速でWebAssemblyだけ試すならこちら(ChromeのConsoleいじるだけ) ■ https://nulab.com/ja/blog/nulab/basic-webassembly-begginer/ 26 Appendix 26
▹ 生成された /pkg/wasm_rust.jsの中で、wasm_rust_bg.wasmを呼び出したり、 WebAssembly.instantiate()しているので見てみると良いかも。 ▹ 現状、.wasmはjs経由でないとブラウザでは実行できない。 ▹ Yew等のRustのみでUIまで構築できるframeworkもあるみたい ■ https://zenn.dev/azukiazusa/articles/rust-base-web-front-fremework
-yew 27 Appendix 27