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
from-unknown
March 20, 2019
Technology
1
790
Goで作ったWebAssemblyで画像加工
Goで作成したGifアニメーションを作成するプログラムがWasmで動くかどうかを試した過程で学んだことをスライドにしました。
from-unknown
March 20, 2019
Tweet
Share
More Decks by from-unknown
See All by from-unknown
GoでWebAssembly
fromunknown
0
1.3k
Golang+Firestore
fromunknown
1
1.3k
Goで作る初めてのHTTPサーバー
fromunknown
1
1.7k
NGO APIを支える技術
fromunknown
0
150
Other Decks in Technology
See All in Technology
Новые мапы в Go. Вова Марунин, Clatch, МТС
lamodatech
0
2k
LINE 購物幕後推手
line_developers_tw
PRO
0
450
ペアーズにおける評価ドリブンな AI Agent 開発のご紹介
fukubaka0825
9
2.6k
本当に必要なのは「QAという技術」だった!試行錯誤から生まれた、品質とデリバリーの両取りアプローチ / Turns Out, "QA as a Discipline" Was the Key!
ar_tama
9
4.4k
Simplify! 10 ways to reduce complexity in software development
ufried
2
250
Azure & DevSecOps
kkamegawa
2
180
Part2 GitHub Copilotってなんだろう
tomokusaba
2
780
Google Cloud Next 2025 Recap アプリケーション開発を加速する機能アップデート / Application development-related features of Google Cloud
ryokotmng
0
180
Cursorをチョッパヤインタビューライターにチューニングする方法 / how to tuning cursor for interview write
shuzon
2
210
Tailwind CSS の小話「コンテナークエリーって便利」
yamaday
0
110
Terraform にコントリビュートしていたら Azure のコストをやらかした話 / How I Messed Up Azure Costs While Contributing to Terraform
nnstt1
1
490
AIによるコードレビューで開発体験を向上させよう!
moongift
PRO
0
430
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
Scaling GitHub
holman
459
140k
How to Ace a Technical Interview
jacobian
276
23k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.3k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
24
2.7k
Code Reviewing Like a Champion
maltzj
523
40k
Automating Front-end Workflow
addyosmani
1370
200k
Making the Leap to Tech Lead
cromwellryan
133
9.3k
Adopting Sorbet at Scale
ufuk
76
9.4k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
It's Worth the Effort
3n
184
28k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
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にすることで何でも性能がよくなる訳ではない
◦ 軽い処理より重い処理に向いている • まだまだ発展途上なので今後に期待
ご清聴ありがとうございました!