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
Wasm わからないけど Go で実装したいから入門する
Search
Kotaro Otaka
December 10, 2024
Programming
1
10k
Wasm わからないけど Go で実装したいから入門する
The Go gopher was designed by Renée French.
https://gotalk.connpass.com/event/336208/
Kotaro Otaka
December 10, 2024
Tweet
Share
More Decks by Kotaro Otaka
See All by Kotaro Otaka
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
580
Go で作った CLI ツールにバージョンを埋め込みたい
otakakot
0
200
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
520
組込みだけじゃない! TinyGo で始める無料クラウド開発入門
otakakot
1
110
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
1
3.7k
SQLBoiler がメンテナンスモードになりまして
otakakot
0
310
cmp.Or に感動した
otakakot
3
1k
net/http/httptest が推しです♡
otakakot
3
380
無料で楽しむ Go サーバー開発のススメ
otakakot
11
4.2k
Other Decks in Programming
See All in Programming
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
200
へんな働き方
yusukebe
5
2.8k
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
240
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.3k
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.2k
AI 開発合宿を通して得た学び
niftycorp
PRO
0
160
Takumiから考えるSecurity_Maturity_Model.pdf
gessy0129
1
150
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
150
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
260
クライアントワークでSREをするということ。あるいは事業会社におけるSREと同じこと・違うこと
nnaka2992
1
350
米国のサイバーセキュリティタイムラインと見る Goの暗号パッケージの進化
tomtwinkle
2
630
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
220
Featured
See All Featured
The browser strikes back
jonoalderson
0
820
Paper Plane
katiecoart
PRO
0
48k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
130
A better future with KSS
kneath
240
18k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
480
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
160
The Mindset for Success: Future Career Progression
greggifford
PRO
0
280
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Designing for Performance
lara
611
70k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
87
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
160
Transcript
Wasm わからないけど Go で実装したいから入門する おーたかこーたろー / @otakakot 2024.12.10 Go Connect
#4 The Go gopher was designed by Renée French. #goconnect
Wasm ( Web Assembly ) ってご存知ですか? こういうアイコン #goconnect
私はあんまりわかっていないです。 #goconnect
Wasm を知るといいことありそう! たぶん・・・! #goconnect #goconnect
INDEX 01 Wasm ( WebAssembly ) とは 02 Go ×
Wasm 03 なぜ Wasm に入門するのか 04 Go × WASI
01 Wasm ( WebAssembly ) とは 02 Go × Wasm
03 なぜ Wasm に入門するのか 04 Go × WASI INDEX #goconnect
WASM ( WebAssembly ) WebAssembly は現代のウェブブラウザーで実行できる新しい種類の コードです。ネイティブに近いパフォーマンスで動作する、コンパクト なバイナリー形式の低レベルなアセンブリー風言語です。さらに、 C/ C++、C#
や Rust などの言語のコンパイル先となり、それらの言語を ウェブ上で実行することができます。 https:/ /developer.mozilla.org/ja/docs/WebAssembly/Concepts より抜粋 #goconnect #goconnect
WASM ( WebAssembly ) JavaScript を補完、並行して動作するように設計されています。 WebAssembly JavaScript API を使用して、
WebAssembly モジュールを JavaScript アプリケーションに読み込み、2 つの間で機能を共有できま す。これにより、WebAssembly コードの記述方法を知らなくても、 WebAssembly のパフォーマンスとパワー、 JavaScript の表現力と柔軟 性を同じアプリケーションで活用できます。 https:/ /developer.mozilla.org/ja/docs/WebAssembly/Concepts より抜粋 #goconnect #goconnect
なるほど、わからん #goconnect #goconnect
JavaScript 以外で書いたコードを JavaScript から扱えるようにしようぜ! #goconnect #goconnect
INDEX 01 Wasm ( WebAssembly ) とは 02 Go ×
Wasm 03 なぜ Wasm に入門するのか 04 Go × WASI #goconnect
JavaScript 以外で書いたコードを JavaScript から扱えるようにしようぜ! Go #goconnect #goconnect
Go Wiki: WebAssembly Go を実装する Wasm としてビルドする JavaScript サポートファイルをコピーする JavaScript
を実装する https:/ /go.dev/wiki/WebAssembly より #goconnect #goconnect ※ Go のバージョンは 1.23
1. Go を実装する #goconnect #goconnect
2. Wasm としてビルドする #goconnect #goconnect
3. JavaScript サポートファイルをコピーする #goconnect #goconnect
4. JavaScript を実装する #goconnect #goconnect
JavaScriptの実装は何をしている? #goconnect #goconnect
JavaScript での実装 ← wasm_exec.js のクラスをインスタンス化 ← Wasm モジュールをコンパイル & インスタンス化
← Wasm モジュールを取得 & 指定 ← Wasm モジュールと JavaScript の橋渡し ← Wasm を実行 #goconnect #goconnect
JavaScript と Go の実装 #goconnect #goconnect
Go JavaScript #goconnect #goconnect
#goconnect #goconnect
Go JavaScript #goconnect #goconnect
Go JavaScript #goconnect #goconnect
Go JavaScript #goconnect #goconnect
Go JavaScript #goconnect #goconnect
WIT ってものがあるらしい。 #goconnect #goconnect
INDEX 01 Wasm ( WebAssembly ) とは 02 Go ×
Wasm 03 なぜ Wasm に入門するのか 04 Go × WASI #goconnect
Wasm ランタイム Supabase Edge Functions Deno Deploy Cloudflare Workers https://supabase.com/docs/guides/functions
https://deno.com/deploy https://developers.cloudflare.com/workers #goconnect #goconnect
Wasm ランタイム Supabase Edge Functions Deno Deploy Cloudflare Workers https://supabase.com/docs/guides/functions
https://deno.com/deploy https://developers.cloudflare.com/workers #goconnect #goconnect 無料でデプロイできる(Edge)サーバー
Wasm ランタイム Supabase Edge Functions Deno Deploy Cloudflare Workers https://supabase.com/docs/guides/functions
https://deno.com/deploy https://developers.cloudflare.com/workers #goconnect v v #goconnect 無料!
Wasm ランタイム Supabase Edge Functions Deno Deploy Cloudflare Workers https://supabase.com/docs/guides/functions
https://deno.com/deploy https://developers.cloudflare.com/workers #goconnect #goconnect 最高!
Wasm を知れば無料で開発できる Go サーバーの選択肢が増える! #goconnect #goconnect
ただしサーバーを実装するには JavaScript ↔︎ Go の変換が必要 #goconnect #goconnect
JavaScript ↔︎ Go Request: Response: #goconnect #goconnect JavaScript Go Go
JavaScript → →
JavaScript ↔︎ Go Request: Response: #goconnect #goconnect https://developer.mozilla.org/ja/docs/Web/API/ Request https://pkg.go.dev/net/http#Response
https://pkg.go.dev/net/http#Request https://developer.mozilla.org/ja/docs/Web/API/ Response → →
JavaScript ↔︎ Go #goconnect #goconnect Request: Response: https://developer.mozilla.org/ja/docs/Web/API/ Request https://pkg.go.dev/net/http#Response
https://pkg.go.dev/net/http#Request https://developer.mozilla.org/ja/docs/Web/API/ Response → → 結構めんどくさい & JavaScript の知識が必要
このツラミを感じず実装できる最高のライブラリ syumai/workers #goconnect #goconnect
#goconnect #goconnect
#goconnect #goconnect Cloudflare Workers で Go を動かせる 標準のhttp.Handler 形式で実装可能 JavaScriptの知識がな
くても実装可能
Request: JavaScript → Go https://github.com/syumai/workers/blob/main/internal/jshttp/request.go より抜粋 #goconnect #goconnect
Response: Go → JavaScript https://github.com/syumai/workers/blob/main/internal/jshttp/response.go より抜粋 #goconnect #goconnect
INDEX 01 Wasm ( WebAssembly ) とは 02 Go ×
Wasm 03 なぜ Wasm に入門するのか 04 Go × WASI #goconnect
Wasm のさらに向こうへ WASI Plus Ultra!! WASI ( WebAssembly System Interface
) の登場 Web 以外でも WebAssembly を使おうという動き ↓ これにともない WASI ランタイムが登場 wasmtime Lucet WasmEdge etc... Wasmer ↓ #goconnect #goconnect
Go × WASI #goconnect #goconnect
Hello World! はできるけど サーバーは WASI ランタイムによって 動かせなかったり... #goconnect #goconnect
無料デプロイのためにWASI への挑戦は続く... #goconnect #goconnect
Kotaro Otaka おーたかこーたろー / @otakakot Web Engineer 新卒入社 Hello Golang!
Web Engineer @株式会社ビットキー 2020.04 2021.04 2022.11 Go言語推し #goconnect
https://zenn.dev/otakakot/articles/9e9269a87aafeb https://speakerdeck.com/otakakot/free- go-server-development-recommendations #goconnect #goconnect
#goconnect #goconnect Go 静聴 ありがとうございました!