グローバルナビゲーションへ

本文へ

フッターへ

お役立ち情報Blog



GoのコードをWebAssenblyにコンパイルしてブラウザ上でGoを実行する

今回は、GoのコードをWebAssenblyにコンパイルしてブラウザで動かす方法を試してみたいと思います。

WebAssemblyとは

WebAssembly(wasm)はブラウザが解釈できる専用のバイナリ形式で、低レベルなアセンブリ風言語です。
Web標準として開発されており、現在では様々な言語がコンパイル後のバイナリ形式としてWebAssemblyを指定できるようになっています。

WebAssemblyにコンパイルされたプログラムはブラウザやNode.jsなどの環境で、Javascriptと一緒に実行することができます。
代表的な言語ではC、C++、Rustがあります。
Goもv1.11から標準機能として、コンパイル時にWebAssemblyが指定できるようになりました。

GoのコードをWebAssembly形式にコンパイルする

今回はgo 1.18の環境で作業を行います。

まずはじめに作業用ディレクトリを作成して go mod init しておきます。

次に作業ディレクトリ内にgoのコードを書きます。

main.go

次のコマンドでコンパイルを行います。

すると、2MB程度のmain.wasmが作成されます。
 GOOS  GOARCH はクロスコンパイル用の設定で最新情報は公式ドキュメントOptional environment variablesを参照してください。

ブラウザで実行する

出来上がったmain.wasmをブラウザで実行するにはGo公式が配布しているwasm_exec.jsを使います。

上記のファイルを作業ディレクトリ内に格納します。

HTMLファイルを作成する

wasm_exec.jsを読み込んで、コンパイルしたmain.wasmを指定するhtmlを作成します。

index.html

HTTPサーバを起動する

先ほど作成したindex.htmlをHTTPで配信するためにGoでサーバを作成します。

server.go

 http://localhost:8080/ にアクセスして「Run」をクリックするとConsole にGoのファイルでfmtした「Hello, Go Assembly!!!」が表示されてるのがわかります。

さいごに

意外と簡単にGoのプログラムをWebAssemblyにコンパイルしてブラウザ上から実行できました。

今回は単純にコンパイル済みのGoのプログラムを実行しただけですが、Go側からJavascriptを操作したり、Javascript側からGoの関数を呼び出せたりと相互に呼び出しができるようです。
次回はそのあたりもためしてみようと思います。

The following two tabs change content below.

竹内 和也

事業開発部 web application engineer
大学卒業後、Web系ベンチャー企業でシステムエンジニアを経て、2009年にアーティスへ入社。 システムエンジニアとして多くの大学・病院・企業・自社のwebシステム開発に携わる。 2020年より事業開発部として新規サービスの開発に従事している。 資格:LPIC3
この記事のカテゴリ

FOLLOW US

最新の情報をお届けします