[IND] 3 min readOraCore Editors

WASI 0.3正式版でWebAssembly連携が楽になる

WASI 0.3の正式版で、WebAssembly Componentの非同期処理と連携が共通基盤に近づいた。

Share LinkedIn
WASI 0.3正式版でWebAssembly連携が楽になる

WASI 0.3は、WebAssembly Componentの非同期処理を共通基盤へ寄せた正式仕様です。

ByteCode AllianceがWASI 0.3を正式版にしたことで、WebAssembly Componentを組み合わせる開発の前提が一段整理されました。WASI Preview 2では独自イベントループが分かれていましたが、0.3ではホストが1つのイベントループを管理します。

Item役割主な変更点
WASI 0.1OS APIの抽象化WebAssemblyをスタンドアロン実行へ広げた
WASI 0.2Component model導入WIT、wasi-http、wasi-cli、wasi-clocksを整備
WASI 0.3非同期処理の共通化ホスト管理の単一イベントループへ変更

1. WASI 0.1: WebAssemblyをOSから切り離した起点

Get the latest AI news in your inbox

Weekly picks of model releases, tools, and deep dives — no spam, unsubscribe anytime.

No spam. Unsubscribe at any time.

最初のWASIは、WebAssemblyをブラウザ外でも動かすための土台でした。WebAssembly自体は2019年12月にW3C勧告となり、そこからOS APIを抽象化する流れが生まれました。

WASI 0.3正式版でWebAssembly連携が楽になる

この段階の狙いは、プロセッサやOSの違いを気にせず、同じバイナリをさまざまな実行環境で扱えるようにすることです。WebAssemblyの移植性を、サーバーやローカルランタイムにも広げる入口になりました。

  • 対象: Webブラウザ外の実行環境
  • 目的: OS依存のAPIを隠す
  • 位置づけ: WASI Preview 1 / WASI 0.1

2. WASI 0.2: コンポーネントモデルとWITを導入

WASI 0.2では、WebAssemblyを部品単位で組み合わせる発想が前面に出ました。言語ごとに書いたコンポーネントをつなぎ、アプリケーションを構成するための共通仕様が整えられています。

ここで重要なのがWITです。WITはコンポーネントモデルのIDLで、インターフェイスをどう記述するかをそろえます。あわせて、HTTP、CLI、時刻取得などの基本機能もシステムインターフェイスとして整備されました。

  • WIT: WebAssembly Interface Type
  • 代表的なインターフェイス: wasi-http、wasi-cli、wasi-clocks
  • 狙い: 言語をまたいだ部品化

3. WASI 0.3: 非同期処理をホスト側でまとめる

WASI 0.3の目玉は、コンポーネントごとの独立したイベントループをやめたことです。以前は各コンポーネントが自前で非同期処理を持つため、別のコンポーネントと組み合わせにくい場面がありました。

WASI 0.3正式版でWebAssembly連携が楽になる

新しい仕様では、コンポーネント群全体のホストが1つのイベントループを管理します。これで非同期APIを持つ部品も同じ基盤で扱えるため、連携の難しさが減ります。インターフェイスにも変更が入りました。

  • 変更前: コンポーネントごとに独自イベントループ
  • 変更後: ホストが単一イベントループを管理
  • 効果: 非同期コンポーネントの組み合わせがしやすい

4. Wasmtime 46: 実装を先に試せる

仕様だけで終わらないのが今回のポイントです。WASIのリファレンス実装である[Wasmtime](https://wasmtime.dev/)は、6月20日予定の46でWASI 0.3を実装し、非同期処理をデフォルト有効にする見込みです。

仕様の安定版と実装の追随が近いので、開発者は移行の感触を早めにつかめます。新しいWASIの考え方を試すなら、まずここを見るのが現実的です。

  • リファレンス実装: Wasmtime
  • 予定バージョン: 46
  • 注目点: asyncがデフォルト有効

5. Component model 1.0に向けた次の宿題

ByteCode Allianceは、WASIをComponent model 1.0へ進める途中段階と位置づけています。今後はABIの改善、2つ以上のWebブラウザ上のランタイム実装、実装しやすさの向上が課題です。

つまりWASI 0.3は終点ではなく、コンポーネントモデルを実用の共通土台へ寄せるための中間地点です。非同期処理の統一は、その先の相互運用性を高めるための基礎工事と言えます。

  • 目標: Component model 1.0
  • 課題: ABI改善
  • 課題: 複数ランタイムでの実装拡大

How to decide

WebAssemblyを部品として組み合わせたい人は、WASI 0.2と0.3の違いを押さえる価値があります。言語横断のコンポーネント設計を重視するなら0.2、非同期処理の混在や連携を気にするなら0.3が重要です。

すぐ試したいならWasmtime 46の動きが実務に近い指標になります。仕様の理解を深めたい読者は、WITとイベントループの責務分担を先に追うと整理しやすいでしょう。