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
Goで作ったWebAssemblyで画像加工
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
from-unknown
March 20, 2019
Technology
910
1
Share
Goで作ったWebAssemblyで画像加工
Goで作成したGifアニメーションを作成するプログラムがWasmで動くかどうかを試した過程で学んだことをスライドにしました。
from-unknown
March 20, 2019
More Decks by from-unknown
See All by from-unknown
GoでWebAssembly
fromunknown
0
1.4k
Golang+Firestore
fromunknown
1
1.5k
Goで作る初めてのHTTPサーバー
fromunknown
1
1.8k
NGO APIを支える技術
fromunknown
0
160
Other Decks in Technology
See All in Technology
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
210
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
180
速さだけじゃない! VoidZero ツールが移行先に選ばれる理由
mizdra
PRO
6
740
AI駆動開発が変える、大規模開発の前提 ーHuman in the Loop から Human on the Loop へ / AIE2026
visional_engineering_and_design
4
3.3k
ルールやカスタム機能、どう使う?理想の出力を引き出すために今知りたいIBM Bob 5つの機能
muehara
1
330
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
130
トークン数だけでは測れない — Claude Code 組織展開の効果検証から学んだこと
makikub
0
120
Spring AI × MCP 入門〜AIエージェントへのツール公開、境界設計から始める最小構成 〜
yuyamiyamoto
0
210
電子辞書Brainをネットに繋げてみた(自力編)
raspython3
0
430
個人最適 から 全体最適 へ AI情報共有会・AIギルド・AI-DLC で進める カンリーの組織展開
rfdnxbro
0
1.4k
JJUG CCC 2026 Spring AI時代の開発こそ標準化を武器に! ― 方式・プロセス・プラットフォームの標準化
s27watanabe
2
710
価格.comをAI駆動で全面刷新する ー 30年分の技術的負債を返し、次の30年の土台をつくる ー / AI Engineering Summit Tokyo 2026
tkyowa
46
50k
Featured
See All Featured
Prompt Engineering for Job Search
mfonobong
0
330
Designing Powerful Visuals for Engaging Learning
tmiket
1
390
How STYLIGHT went responsive
nonsquared
100
6.2k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
190
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
580
The Invisible Side of Design
smashingmag
302
52k
Abbi's Birthday
coloredviolet
2
7.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
The Spectacular Lies of Maps
axbom
PRO
1
790
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Transcript
GoでWebAssembly @from_unknown
アジェンダ • WebAssemblyとは ◦ 利点と制約 • GoでWebAssemblyをビルドする • ブラウザ上で実行するためには •
気になるポイント ◦ 性能は? ◦ Goroutineは? • まとめ
WebAssemblyとは • バイナリのインストラクションフォーマットである • 複数の言語で書くことができる ◦ C、C++、Rust、Go(次期バージョン正式対応)など • ネイティブに近い速度で実行できる •
Javascriptを置き換えるのではなく、補完するものである • 主要ブラウザがWebAssemblyの1.0に対応されている
WebAssemblyの利点 • 効率的で実行速度が早い • バイナリにコンパイルされるため、テキストのJavascriptよりサ イズが小さい • 既存のCやC++などの資産を活かせる
WebAssemblyの制約 • サンドボックスの中で実行され、Javascriptと同様の制約を受 ける(Same-originなど) • 使用できるリソースの量は制限される • マルチスレッドやガーベージコレクションは現時点ではサポー トされていない •
HTML内のDOMの操作を直接できない ◦ DOMの操作はJavascriptを介して操作する
GoでWebAssemblyをビルドする Go and wasm: generating and executing wasm with Go
https://blog.gopheracademy.com/advent-2017/go-wasm/ こちらも参考にしました サクッと Go → WebAssembly を試す https://qiita.com/cia_rana/items/bbb4112b480636ab9d87
GoでWebAssemblyをビルドする 以下の方法でWebAssembly対応が入ったbetaを取得する • githubのgolang/goからソースを取得してビルドする ◦ 既にmasterにWebAssembly対応が入っている • githubのgolang/goのリリースからgo1.11betaXをダウンロー ドしてくる •
公式のサブレポジトリにあるgo1.11betaXコマンドを使う
GoでWebAssemblyをビルドする WebAssembly対応が入ったGoコマンドのGOOSとGOARCHに 以下を指定してビルドするだけ GOOS=js GOARCH=wasm go build … 簡単ですね!
ブラウザ上で実行するためには • WebAssemblyをブラウザ上で実行するには、 WebAssembly.instantiate()に以下を渡す必要がある ◦ wasmファイル(ArrayBufferなどに読み込む必要あり) ◦ (Optional)importObject ▪ ここで渡したJavascriptのObjectがGo側から呼べる
※wasmファイルをArrayBufferなどにしなくても読み込める instantiateStreaming()が推奨されている様ですが、ブラウザサ ポートがマチマチの様です。
ブラウザ上で実行するためには wasm形式にコンパイルしたGoを実行するには • Javascriptでwasmファイルを取得する • go/src/misc/wasm内の以下のソースが必要 ◦ wasm_exec.js • WebAssembly.instantiate()にwasmファイルとwasm_exec.js
内のGo.importObjectを渡す ◦ wasm対応で追加されたsyscall/jsと連携している ◦ これのお陰でGo側からDOMの操作が出来る
気になるポイント • 性能は? • Goroutineは? デモ
まとめ • GoでWebAssemblyは簡単に出来る • ただし、まだBeta版なので仕様が変わることもあり • wasm_exec.jsと連携することでJavascriptを実行することが 出来る • wasmにすることで何でも性能がよくなる訳ではない
◦ 軽い処理より重い処理に向いている • まだまだ発展途上なので今後に期待
ご清聴ありがとうございました!