2022-10-23
IchigoJam web でも活躍しているWebAssembly(ウェブアセンブリ、WASM)は、C言語などのコンパイル型言語をブラウザの世界で使うための技術。ダウンロードして動かすプログラムに勝手に自分のファイルが見られては困るので、仮想的なコンピューター上で動かす仕組みです。


「Wasm Workers Server by VMWare」

仮想化することで環境を問わずにどこでも動く利点を活かし、サーバー側でもWebAssemblyの活用例が広がっている様子。Denoではブラウザ上で使うのと同様にWebAssemblyが使えますが、「Wasm Workers Server」は基本がWebAssemblyという設計です。

下記のJavaScriptのプログラムを index.js として保存して addEventListener("fetch", e => { const s = JSON.stringify(e, null, 2).replace(/\n/g, "<br>"); e.respondWith(new Response(s)) }); wws コマンドで実行、localhost:8080 を開くとリクエスト内容が見えます。 なかなか手軽でいい感じ。

ウェブサーバーは、Rust製の Actix Web が組み込まれていて、JavaScriptエンジンとしてQuickJSが使われています。


続いてRustからコンパイルするWebAssemblyも試してみますが、ドキュメントにミスがありました。


「wasm-workers-server/rust-workers.md at main · taisukef/wasm-workers-server」

こちらがforkして修正したRustチュートリアル。rustupした後、targetを指定するのがポイントです。


動きました!今の設計ではファイルへのアクセスができず、メモリ内に保存するキーバリューのみに対応ですが、オープンソースなので必要なものは自分で足すこともできますね!単機能のAPIサーバーとして動かす用途には十分使えます。


IPv6アドレスに対応していなかったので、1行書き換えたものも合わせてプルリク!

どんどん広がる技術の世界。気になる方は、今週末、鯖江で開催、サイバーフライデーへどうぞ。

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS