最近耳にするWebAssemblyとは?

1年以上前ですが、このブログでプログラミング言語のトレンド調査を行いました。

その中でも上位に来ていたものに

「Assembly Language」

がありました。

ブログを上げた際にはアセンブラの一種かと思い、特に調べることもなかったのですが、最近、よく耳にするワードがあります。

「WebAssembly」

さらにはその中で「Rust」がいいよ、という内容が目に止まりました。

ただ「Rsut」は「Rsut」だよね?「Web」と書かれているということはブラウザで動作するということか?

いろいろ気になったので調べてみました。

WebAssembly (WASM)とは?

WebAssembly (Wasm)は、ウェブブラウザで実行される低レベルのバイナリフォーマットで、主に高性能なウェブアプリケーションの開発に利用されます。JavaScriptとは異なり、WebAssemblyはバイナリ形式であるため、ブラウザが解釈しやすく、実行速度が速いのが大きな特徴です。

https://qrz.co.jp/blog/webassembly_function/

弊社でもJavaScriptのフレームワークはいくつか導入しています。

  • React
  • Angular
  • Vue.JS

などを使ってサービスの提供を行っています。

確かにネックとなるのはそれほど実行速度は早くない、というところでした。

それがWebAssemblyでは解消されるということになります。

WebAssemblyの特徴

上記で実行速度を上げましたが、その他の特徴も調べてみました。

JavaScriptを超える高速処理

これは先ほども述べましたが、バイナリ形式であるためが大きいものと想像されます。

従来はJavaScriptによって記述されていた部分をWebAssemblyに置き換えることで、処理速度が改善されます。実測値の報告データによると約3倍の処理速度が期待できるそうです

3倍の違いというのはかなり大きいです。高速な処理が要求されるであろうゲームや、多くのデータを利用するシミュレーションやAIなどに有効になってきそうです。

多くのブラウザで対応済み

メジャーブラウザは多くで対応済みです。なので動作に心配ないのも安心です。

  • Chrome
  • Edge
  • Firefox
  • Safari
  • Opera

最新の対応状況はこちらで確認できます。

https://caniuse.com/wasm

移植性・言語選択肢の多さ

「Rust」が使える?という今回の疑問の回答がこちらになります。

低レベルのバイナリフォーマットは標準化されており、多くの言語が対応しています。

  • Java
  • PHP
  • C# .NET
  • C++
  • Ruby
  • C
  • Swift
  • R
  • Go
  • Rust

「Rust」もありますね。

バイナリフォーマットさえ出力できるものであれば、言語は問わないということですね。

WebAssemblyでは

多くの言語が使える=既存のソースコードの流用ができる、ということにもなります。

「Rust」には「Yew」というフレームワークもありました。

また最近はWebAssemblyに特化した「Oynx」といった言語も登場しています。

どの言語が利用されているのか?

Scott Logic社が、WebAssemblyの利用状況などに関する調査報告を毎年行っており、直近の「The State of WebAssembly 2023」を見てみます。

記事のグラフを抜粋しました。Rustが一番利用されています。さらに3年連続で一番利用されていることが分かります。40%以上と高い利用率ですので、よく話題になっているのかもしれません。

もう一つ、気になるグラフがありました。

WebAssemblyは実は利用用途はWebだけではないんです。

サーバレス、コンテナ、プラグイン開発と多岐に渡ります。

上記ではWebAssembly (Wasm)は、ブラウザで実行と書きましたが、正確には仮想マシン用バイナリ命令フォーマットの仕様になります。

そのフォーマットがWasm ランタイムと呼ばれるスタックベースの仮想マシンによって実行されることになるため、特定のプラットフォームに依存しないことになります。
また、Wasm は OS、 CPU アーキテクチャに依存していません
OS (Windows、Mac、Linux) や CPU アーキテクチャ (x86-64、ARM) が異なる環境でも動作します。
Wasm ランタイムが OS や CPU アーキテクチャの差異を吸収しているため Wasm アプリケーションでは意識する必要がありません。

これによってWebだけではなく、いろいろなところで活用できるというわけです。

最近良く聞く、と言いましたが、実はAWSのLambdaでWebAssemblyが利用できる、というのを見たのが最初の知ったきっかけになります。

サーバサイド向けとしてSpinというフレームワークも存在しているようです。

WebAssemblyでできないこと

良いことずくめなWebAssemblyですが、できないこともあります。

システムのルート権限でアクセスできない

OS やデバイス自体にシステムのルート権限でアクセスできません。したがって、USB や Bluetooth、画面などに直接アクセスすることは不可能です。

DOM操作が行えない

WebAssemblyはブラウザがHTMLを解析する際に生成するデータ構造であるDOM(Document Object Modelの略)の操作もできません。

WebAssemblyの設計仕様はHTMLの要素を操作するものではありません。DOMの操作にはJavaScriptを使う必要があります。

そうなんです、WebAssemblyはブラウザ上では単独では利用できないのです。

ですがJavaScriptを使えば良いだけですので、そんなにネガティブに考える必要はなさそうです。

WebAssemblyを使ってみたい

調べれば調べるほど、いろいろな可能性を秘めたWebAssembly。

しかし最近の動向でもWeb以外での利用も増えてきているとはいえ、メインはWeb利用です。

多言語対応、プラットフォーム非依存、高速性など多くの特徴を持っており、ぜひ取り入れてみたいと思わせる魅力があります。

新しいサービス開発となったら、Yewあたりで、いやまずはLambdaで使ってみたいですね。

お問い合わせ

サービスに関するご相談やご質問などこちらからお問い合わせください。

03-55107260

受付時間 10:00〜17:00