WebAssembly (WASM) とは、最近のウェブブラウザーで動作できる新しい種類のコードです。これはコンパクトなバイナリ形式の低水準なアセンブリに似た言語です。ウェブブラウザ上で実行できるようコンパイルされる対象となる、C/C++およびRustといった言語に近いパフォーマンスで実行できます。WebAssemblyは、JavaScriptと連携して実行が可能であるように設計されています。
WebAssemblyでのウェブ開発は、ウェブ上で複数の言語で記述されたコードを実行するための別の方法です。また、グラフィックスやビデオ処理、または複雑な計算などの一部のタスクも高速化されます。
それ以上に、WebAssemblyモジュールはウェブにインポートすることができ、WebAssemblyの機能はJavaScriptを経由して利用できるようにするため、WASMコードの書き方を知る必要はありません。これは、パフォーマンスを向上させ、新機能を取り入れ、機能をウェブ開発者が簡単に使用でき、利便性が上がります。
WebAssemblyの目標
- 高効率で、高速であること:WebAssemblyは、ハードウェア機能を活用することで、様々なプラットフォームでネイティブに近い速度で実行可能です。
- 可読性とデバッグ可能であること:WebAssemblyは、低水準のアセンブリ言語であり、人間が読めるテキスト形式になるように設計されます。これにより、開発者は自分のコードを書き、チェック、デバッグもできます。
- 安全であること:WebAssemblyは安全でサンドボックス化された実行環境上で動作します。他のウェブコードと同様に、ブラウザーに対して同一権限とオリジンポリシーの適用を強制します。
- ウェブを壊さないこと:WebAssemblyは他のウェブ技術と完全に互換性を持ち、後方互換性を維持するように設計されます。

WebAssemblyの主な概念
- モジュール:ブラウザによって実行可能な機械語にコンパイルされたWebAssemblyバイナリーを表します。モジュールはステートレスであるため、Blobのようなものです。特にWindowsとワーカーの間で(postMessage()を経由して)共有することができます。このモジュールは、ESモジュールのようにインポートとエクスポートの宣言を行います。
- メモリ:バイトのサイズ変更可能なArrayBufferは、WebAssemblyの低水準なメモリーアクセス命令によって読み書きされます。
- テーブル:サイズ変更可能な参照の配列は、RAWバイト列としてメモリ内に格納できません(安全性と移植性の理由から)。
- インスタンス:メモリ、テーブル、インポートされた値のセットを含む、実行時に使用されるすべてのすべての状態とペアになるモジュールです。インスタンスは、インポートされた値の特定のセットによって特定のグローバルグループにロードされるESモジュールのようなものです。

従来のウェブ開発とWebAssemblyの違い
- プログラミング言語:従来のウェブ開発では、JavaScriptは主にクライアント側スクリプトのプログラミング言語として使用され、HTMLはコンテンツの構成に使用され、CSSはWebページのレイアウト設定に使用されます。その一方で、WebAssemblyのコードは、C、C++、Rustなど多くの言語で記述でき、バイナリ形式にコンパイルされます。そのため、JavaScriptとともにブラウザ上で高性能コードを実行できるようになります。
- 実行モデル:従来のウェブ開発では、ブラウザがJavaScriptのテキストを読み込んで処理してWebブラウザ上に表示しますが、WebAssemblyによる開発の際には、ブラウザはバイナリファイルとして全体のモジュールを読み込んで処理します。
- パフォーマンス:JavaScriptはインタプリタ言語(コードは各命令をリアルタイムで翻訳・処理するためにトランスレーターによって1行ずつ読み取られ、処理されます)です。WebAssemblyは高性能処理を行うように設計されています。機械語に近い速度でコードを処理できます。
- コードベースとライブラリ:従来のウェブ開発は、ウェブアプリケーションの開発に利用できるツールの大規模なネットワークを備えたJavaScriptライブラリやフレームワークに依存しています。一方、WebAssemblyはJavaScriptに比べてネットワークが小さい新しい技術です。ただし、WebAssemblyはコーディネーションとデータバインディングを通じJavaScriptのライブラリやフレームワークを使用することができます。これらの理由により、開発者はコードを再利用し、WebAssemblyモジュールをアプリケーションに統合することが可能です。
- 移植性:WebAssemblyは様々なプラットフォームと互換性があります。つまり、同じWebAssemblyモジュールはコードを変更せずに、異なるオペレーティングシステムとウェブブラウザ上で実行できます。
- アプリケーションの範囲:従来のウェブ開発は、シンプルなWebアプリケーションから複雑なWebアプリケーションまで幅広いWebアプリケーションに適しています。その一方で、WebAssemblyはパフォーマンスを重視しており、ゲーム、メディア処理、ストリーミングデータ、科学的モデリングなど、複雑な計算を必要とするアプリケーションに適しています。
まとめ
WebAssemblyはまだ新しく、不安定であると考えられています。なぜなら、2015年からにリリースされていますが、今日までまだ設計段階にあるからです。これは長い間存在しており、非常に安定しているJavaScriptとは異なります。ただし、WebAssemblyが正式に一般公開され、将来的にコミュニティが増えると、ゲーム、計算タスク、グラフィックスを多用するタスクなど、多用で再び注目される可能性があります。
参照元:
https://developer.mozilla.org/en-US/docs/WebAssembly/Concepts