【うぇぶあせんぶりこんぽーねんともでる】

WebAssemblyコンポーネントモデル とは?

最終更新:
💡 Wasmの部品を、型の決まった窓口でつなぐ

WebAssemblyの部品を、型を持つインターフェースで組み合わせるためのモデル。WITで呼び出しの契約を定義し、Canonical ABIでデータの表現や受け渡しをそろえる。

📌 このページのポイント
型の決まった窓口でWasmをつなぐ 部品A Rustなど 呼び出す側 部品B Pythonなど 提供する側 呼び出し WIT:型と関数の契約 echo: func(s: string) -> string; Canonical ABI:境界のデータ表現 対応ツールと実行環境、必要なAPIを用意 WITは処理の中身を実装しない
対応ツールで作る異言語の部品の模式例。任意の既存バイナリを直接つなぐものではない。
ひよこ ひよこ
コンポーネントモデルって何をするの?
ペンギン先生 ペンギン先生
Wasmの部品を、型の決まった窓口でつなぐためのモデルだよ。文字列やリストなどの受け渡しを、共通の契約で表せるんだ
ひよこ ひよこ
従来のモジュールでは何が難しいの?
ペンギン先生 ペンギン先生
文字列などをメモリ上のどの形式で渡すか、呼び出す側と提供する側で合わせる必要があるよ。言語ごとのデータ表現の違いも連携の手間になるんだ
ひよこ ひよこ
WITって何?
ペンギン先生 ペンギン先生
WIT(Wasm Interface Type)は型や関数の契約を記述する言語だよ。例えばstringを受け取る関数などを定義する。処理の中身を実装する言語ではないんだ
ひよこ ひよこ
型を書くだけでどの言語でも動く?
ペンギン先生 ペンギン先生
対応するツールで部品やバインディングを作り、必要なimportを満たして、対応ランタイムで実行する準備が要るよ。WASIはファイル操作などの共通APIを定義するもので、実行環境が何を提供するかも関係するんだ
ひよこ ひよこ
ABIの問題を全部なくせるの?
ペンギン先生 ペンギン先生
Canonical ABIはコンポーネント間のデータ表現や呼び出しの約束をそろえる仕組みだよ。任意の既存バイナリをそのまま接続できるわけでも、処理の意味や結果まで正しいと保証するわけでもないんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Wasmコンポーネントモデル」って出てきたら「言語をまたいでWasmを型安全に組み合わせる仕様」と思えればだいたいOK!
📖 おまけ:英語の意味
「WebAssembly Component Model」 = WebAssemblyコンポーネントモデル
💬 バラバラなWebAssemblyモジュールを「コンポーネント」という統一単位にまとめて、言語の壁を越えて組み合わせられるようにしたモデルだよ。

参考資料

← 用語集にもどる