こんにちは。現役エンジニアの”はやぶさ”@Cpp_Learningです。Go言語(Golang)やフロントエンドを勉強中です。
Golang × WebAssemblyについて勉強したので、備忘録も兼ねて本記事を書きます。
Contents
WebAssembly(wasm:ワズム)とは
WebAssembly(wasm:ワズム)とは、ブラウザ上で動作するバイナリ形式のことです。
C/C++、Rust、Go言語(Golang)などのプログラムからコンパイルおよびビルドすることで、ブラウザで動作するバイナリコード(*.wasm)を生成することができます。
GolangからJavaScriptを生成
少し脱線しますが、ブラウザ上で動作するアプリをGolang(以下Go)で開発したいなら、GopherJSを使って、GoからJavaScriptを生成するという手もあります。興味ある人は、以下の記事を参考にして下さい。

今回はGoからバイナリコード(*.wasm)を生成して、ブラウザ上で動かしてみます。
Go × WebAssembly(wasm)入門
Goの開発環境構築から説明します。
DockerでGolangの開発環境構築
まずは以下のコマンドで作業ディレクトリ:go-wasmを作成します。
$ mkdir go-wasm
次にDocker HubからGo公式イメージをpullしてきます。
$ docker pull golang:1.20.1
コンテナ起動時に、-vオプションでホストとコンテナ間のシェアディレクトリ(=作業ディレクトリ)を設定して、作業するのが楽です。
$ docker run -v ${pwd}:/go/src/app –name go-wasm -it golang:1.20.1
以下のコマンドでgo.modを作成します。
$ cd src/app
$ go mod init example.com/myapp
以降からはソースコードを書いていきます。
main.go
コンソールに文字列を出力するだけのシンプルなコードが以下です。
以下のコマンドで動作確認しておきます。
$ go run main.go
問題なければGOOS=js,GOARCH=wasmでコンパイル&ビルドして、main.wasmを生成します。
$ GOOS=js GOARCH=wasm go build -o main.wasm main.go
wasm_exec.js
Go公式リポジトリからwasm_exec.jsをダウンロードして、作業ディレクトリに保存します。このjsファイルを使って、main.wasmをブラウザ上で実行します。
index.html
wasm_exec.htmlを参考に、index.htmlを作成します。
最終的な作業ディレクトリの中身は以下の通りです。
動作確認 -VSCode拡張機能のLive Serverでサーバー起動-
最後にローカルサーバーで動作確認をします。VSCode拡張機能のLive Serverを使えば、下記の3ステップでサーバーを起動できます。
- VSCodeでindex.htmlを開く
- 右クリック
- Open with Live Serverクリックでサーバー起動
適当なブラウザから http://127.0.0.1:5500/index.html にアクセスすれば、動作確認できます(以下ツイート)。
Golang × WebAssembly(wasm)入門しました。楽しい! pic.twitter.com/LsoKmtW4MU
— はやぶさ@技術ノート (@Cpp_Learning) February 19, 2023
サーバー止めるときは「右クリック⇒Stop Live Serverクリック」です。
まとめ
Goのコードからwasmを生成してブラウザ上で実行する簡単な例を紹介しました。
以下 Goのオススメ書籍を紹介