THINK

AssemblyScriptを用いて安全にプラグイン機能を提供する(vol.2)

3/14/2024

Wasmの注目される点として,セキュアであることが挙げられる. Wasmの実行はランタイム上で行われるが,このランタイムは計算能力しか提供しないサンドボックスになっている.

標準出力やconsole.logに情報を出したいとか,DOM Elementを操作したいとか,そういうことをWasm単体ではできないようになっている. これらの操作をしたい場合,Wasmを実行する際に実行する側(例えばJSなど)からこれらの操作を提供する関数をインポートする必要があるため, Wasmは基本的に許可された操作以外を行うことができない.

この特性(とポータビリティ)を活用して,Linuxコンテナの代わりにWasmを利用したいというのが,インフラ界隈でWasmが注目されている理由でもある.

アプリ界隈でもこの特性を活用することで,安全にユーザーにプラグイン機能を提供できる. プラグインとして利用できるWasmのインターフェースを用意し,利用者はインターフェースを満たすWasmを用意するだけで良い. とはいえ,Wasmのバイナリを用意しろというのは万人受けするものではない.

そこで,Wasmのバイナリを作るためのインターフェースとしてAS(AssemblyScript)をしたい. ASはTSの文法をほぼそのままに,Wasmにビルドできる言語で,比較的馴染みのある文法とTSの資源をユーザーに提供することができる. ASはブラウザ上で実行することが可能なため,ユーザーに対してブラウザ上で編集,テストする環境を用意できる(最終的なビルドはブラウザで行えば良い).

実際に用意したデモ環境 : as-example.deno.dev