WebAssembly Web API

W3C 勧告候補ドラフト

このドキュメントの詳細
このバージョン:
https://www.w3.org/TR/2025/CRD-wasm-web-api-2-20251102/
最新公開バージョン:
https://www.w3.org/TR/wasm-web-api-2/
編集者ドラフト:
https://webassembly.github.io/spec/web-api/
履歴:
https://www.w3.org/standards/history/wasm-web-api-2/
実装レポート:
https://webassembly.org/features/
フィードバック:
GitHub
編集者:
Ms2ger (Igalia)
課題トラッキング:
GitHub Issues

概要

この文書は、WebAssemblyとより広範なウェブプラットフォームとの統合について説明します。

これは関連する文書群の一部です: コアWebAssembly仕様WebAssembly JSインターフェイス、 およびWebAssembly Web APIです。

この文書の位置付け

このセクションは、本書が公表された時点での文書の状態について説明します。現在のW3C出版物およびこの技術報告書の最新版は、W3C技術報告書インデックスでご覧いただけます。

この文書はWebAssembly作業グループによって、勧告トラックを用いて候補勧告ドラフトとして公開されました。

候補勧告としての公開は、W3Cおよびそのメンバーからの支持を意味しません。候補勧告ドラフトは、作業グループが今後の候補勧告スナップショットに含めることを意図した、前回の候補勧告からの変更を統合しています。

WebAssembly作業グループは、この公開物を候補勧告の状態で維持し、「リビングスタンダード」として継続的に更新する予定です。いずれの場合も、勧告(REC)への移行は2025年12月2日以前には要求されません。

この文書はいつでも保守および更新される可能性があります。本書の一部は作業途中です。

この仕様に関する議論には GitHub Issues をご利用ください。 すべての課題とコメントは アーカイブ されています。

この文書は WebAssembly作業グループ により作成されました。

この文書は W3C特許ポリシー の下で活動するグループによって作成されました。 W3Cはグループの成果物に関連してなされた 公開された特許開示一覧 を維持しています; そのページには特許開示の方法も記載されています。 個人が、本質的な請求項(Claims) を含むと考える特許について実際に知っている場合は、W3C特許ポリシー第6節に従って情報を開示しなければなりません。

この文書は 2025年8月18日 W3Cプロセス文書 によって管理されています。

1. はじめに

この文書はWebAssembly仕様[WEBASSEMBLY]およびWebAssemblyのJavaScript埋め込み[WASMJS]を基にしています。 ここでは、WebAssemblyをより広範なWebプラットフォームに統合する方法、例えばJavaScript[ECMASCRIPT] 自体の範囲外でWebユーザーエージェントによって実装される追加APIなどについて記述します。

2. ストリーミングモジュールのコンパイルとインスタンス化

[Exposed=(Window,Worker)]
partial namespace WebAssembly {
  Promise<Module> compileStreaming(Promise<Response> source, optional WebAssemblyCompileOptions options = {});
  Promise<WebAssemblyInstantiatedSource> instantiateStreaming(
      Promise<Response> source, optional object importObject, optional WebAssemblyCompileOptions options = {});
};
compileStreaming(source, options) メソッドは、呼び出されたとき、潜在的なWebAssemblyレスポンスのコンパイルsourceoptionsで実行した結果を返します。
instantiateStreaming(source, importObject, options) メソッドは、呼び出されたとき、次の手順を実行します:
  1. promiseOfModulesourceoptions潜在的なWebAssemblyレスポンスのコンパイルを実行した結果とする。

  2. promiseOfModuleをインポートimportObjectモジュールPromiseのインスタンス化の結果を返す。

潜在的なWebAssemblyレスポンスのコンパイルのために、 Response のpromise sourceWebAssemblyCompileOptions optionsを受け取り、以下の手順を実行します:

注:このアルゴリズムはResponse オブジェクトとそのPromiseのいずれも受け入れ、レスポンスのバイト列をコンパイルおよびインスタンス化します。このコンパイルはバックグラウンドかつストリーミング方式で行うことができます。ResponseCORS 同一生成元でなかったり、ok ステータスではなかったり、 `application/wasm` MIMEタイプに一致しない場合、返却されたPromiseはTypeError で reject されます。 コンパイルやインスタンス化が失敗した場合は原因に応じて CompileError などのエラー型で reject されます。

  1. returnValue新しい Promise とする。

  2. React source に対して:

    • source が値 unwrappedSource で fulfilled された場合:

      1. responseunwrappedSourceresponse とする。

      2. mimeTypeheader リスト から `Content-Type` を取得した結果とする。

      3. mimeType が null の場合、TypeErrorreturnValue をrejectし、これ以降のサブステップを中止する。

      4. mimeType の先頭と末尾のすべてのHTTPタブまたは空白バイトを除去する。

      5. mimeTypeバイト 大文字小文字無関係`application/wasm` に合致しない場合、 TypeErrorreturnValue をrejectし、これ以降のサブステップを中止する。

        注: パラメータを加えることはできません。空の`application/wasm;`も不可です。

      6. responseCORS同一生成元でない場合、 reject returnValueTypeError で reject しサブステップを中止する。

      7. responsestatusok ステータスでない場合、 reject returnValueTypeError で reject しサブステップを中止する。

      8. Consume response の body をArrayBuffer として消費し、その結果をbodyPromiseとする。

        注:この仕様ではBodyを全て消費してからコンパイルしていますが、これはあくまで記述の簡便化のためであり、実装上はストリーミングで処理可能です。この違いは観測できませんので、単純化されたモデルを指定しています。

      9. React bodyPromise に対して:

    • sourcereasonでrejectedされた場合:

      1. reject returnValuereasonでrejectする。

  3. returnValueを返す。

3. シリアライズ

WebユーザーエージェントはModule インターフェースに [Serializable] 拡張属性を追加しなければなりません。

シリアライズ手順は、value, serialized, forStorageを受けて次のようにします:

  1. forStorageがtrueなら「DataCloneErrorDOMException をスローする。

  2. serialized.[[Bytes]] に サブシリアライズ value.[[Bytes]] をセットする。

  3. serialized.[[AgentCluster]] に 現在のRealmagent clusterをセットする。

デシリアライズ手順serializedvaluetargetRealmを受けて:

  1. bytesサブデシリアライズ serialized.[[Bytes]] とする。

  2. value.[[Bytes]] を bytes とする。

  3. もし targetRealmagent clusterserialized.[[AgentCluster]] と異なれば、「DataCloneErrorDOMException をスローする。

  4. WebAssemblyモジュールをコンパイル bytes から行い、value.[[Module]]にその結果をセットする。

エンジンは構造化シリアライズ時に内部コンパイル済みコードの共有や再利用を試みるべきですが、CPUアップグレードやブラウザ更新などの場合は再コンパイルが必要なこともあります。

注:構造化シリアライズの意味論は、Module がコンパイルされたバイナリソースをシリアライズし、デシリアライズしてターゲットrealmで再コンパイルするのと同等です。 上記のエンジン最適化により、構造化シリアライズはコンパイル済みコードのキャッシュやウィンドウ・ワーカー間でのコード共有を開発者が明示的に制御可能としています。

4. 開発者向け表示規約

このセクションは規範的でありません。

ブラウザ、JavaScriptエンジン、オフラインツールは、JavaScriptの成果物や言語構成要素を表現する共通の方法を持っています。たとえば、JavaScriptソースの位置はスタックトレースやエラーメッセージで表示され、テキストファイル中の行・列番号などは10進表記が使われます。関数名や変数名はソースからそのまま持ってきます。よって(たとえ実装依存のスタックトレース文字列の詳細な形式が異なっても)場所はわかりやすく、ブラウザ間で共通です。

WebAssembly構成要素に対しても同様の共通表記を提供するために、以下の規約を採用します。

WebAssemblyの場所(ロケーション)はバイナリ中の特定命令への参照で、ブラウザやエンジンが同様の文脈(JavaScriptのソース位置表示など)で表示できます。形式は以下です:

${url}:wasm-function[${funcIndex}]:${pcOffset}

各要素は:

注記:

Exported Function インスタンスの"name"プロパティはJS APIで定義されていますが、呼び出し階層(コールスタック)やスタックトレースなど他の文脈でも合成された関数名も表示されます。 WebAssemblyモジュールにnameセクション がある場合、関数名の合成は以下の通りに行います:

本仕様はスタックフレーム表現などの文字列全体の書式を規定しません;これにより、既存のJavaScript用実装(およびそれを参照する既存コード)を変えずに、WebAssemblyフレームだけをJavaScriptと一貫した形式で出力できます。

5. メディアタイプ登録

メディアタイプapplication/wasmはIANAメディアタイプデータベース[IANA-MEDIA-TYPES]に登録されており、以下の登録テンプレートが存在します:

application/wasm

タイプ名:
application
サブタイプ名:
wasm
必須パラメーター:
なし
オプションパラメーター:
なし
エンコーディングの考慮事項:
バイナリ
セキュリティ上の考慮点:

WebAssemblyは標準化され、安全かつ移植可能な低レベルコード形式です。WebAssemblyコードの実行にあたるセキュリティ上の考慮点は https://www.w3.org/TR/wasm-core/#security-considerations に記載されています。

WebAssemblyフォーマット自体は完全性やプライバシー保護を持ちません。必要な場合は外部的に保護(例: HTTPS使用)してください。

相互運用性の考慮点:
WebAssemblyコア適合性参照
https://www.w3.org/TR/wasm-core/#conformance
公開仕様:
https://www.w3.org/TR/wasm-core-1/ https://www.w3.org/TR/wasm-js-api-1/ https://www.w3.org/TR/wasm-web-api-1/
用途:
application/wasmメディアタイプは、WebAssemblyファイルをHTTP経由で配信してブラウザで実行する場合などを想定しています。また、安全性と移植性を活用したWebAssemblyランタイムでも利用されています。
フラグメント識別子に関する考慮点:
なし
使用上の制限:
なし
暫定登録:
N/A
追加情報:
このタイプの非推奨エイリアス名:
なし
マジックナンバー:
0x00 0x61 0x73 0x6D
ファイル拡張子:
.wasm
Macintosh ファイルタイプコード:
なし
オブジェクト識別子またはOID:
なし
意図される用途:
共通
その他情報・コメント:
共通
連絡先:
担当者名:
Eric Prud’hommeaux
メールアドレス:
eric@w3.org
著者/変更管理者:
W3C

6. セキュリティおよびプライバシーに関する考慮事項

このセクションは規範的でありません。

WebAssembly はJS API仕様で記述された JavaScript API を通じてのみ周囲の環境へアクセスできます。 したがって、WebAssembly が Web サイトやその他の第三者に対してJavaScript で取得・公開・処理できる以上の個人情報や機微情報、その他の情報を収集・公開することはありません。 WebAssembly のメモリは周囲の JavaScript 環境内にあるオブジェクトと同じライフタイムを持ち、(JavaScript 側にコピーして既存のシリアライズ API を利用した場合を除き)永続化・シリアライズはされません。 基盤となるプラットフォームやハードウェア、他のデバイス、ユーザーエージェントのネイティブ UI へのアクセスも提供されません。

WebAssembly は追加のプログラム実行機構であり、JavaScript が実行できる場所ならどこでも実行できます。 したがって、脅威モデルは基本的に JavaScript コードと同じであり、配信上の考慮事項(例:WebAssembly コードもネットワーク攻撃者から守るべき)、ポリシー上の考慮事項(例:同一生成元ポリシーや Content Security Policy によるロード/実行制限)も同様です。

7. 変更履歴

このセクションは規範的でありません。

WebAssembly仕様 1.0 のオリジナルリリース以降、拡張のための多くの提案が統合されてきました。 以下のセクションではこれまでの変更点の概要を示します。

7.1. リリース2.0

メディアタイプ登録完了

application/wasm メディアタイプの登録が正常に完了しました。

適合性

文書の規約

適合性要件は、説明的な記述と RFC 2119 の用語の組み合わせで示されます。 この文書の規範部分に現れる “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” といったキーワードは RFC 2119 の定義通りに解釈してください。 ただし、可読性のため本仕様ではこれらの語はすべて大文字にはなりません。

この仕様書の本文は、明示的に非規範とされた部分、例、注記を除き、すべて規範的です。[RFC2119]

本仕様における例は「例えば」などの言葉で導入されるか、class="example" のように規範的な本文から区別されます。

これは情報提供目的の例です。

情報提供的な注記は「注」で始まり、class="note"により規範的本文から区別されます。

注:これは情報目的の注記です。

適合するアルゴリズム

アルゴリズムの一部として記述されている命令形(例:"strip any leading space characters" や "return false and abort these steps")は、 アルゴリズム冒頭で用いられているキーワード("must", "should", "may" など)で規定された意味として解釈してください。

アルゴリズムや具体的なステップとして記述された適合性要件は、最終的な結果が等価である限り、実装方法は自由です。 特にこの仕様で定義しているアルゴリズムは、理解しやすいことを目的としており、性能のためのものではありません。 実装者は最適化を推奨します。

索引

本仕様で定義されている用語

参照で定義されている用語

参考文献

規範的参考文献

[ECMASCRIPT]
ECMAScript Language Specification. URL: https://tc39.es/ecma262/multipage/
[FETCH]
Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard. Living Standard. URL: https://infra.spec.whatwg.org/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WASM-JS-API-2]
. Ms2ger. WebAssembly JavaScript Interface. 1 November 2025. CRD. URL: https://www.w3.org/TR/wasm-js-api-2/
[WASMJS]
WebAssembly JS Integration Specification. Draft. URL: https://webassembly.github.io/spec/js-api/
[WEBASSEMBLY]
WebAssembly Core Specification. Draft. URL: https://webassembly.github.io/spec/core/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

参考情報

[IANA-MEDIA-TYPES]
Media Types. URL: https://www.iana.org/assignments/media-types/

IDL索引

[Exposed=(Window,Worker)]
partial namespace WebAssembly {
  Promise<Module> compileStreaming(Promise<Response> source, optional WebAssemblyCompileOptions options = {});
  Promise<WebAssemblyInstantiatedSource> instantiateStreaming(
      Promise<Response> source, optional object importObject, optional WebAssemblyCompileOptions options = {});
};