GoでWebAssembly――Go標準のWebAssemblyサポートを体験する:いろんな言語で試す、WebAssembly入門(6)
第6回は、Go言語における開発事例を紹介します。GoからのJavaScript関数呼び出し、JavaScriptからのGo関数の呼び出しについても紹介します。
本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。
GoとWebAssembly
今回は、プログラミング言語GoによるWebAssemblyプログラムの開発を紹介します。Goは、Googleの開発したプログラミング言語であり、WebAssemblyへの対応も積極的に行われています。C/C++やRustでは、EmscriptenやRust and WebAssemblyのような外部プロジェクトとの連携でWebAssembly対応を果たしていました。Goでは、直接WebAssemblyバイナリをターゲットにできるなど、言語レベルでWebAssemblyに対応しているのが特徴です。そのため、Goの言語環境を整える以外の特別な環境整備が不要で、すぐに標準ライブラリを含めたGoの言語仕様を十分に生かしたWebAssemblyプログラムを作成することができます。
Goは、C/C++やRustと同様にネイティブコードをターゲットにしたプログラミング言語であるので、その高い効率と高速性を生かした使い方が、同様に真価を発揮しやすいといえます。連載第1回でも紹介したように、まずは速度が重視される部分をGoが受け持つというのが自然な使われ方でしょう。
本稿では、それを前提にJavaScriptコードとの連携まで含めた、GoによるWebAssemblyプログラムの開発を紹介していきます。
環境準備
Goによる開発のために、以下に挙げるソフトウェアを準備しておきます。コードエディタの他にはGoの言語環境を用意するだけなので、非常にシンプルです。以降、操作例はmacOSによるものを示しますが、適宜Windows環境についても補足します。
- コードエディタとしてのVisual Studio Code(以降、VSCode)
- Go(1.11以降)
Goがインストールされていない場合、macOS環境、Windows環境ともに以下からインストーラをダウンロードしてインストールすることができます。macOSではHomebrewも利用できます。
All releases - The Go Programming Language
WebAssemblyをターゲットにする場合、Goのバージョンは1.11以降である必要があります。バージョンは、以下のように確認できます(この場合はGo 1.20.2)。
% go version go version go1.20.2 darwin/amd64
【補足】VSCodeにはGo拡張機能をインストールしておく
VSCodeでGoをプログラミングするなら、その名の通りのGo拡張機能をインストールしておきましょう。この拡張機能では、IntelliSenseやデバッグ機能が追加されます。拡張機能をインストールしてGoのソースコードを開くと、goplsやgo-outlineなどのGoのツールのインストールを促すポップアップが表示されますので、[Install]をクリックしてインストールしましょう。
goplsは「Go please」の略で、Goの公式Language Serverです。Language Serverとは、例えばVSCodeの場合は言語ごとの補完機能やフォーマッタ、定義参照などの機能を提供するための仕組みです。go-outlineは文字通り、Goのソースファイルから定義などをJSON形式で抽出するのためのツールです。
プロジェクトの作成と実行
Copyright © ITmedia, Inc. All Rights Reserved.