WebAssembly Component Model 仕様。Bytecode Alliance 策定の WASM 相互運用標準で、異なる言語(Rust / JS / Python / Go)で書かれた WASM モジュール間の関数呼出 + 型整合性を実現する 2024 年策定の重要規格。
WASM Component Model(ワズム コンポーネント モデル)は、Bytecode Alliance(2019 年に Mozilla / Fastly / Intel / Red Hat 等が結成、現在は Mozilla / Fastly / Microsoft / Cosmonic / Cloudflare / Shopify / Cosmonic / Fermyon 等が参加)が 2020 年から策定を開始し、2024 年に「Preview 2」(コンポーネントモデル仕様 v0.2)として正式化された WebAssembly(WASM)の相互運用標準仕様です。
技術背景として、WebAssembly 自体は 2017 年に W3C 標準化された移植性高いバイナリ命令セットですが、初期 WASM(Core WASM)は単純な関数呼出 + 数値型(i32 / i64 / f32 / f64)のみで、複雑なオブジェクト + 文字列 + リスト + 構造体 + 異言語間の相互運用が困難でした。例えば、Rust で書いた WASM モジュールから JavaScript で書いた WASM モジュールに「文字列リスト」を渡す場合、メモリレイアウト + エンコーディング + ライフタイム管理が言語ごとに異なるため、相互運用が困難でした。
Component Model はこれを解決するため、(1)WIT(WASM Interface Type、ウィット)言語で型定義 + インタフェース仕様を記述・(2)型システムは高水準(string / list / record / variant / option / result 等)+ 言語非依存・(3)Canonical ABI(Application Binary Interface)で言語間メモリレイアウト統一・(4)Component(コンポーネント)単位で関数呼出 + 型整合性を保証、という標準を定義しました。
WIT(WASM Interface Type)は、Web IDL(Web Interface Definition Language)風の言語で、コンポーネントのインターフェース(エクスポート / インポート関数 + 型定義)を記述します。例えば、world hello-world { export hello: func() -> string } という WIT で「文字列を返す hello 関数を持つ hello-world ワールド」を定義し、Rust / JS / Python / Go の各実装がこの WIT を満たす形で WASM コンポーネントを生成します。コンポーネント間呼出は、WIT で型整合性が保証されるため、異言語間でも安全に動作します。
主要 WASM ランタイム + フレームワークでの対応状況は、(1)Wasmtime(Bytecode Alliance、Rust 製ランタイム、Component Model フル対応)・(2)Wasmer(Wasmer Inc.、商用 + OSS、Component Model 部分対応)・(3)WasmEdge(CNCF Sandbox、Component Model 対応進行中)・(4)wasmCloud(Cosmonic、Component Model ネイティブ対応)・(5)Spin(Fermyon、Component Model 対応)・(6)Cloudflare Workers(Component Model 部分対応)などで、2024-2026 年に急速に対応が広がっています。
主な採用シナリオは、(1)クラウドネイティブ WASM プラットフォーム(Fastly Compute@Edge、Cloudflare Workers、Akamai EdgeWorkers)・(2)プラグインシステム(Shopify Hydrogen、Slack Extensions、VS Code Extensions の WASM 化)・(3)サーバーレス FaaS(WasmCloud、Spin、Wasmer Edge)・(4)ブロックチェーン WASM 仮想マシン(NEAR Protocol、Polkadot、CosmWasm)・(5)IoT エッジコンピューティング(WasmEdge、Wasmer エッジ)などです。Docker / Kubernetes に代わる「次世代の軽量実行環境」として 2024-2030 年に普及が予想されています。
| 仕様 | 公開年 | 主な機能 |
|---|---|---|
| WebAssembly 1.0(MVP) | 2017 | Core WASM、ブラウザサポート |
| WASI Preview 0 | 2018 | システムインターフェース初版 |
| Multi-value |
| 2020 |
| 関数複数戻り値 |
| Component Model Preview 1 | 2022 | 試験的コンポーネント |
| Component Model Preview 2 | 2024 | 正式化、WIT v0.2 |
| WASM 2.0 | 2025-2026 予 | SIMD、GC、threading 統合 |
WASM Component Model は開発者 + クラウドネイティブ業界向け技術で、コンシューマ自作 PC ユーザーが直接設定する対象ではありません。ただし、Web ブラウザ(Chrome / Firefox / Safari / Edge)が 2024-2026 年で WASM Component 対応を進めるため、Web 上の高度なアプリ(Photoshop Web、Figma 等)がより高性能 + 柔軟になる影響を受けます。
ホビー / 開発学習用途では、Wasmtime + Rust + cargo-component の組み合わせで自宅 PC で WASM Component を作成 + 実行可能で、Linux / macOS / Windows で動作します。WASI Preview 2 + WIT 言語の学習は、2024-2030 年代のクラウドネイティブ業界で必須スキルとなる見込みで、業務知識習得に有用です。
Q1: Component Model の最大の利点は何ですか? A: 異なる言語で書かれた WASM モジュール間の安全な相互運用です。Rust + JavaScript + Python + Go など複数言語で書かれた個別コンポーネントを、型安全 + メモリ安全 + 言語非依存に組み合わせてアプリケーションを構築できます。これは従来の Docker コンテナや FaaS では不可能だった粒度の言語ミックスを実現します。
Q2: Component Model は Docker / Kubernetes の代替になりますか? A: 部分的になります。WASM Component は Docker より大幅に軽量(起動 1ms 級)+ メモリ効率高 + より小さい粒度で動作するため、サーバーレス / FaaS / プラグイン / IoT エッジ用途では Docker より優位です。ただし、フルアプリケーション + DB + OS 互換性が必要な場合は Docker が依然として優位です。
Q3: 自作 PC で WASM Component を試す方法は?
A: Rust + cargo + cargo-component を Linux / macOS / Windows にインストールし、cargo component new my-component で WASM Component プロジェクトを作成、cargo component build --release でビルドし、wasmtime --component my-component.wasm で実行できます。Wasmtime は無料 OSS で誰でも利用可能です。