サイト名変更・お引越しのお知らせ

【Wasm】WebAssemblyとは何かを解説

WebAssembly(ウェブアセンブリ)とはについて丁寧に解説していきます。

この記事でわかること
  • WebAssemblyとは何かを理解できる
  • 何ができるかを理解できる

WebAssemblyとは

ブラウザ上で実行可能なバイナリコードの新しいフォーマット

様々な言語からコンパイルが可能で、ネイティブに近いパフォーマンスで動作することが特徴です。

イメージとしては、C++やRustなどの言語をブラウザ上で実行できるようなイメージです。

主にパフォーマンスの観点で「できたらいいな」と思っていたことができるようになったという感じですね。

モグモグさん

略称は「Wasm(ワズム)」です。

Google, Microsoft, Mozzila, Appleによって仕様が策定されて、2019年に正式なウェブ標準とされました。

補足

バイナリコードとは、コンピューター(CPU)で実行可能な状態になったプログラムのことです。

コンパイル後のプログラムとも言えます。

なぜWebAssemblyが生まれたのか?

ブラウザ(JavaScript)でも実行パフォーマンスが求められるようになったから

モグモグさん

JavaScriptは、元々はHTMLに動きをつけるくらいの役割でしたが、

AjaxWebGL(Web Graphics Library)などが登場して役割が増えたり、マシンスペックがPCより劣るスマートフォンでの利用も増えたりと役割が大きくなり、実行パフォーマンスが必要になりました。

補足

WebGL (Web Graphics Library) とは、GPUへのアクセスを可能にするAPIで、3Dゲームなどをブラウザ上で実現できるようになりました。

もう少し詳しく

WebAssemblyの前に、asm.jsというMozillaが研究開発したJavaScriptのサブセットが開発されました。

モグモグさん

asm.jsは、Ahead of Timeコンパイルを採用に、プログラムの実行前にネイティブコードへコンパイルすることで、

ブラウザでネイティブコードを高速で実行できるようにしました。

ただし主に下記のような問題が発生していました。

  1. ファイルのサイズが大きくなり、通信量が増える
  2. ファイルのサイズが大きくなり、構文解析の時間が増える

これらの問題を解決するための、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とは?について解説しました。

最後に要点をまとめておきます。

WebAssemblyまとめ
  • ブラウザ上で実行可能なバイナリコードの新しいフォーマットのこと。
  • 様々な言語からコンパイルが可能で、ネイティブに近いパフォーマンスで動作することが特徴
  • ウェブアプリケーションでパフォーマンスが必要な箇所で利用したり、C/C++などで作ったゲームをWEBに移植したい場合などに利用