Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
940
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
170
Other Decks in Technology
See All in Technology
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
840
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
350
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
150
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
290
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
2
260
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
2
1.4k
IR Today: Theory, Practice, and Agents
dtunkelang
0
350
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
310
ファミコンでPHPを動かす / PHP on the Famicom side b
tomzoh
0
140
データ品質を壊しながらSnowflakeのAIに分析させてみた
kawanago
0
520
Snapshot Testing in Practice: Predictable and Reliable SwiftUI Views
fespinoza
0
120
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
2
890
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
2.2k
How to make the Groovebox
asonas
2
2.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Agile that works and the tools we love
rasmusluckow
331
22k
Crafting Experiences
bethany
1
370
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
Typedesign – Prime Four
hannesfritz
42
3.2k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
590
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
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にすることで何でも性能がよくなる訳ではない
◦ 軽い処理より重い処理に向いている • まだまだ発展途上なので今後に期待
ご清聴ありがとうございました!