Wasmer、WebAssembly SDK「@wasmer/sdk」アップデート Node.jsとBunから直接Wasmを実行可能に:サンプルプログラムをGitHubで公開
WebAssemblyランタイムを開発するWasmerは「Wasmer JavaScript SDK」(@wasmer/sdk)のアップデートを発表した。JavaScriptランタイムのNode.jsやBunのサポートが追加され、NodeやBunからwasmバイナリを直接実行可能になったという。
WebAssembly(Wasm)ランタイムを開発するWasmerは2024年11月1日(米国時間)、WASI(X)アプリケーションをブラウザで簡単に実行するためのライブラリである「Wasmer JavaScript SDK」(@wasmer/sdk)のアップデート(v0.9.0)を発表した。
WASI(WebAssembly System Interface)は、WebAssemblyでネットワークやファイル、メモリなどのシステムリソースを抽象化するAPI仕様。WASIXは、WASIを拡張してPOSIX(Portable Operating System Interface)の機能を利用可能にする仕様だ。Wasmer JavaScript SDKを使えば、あらゆるWASIパッケージやWASIXパッケージを簡単に実行できるようになる。
@wasmer/sdkのアップデートにより、JavaScriptランタイムのNode.jsやBunのサポートが追加され、他の依存関係をインストールせずにバニラのNode.js環境でC/C++コンパイラ「clang」など、wasmerに対応するプログラムやパッケージを実行可能になったという。
Node.jsやBunに対応させるWasmerの取り組みとは?
Wasmerによると、以前の@wasmer/sdkでは、仕様上のギャップにより、Node.jsやBunから直接実行できていなかったという。具体的には、サブプロセスや非同期の標準入出力をサポートするために使用していた「JavaScript Worker API」(Web上でマルチスレッドを処理するためのブラウザAPI)と、Node.jsのworker_threads APIに3つの違いがあったためだ。
- Node.jsのworker_threads.workerは、ブラウザのようにDOMスタイルのイベント(Event.data、Event.typeなど)は使用しない
- モジュールURL、Blob URL、Data URLの受け取りをサポートしていない(Node.jsはWorkerに対してファイルの場所のみを受け付ける)
- worker_threads.workerにはブラウザのWorkerスレッドに存在するWorkerGlobalScopeのサポートがない
Wasmerはこれらのギャップを埋めるための調査を実施し、「web-worker」と呼ばれるNPMパッケージを使用することで、このギャップを解消させ、v0.9.0を公開したという。
Wasmerは、Node/Bunでcowsayを実行するサンプルプログラムをGitHubで公開している。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- WebAssemblyランタイム「Wasmer 5.0」公開 iOSでWebAssemblyを実行可能に、その仕組みとは?
Wasmerは、WebAssemblyランタイム「Wasmer」の最新版となる「Wasmer 5.0」を公開した。Wasmer 5.0では、iOS上でWebAssemblyモジュールをシームレスに実行できるという。 - Rust and WebAssemblyでSPAを作ってみよう
第12回からは、第11回までで作成した投稿アプリの延長として、Rust and WebAssemblyでTODOアプリを開発します。第12回では、プロジェクトの構築やさまざまな準備のためのコードを通じて、Rust and WebAssemblyの基本的な利用方法を理解します。 - PythonとRubyでWebAssembly――PyodideとPyScript、Ruby 3.2を体験する
第7回は、PythonとRubyによる開発事例を紹介します。これらの言語は、ここまでの回で紹介してきた言語とは異なった、実行環境をWebAssembly化するというアプローチでWebAssemblyに対応しています。PythonのPyodideとPyScript、Ruby 3.2でのWebAssemblyサポートを紹介します。