WebAssemblyはWebと冠があるものの、もはやWebだけのものではなくなっています。Node.jsでは元々CUIでも実行できる状態でしたし、PHPでWebAssemblyを実行できるphp-ext-wasmもあります。 今回紹介するのは様々なソフトウェアをWebAssembly化し、ローカルで実行できるwasmerを紹介します。

wasmerの使い方

なんとLuaをWebAssembly化しています。普通にREPLが立ち上がります。

$ wasmer run lua.wasm 
Lua 5.4.0  Copyright (C) 1994-2018 Lua.org, PUC-Rio
> 

Pythonで記述されたPython処理系であるPyPyをJavaScriptに変換したpypyjsをWebAssemblyにしたpypyjs.wasmを実行するデモです。もはや意味分かりません。

$ wasmer run pypyjs.wasm
(debug:, hello world)

さらにnginxをWebAssembly化したデモもあります。

wasmerはWebAssemblyをユニバーサルバイナリーと定義しています。まさにWebAssemblyを実行する環境さえあれば、それがWebブラウザでもローカルでもサーバでも関係なく動作するのは魅力です。実行時にビルドが入るのでちょっと時間がかかるのが難点ですが、将来的に解決すれば魅力的なソフトウェアになりそうです。

wasmerはRust製のオープンソース・ソフトウェア(MIT License)です。

Wasmer wasmerio/wasmer: Universal Binaries Powered by WebAssembly