Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goで作ったWebAssemblyで画像加工
Search
from-unknown
March 20, 2019
Technology
1
860
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.4k
Golang+Firestore
fromunknown
1
1.4k
Goで作る初めてのHTTPサーバー
fromunknown
1
1.7k
NGO APIを支える技術
fromunknown
0
150
Other Decks in Technology
See All in Technology
事業の財務責任に向き合うリクルートデータプラットフォームのFinOps
recruitengineers
PRO
2
160
マイクロサービスへの5年間 ぶっちゃけ何をしてどうなったか
joker1007
17
7.4k
ハッカソンから社内プロダクトへ AIエージェント「ko☆shi」開発で学んだ4つの重要要素
sonoda_mj
6
1.3k
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.1k
Snowflake導入から1年、LayerXのデータ活用の現在 / One Year into Snowflake: How LayerX Uses Data Today
civitaspo
0
1.7k
【ServiceNow SNUG Meetup LT deck】WorkFlow Editorの廃止と Flow Designerへの移行戦略
niwato
0
120
たまに起きる外部サービスの障害に備えたり備えなかったりする話
egmc
0
360
特別捜査官等研修会
nomizone
0
520
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
550
モダンデータスタックの理想と現実の間で~1.3億人Vポイントデータ基盤の現在地とこれから~
taromatsui_cccmkhd
1
220
通勤手当申請チェックエージェント開発のリアル
whisaiyo
3
330
2025年 開発生産「可能」性向上報告 サイロ解消からチームが能動性を獲得するまで/ 20251216 Naoki Takahashi
shift_evolve
PRO
2
210
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
46
7.8k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
0
130
Into the Great Unknown - MozCon
thekraken
40
2.2k
For a Future-Friendly Web
brad_frost
180
10k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
510
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
13
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Unsuck your backbone
ammeep
671
58k
Bash Introduction
62gerente
615
210k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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にすることで何でも性能がよくなる訳ではない
◦ 軽い処理より重い処理に向いている • まだまだ発展途上なので今後に期待
ご清聴ありがとうございました!