2023年04月11日

WebAssemblyを開発できるプログラミング言語まとめ

カテゴリー:システム開発, テクノロジー

タグ:サービス開発, システム開発, プログラミング

Knowledge_seci_model

WebAssembly(WASM)はJavaScriptを除き、ブラウザ上での動作が保証された実行環境です。WASMはあくまでも実行環境であり、プログラミング言語ではありません。そのため、WASMバイナリに変換できる言語は幾つも存在します。

そうした言語を使うことで、普段自分が作っているプログラミング言語からWASMバイナリを生成できます。JavaScript以外の言語を使ってWebアプリケーションの開発が可能になります。

この記事では主なプログラミング言語と、その利用法を紹介します。

Rust

RustはMozillaの開発するプログラミング言語で、WebAssembly向けに開発するのであれば一番お勧めの言語になります。元々RustやC、C++がWebAssembly向けに開発できる言語となっていたので、最新の機能を一番早く実装されるでしょう。

Rustは元々CやC++を置き換える存在として開発されています。CやC++よりもモダンで、メモリ安全なプログラミングを行う際によく用いられています。

C/C++

CやC++もWebAssembly開発にお勧めの言語です。すでにCやC++で開発されているソフトウェアをWebAssembly化する試みも数多く行われています。SQLite3をWASM化するSQLite3 WASM/JSはその一つです。

C/C++からWASMバイナリにする場合にはEmscriptenを利用します。変換する際に、それを利用するHTMLファイルも生成してくれます。もちろん全てのAPIが動作する訳ではないので、コードの修正は必須ですが、既存の資産が利用できるメリットは大きいでしょう。

Go

Goは言語として公式にWebAssemblyをサポートしています。そのため、情報も充実しているイメージがあります。 GOARCH=wasm GOOS=js を付けてコンパイルすればWASMバイナリが生成されます。

ただし、まだ実験的な機能であったり、生成されるバイナリファイルのサイズが大きいのが難点です。

Java

JavaではTeaVMというライブラリがJavaの中間ファイルからWASMバイナリを生成します。面白いのは中間ファイルなので、元々のソースコードを必要としないことです。

つまり技術的にはJavaだけでなく、ScalaやKotlinなどJVMで動く中間ファイルであれば利用できるようです。

Kotlin

Kotlinについては開発元であるJetbrainにてKotlin/Wasmが開発されています。まだ実験的ということですが、KotlinからWASMバイナリを生成する機能です。

WASMのGCを必要としているため、ChromeやFirefoxの特別なフラグを必要とします。

AssemblyScript

AssemblyScriptはTypeScriptのサブセット言語です。言語体系はTypeScriptですが、全機能が使える訳ではありません。

そしてAssemblyScriptを変換して、WebAssemblyに変換できます。新しい言語を覚えずにTypeScriptだけで済むのは大きな利点です。

.NET

.NETではBlazorというフレームワークを利用することでWASMバイナリを生成できます。.NET系の言語、C#やVB.NETなどで利用できるようです。

まだ比較的新しいフレームワークですが、成熟すれば.NETを使った開発時に利用できるでしょう。

まとめ

今回はWebAssemblyバイナリを生成できるプログラミング言語を紹介しました。RustやC、C++以外の言語でもWebAssemblyは開発できます。ぜひ自分の好きな言語でトライしてください。

WebAssemblyは多くの場合、JavaScriptよりも高速に実行できます。機械学習のようなクライアント側での計算処理が増える場合やゲームなど、多くの場面で利用できるでしょう。

役に立ったら、記事をシェアしてください