Mozilla Hacksに掲載された 「Why is WebAssembly a second-class language on the web?」 を紹介します。
この記事は、WebAssemblyが2017年の登場以降大きく進化してきた一方で、Web上ではまだJavaScriptほど自然に扱えない、という問題を整理しています。低レベル言語をWebに持ち込める強力な仕組みでありながら、実際に使うには読み込み、リンク、Web API呼び出し、型変換、ビルドツールなど、多くの周辺知識が必要になります。
なぜ“二級市民”に見えるのか
記事の中心にある指摘は、WebAssembly自体の性能や言語機能ではなく、Webプラットフォームとの統合の薄さです。JavaScriptなら <script> で読み込み、DOMやConsole APIをそのまま呼び出せます。一方でWebAssemblyは、読み込みにWebAssembly JS APIを使い、Web APIを呼ぶにはJavaScript側のグルーコードを挟む必要があります。
このグルーコードは、文字列や構造体をJavaScriptとWasmメモリの間で変換し、Web APIへの橋渡しをします。自動生成ツールである程度は隠せますが、言語ごとに仕組みが違い、ビルドやデバッグの負担として残ります。結果として、WebAssemblyは平均的なWeb開発者にとって「必要に迫られたときだけ使う高度な選択肢」になりやすい、という見立てです。
リンク先から見えた補足
記事内で参照されている WebAssembly Community Group は、WebAssemblyの仕様や提案の多くがGitHub上で議論されていることを案内しています。WebAssemblyは単一のブラウザ機能というより、複数のブラウザ実装者とツールチェーン関係者が進める標準化の集合体として見る必要があります。
解決策として記事が注目しているのが WebAssembly Component Model です。Component Modelのドキュメントでは、コンポーネントを相互運用可能なWebAssemblyライブラリやアプリケーションのための広いアーキテクチャとして説明しています。WITでインターフェースを記述し、異なる言語やランタイム間で機能をつなぎやすくする方向です。
また、ES module integration proposal は、WebAssemblyモジュールをJavaScriptのモジュールシステムに近い形で扱うための提案です。さらに Component Modelの仕様リポジトリ や Creating Components を見ると、C/C++、C#、Go、JavaScript、Python、Rustなど複数言語からコンポーネントを作る導線が用意されつつあることが分かります。
気づき
この記事を読んでの気づきは、WebAssemblyの普及を妨げているのは「速いか遅いか」だけではなく、「普通のWeb開発の流れに乗れるか」だという点です。技術的には使えるものでも、読み込み方やAPI連携に大きな段差があると、チームや個人の選択肢には入りにくくなります。
Component Modelが面白いのは、WebAssemblyを単なる高速な実行形式ではなく、言語・ツール・Web APIをまたいで共有できる部品の形式へ近づけようとしているところです。これが進めば、WebAssemblyは「特別な最適化手段」から、「JavaScript以外の言語でも自然にWebを作るための基盤」へ変わっていく可能性があります。
読んでおきたい人
Rust、C/C++、Go、PythonなどからWeb向けのアプリやライブラリを作りたい人、WebAssemblyを導入したいがツールチェーンの複雑さで止まった経験がある人には特に参考になります。WebAssemblyの将来像を、性能の話だけでなく開発体験の話として捉え直せる記事です。
参照元: Why is WebAssembly a second-class language on the web? – Mozilla Hacks(2026年2月26日公開)
