WebAssembly(WASM)とは何か、何ができるのか編集部コラム

ここのところ「WebAssembly」が話題のようです。なぜ注目されているのでしょうか。

» 2022年09月23日 10時00分 公開
[荒 民雄ITmedia]

この記事は会員限定です。会員登録すると全てご覧いただけます。

 ここのところ「WebAssembly」の話題を目にする機会が個人的に増えました。

 WebAssemblyは2015年にオープンソースプロジェクトとして公開されたものです。プロジェクトは、さまざまなWebブラウザの差異を吸収してどこでもアプリケーションが軽快に動作する環境を整備することを目的としてます。

 プロジェクト公開直後から主要なWebブラウザ開発元がプロジェクトの趣旨に賛同したことから、2017年には主なWebブラウザで動作環境が整備されていました。その後も開発が進み、現在はさまざまな場面で実用フェーズに入りつつあるようです。

WebAssemblyプロジェクトのWebページ。主要ブラウザの対応状況も示されている(出典:WebAssemblyプロジェクトのWebページ)

※本稿は2022年9月22日配信のメールマガジンに掲載したコラムの転載です。ご登録はこちらから


 古くはJavaが「どこでもアプリケーションが動作する(Run Anyware)環境」とされてきましたが、Webアプリケーションが主流となった現代においてはWebブラウザがその役割を担いつつあります。類似のコンセプトを持ちながら標準化されずに消えていった技術はいろいろとありましたが、現段階でどのWebブラウザでも標準的に利用できるプログラム言語と言えばJavaScript一択になるでしょう。しかし、JavaScriptはC/C++バイナリと比較すると処理速度に劣ることから、よほど軽量なものでない限り、ネイティブアプリケーション同様の処理性能を求める気持ちにはなれません。

 WebAssemblyはこの問題を解決するために生まれた仕組みです。JavaScriptを高速に処理してWeb標準でありながら多様な環境でネイティブアプリケーション並みのアプリケーション実行を可能にします。

 現在は、C/C++やGo、RUSTといった開発言語に対応しており、これらの言語で記述されたプログラムからWebブラウザで高速に実行できるバイナリを生成します。OSSのビルドに良く使われるコンパイラ基盤「LLVM」もWebAssembly出力に対応しています。同様のアイデアとしてMozillaが開発した、事前コンパイルを特長とする「asm.js」がありますが、これをさらにコンパクトかつ高速にするための仕掛けを実装したのがWebAssemblyです。

 すでにWebブラウザでさまざまなアプリケーションを動作させる試みが進んでおり、「Debian Linux」や「PostgreSQL」などのデータベースアプリケーション、プログラム言語「Ruby」の実行環境をWebブラウザで動作させるデモも公開されています。

超高速マルチプラットフォームアプリ実行基盤の道が開く

 Webブラウザでネイティブアプリケーションのようにプログラムを動作させる試みから発展して、Webブラウザの動作を前提とせずにさまざまな環境でWebAssemblyからシステムリソースにアクセスするためのAPI仕様「WASI」(WebAssembly System Interface)の策定が進んでおり、インテルやRed Hat、FastlyとMozillaは、非PC環境でも動作させること(outside-the-browser)を目指した団体「Bytecode Alliance」を立ち上げています。

 この取り組みで注目しておきたいのは、WebAssemblyからOSのシステムコールにアクセスする道が開かれたことと、プログラム実行時のセキュリティ確保のために「Nanoprocess」という手法が提案されたことです。システムコールへのアクセスを許可することはセキュリティリスクが伴いますが、WebAssemblyの仕組みの中でプログラムを隔離し、機能を限定することで安全を確保する狙いです。

 堅ろうさと高速性、ポータビリティを兼ね備えはじめたWebAssemblyは、Webブラウザやモニターを持たないCDNサービス基盤やIoT機器での活用にも期待が寄せられています。

Wasmtime 1.0のリリースを伝えるBytecode AllianceのWebページ

 2022年9月20日(現地時間)には、前述のBytecode Allianceが開発するWebAssemblyのランタイム「Wasmtime」のバージョン1.0がリースされました。Bytecode Allianceはこれをもって「Wasmtimeは本番環境で実行できる品質になった」としています。2022年10月からはMicrosoftが「Azure Kubernetes Service」の「WASIノードプール」でWasmtimeのプレビューを始める予定です。

 Wasmtimeのリリースノートによれば、データ基盤を提供する企業であるInfinyOn Cloudによる2021年7月から実稼働環境において、「Apache KafkaなどのJavaベースのプラットフォームと比較して、Wasmtimeを使ったWebAssemblyはエンドツーエンドのストリーム処理で5倍以上のスループット向上を実現した」としています。

 FastlyはWebAssemblyを自社のCDNサービス基盤に採用していますが、その処理エンジンをWasmtimeに切り替えたことで、実行時間を最大50%改善、1秒当たりのリクエスト処理数も72〜163%増加したといいます。

 仮想マシンやLinuxコンテナなど、ポータビリティを重視したシステム実装の一つとしてWebAssemblyも定着するのでしょうか。今後の動向を注視したいと思います。

WebAssemblyについては、Mozillaなどのコミュニティがドキュメント整備している他、開発者自身による技術解説も日本語で公開されています。プロジェクトの初期からIT系ブログメディア「Publickey」も情報を発信しており、本コラム執筆に当たって参考にさせていただきました。


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ