WebAssembly(ウェブアセンブリ)とはについて丁寧に解説していきます。
- WebAssemblyとは何かを理解できる
- 何ができるかを理解できる
WebAssemblyとは
ブラウザ上で実行可能なバイナリコードの新しいフォーマット
様々な言語からコンパイルが可能で、ネイティブに近いパフォーマンスで動作することが特徴です。
イメージとしては、C++やRustなどの言語をブラウザ上で実行できるようなイメージです。
主にパフォーマンスの観点で「できたらいいな」と思っていたことができるようになったという感じですね。
モグモグさん
略称は「Wasm(ワズム)」です。
Google, Microsoft, Mozzila, Appleによって仕様が策定されて、2019年に正式なウェブ標準とされました。
バイナリコードとは、コンピューター(CPU)で実行可能な状態になったプログラムのことです。
コンパイル後のプログラムとも言えます。
なぜWebAssemblyが生まれたのか?
ブラウザ(JavaScript)でも実行パフォーマンスが求められるようになったから
モグモグさん
JavaScriptは、元々はHTMLに動きをつけるくらいの役割でしたが、
AjaxやWebGL(Web Graphics Library)などが登場して役割が増えたり、マシンスペックがPCより劣るスマートフォンでの利用も増えたりと役割が大きくなり、実行パフォーマンスが必要になりました。
WebGL (Web Graphics Library) とは、GPUへのアクセスを可能にするAPIで、3Dゲームなどをブラウザ上で実現できるようになりました。
もう少し詳しく
WebAssemblyの前に、asm.jsというMozillaが研究開発したJavaScriptのサブセットが開発されました。
モグモグさん
asm.jsは、Ahead of Timeコンパイルを採用に、プログラムの実行前にネイティブコードへコンパイルすることで、
ブラウザでネイティブコードを高速で実行できるようにしました。
ただし主に下記のような問題が発生していました。
- ファイルのサイズが大きくなり、通信量が増える
- ファイルのサイズが大きくなり、構文解析の時間が増える
これらの問題を解決するための、WebAssemblyが登場したという背景があります。
対応ブラウザと対応言語
対応ブラウザ
Firefox、Chrome、Safari、Edge等の主要なブラウザが対応しています。
対応言語
2021年5月現在の主な対応言語
- C/C++
- Rust
- TypeScript
- C#
- F#
- D
- Go
- Kotlin
- Swift
- Pascal
モグモグさん
その他いくつかの言語にも対応しています。
公式ドキュメントを参考ください。
どんな場面で使えるか
主には下記のケースだと思います。
- C/C++の資産をWEBに移管するケース(ゲームなど)
- パフォーマンスが必要な箇所のみを実装するケース(ウェブアプリケーションなど)
より具体的なケースは、公式ドキュメントに記載されているので参考にしてみてください。
その他
WasmをEthereumで使えるようにしたプロジェクトもあります。
https://github.com/ewasm/design
WebAssembly技術のパフォーマンスや開発コミュニティによって、
コントラクトコード実行の速度向上や開発環境の改善などが可能になります。
まとめ
Web Assemblyとは?について解説しました。
最後に要点をまとめておきます。
- ブラウザ上で実行可能なバイナリコードの新しいフォーマットのこと。
- 様々な言語からコンパイルが可能で、ネイティブに近いパフォーマンスで動作することが特徴
- ウェブアプリケーションでパフォーマンスが必要な箇所で利用したり、C/C++などで作ったゲームをWEBに移植したい場合などに利用