最小共通のWeb API

草案、

このバージョン:
https://min-common-api.proposal.wintertc.org/
課題追跡:
GitHub
編集者:
(Cloudflare)

はじめに

ウェブブラウザ以外にも、多くのECMAScriptランタイム環境がウェブサーバーやエッジプラットフォームで使用されています。このアプローチの大きな利点は、複数のコンテキストで単一のプログラミング言語を使用できるため、専門性を減らし、サーバーとクライアントサイドでコードの再利用を可能にすることです。

ウェブブラウザで実行されているコードがECMAScriptコードの大多数を占めているため、ランタイムはウェブブラウザと同じAPIをサポートする動機付けがあります。しかし、実装すべきウェブプラットフォームAPIが定義されていない場合、こうした環境間での相互運用性が低くなってしまいます。

そのため、このEcma規格では最低限の共通Web API仕様を定義し、Webとの相互運用性のためにサーバーランタイムが実装すべきWebプラットフォームAPIのサブセットを定めています。これは標準の初版であり、2025年スナップショットに対応しています。ウェブプラットフォームやウェブサーバーランタイムが発展するにつれ、委員会は年次発行を目指します。

本Ecma規格はテクニカルコミッティ55によって開発され、2025年12月の総会で採択されました。

ALTERNATIVE COPYRIGHT NOTICE AND COPYRIGHT LICENSE

© 2025 Ecma International

By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.

Permission under Ecma’s copyright to copy, modify, prepare derivative works of, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications:

(i) The full text of this COPYRIGHT NOTICE AND COPYRIGHT LICENSE in a location viewable to users of the redistributed or derivative work.

(ii) Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the Ecma alternative copyright notice should be included.

(iii) Notice of any changes or modifications, through a copyright statement on the document such as “This document includes material copied from or derived from [title and URL of the Ecma document]. Copyright © Ecma International.”

Disclaimers

THIS WORK IS PROVIDED “AS IS,” AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.

COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT.

The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders.

1. 対象範囲

本標準は、W3CおよびWHATWGのウェブプラットフォーム標準で定義されたAPIの中から厳選されたサブセットである2025年スナップショットの最小共通Web APIを定義します。これは、ECMAScriptを基盤としたブラウザおよびウェブサーバー実行環境に共通する最小限の機能セットを定めることを目的としています。

本標準の主な対象は、ウェブプラットフォームとの相互運用性を求めるウェブサーバー実行環境です。ただし、ここで記載されたAPIセットは、たとえ主目的がウェブサーバーでなくとも、ウェブとの相互運用性を目指す任意のECMAScriptベースの実行環境によって実装される可能性があります。

2. 適合性

この規格に準拠した実装は、本仕様で一覧されたインターフェイスおよびプロパティを、対応するW3CまたはWHATWG標準における定義に従って提供しなければなりません。また、準拠実装はECMA-262にも適合しなければなりません。

各ランタイムは、任意のWebプラットフォームAPIに対するランタイム固有の拡張を実装することができます。これらの拡張は、その利用がいかなるWebプラットフォームAPIの規範的な機能と矛盾したり、不適合を生じさせたりしないように定義しなければなりません。既存APIの動作を変更せずともAPIの表面を拡張することは、ランタイム間での相互運用性やコードの移植性を低下させる可能性があるため、避けるべきです。

ランタイムは、本規格で示されているもの以外のWebプラットフォームAPIも実装することができます。

>

注: 例えば、Performance API は、[HR-TIME] 仕様で定義されている内容を超える追加のメソッドやプロパティによって拡張される場合があります。例えば、[PERFORMANCE-TIMELINE][USER-TIMING] 仕様で定義されているものなどです。

3. 規定参照

以下の文書は、本書中で参照されており、その一部または全部が本書の要求事項となります。日付付き参照については、記載された版のみが適用されます。日付なし参照については、参照文書の最新版(改訂を含む)が適用されます。

参考文献

規定参考文献

[COMPRESSION]
Adam Rice. Compression Standard. Living Standard. URL: https://compression.spec.whatwg.org/
[CONSOLE]
Dominic Farolino; Robert Kowalski; Terin Stock. Console Standard. Living Standard. URL: https://console.spec.whatwg.org/
[DOM]
Anne van Kesteren. DOM Standard. Living Standard. URL: https://dom.spec.whatwg.org/
[ECMASCRIPT]
ECMAScript Language Specification. URL: https://tc39.es/ecma262/multipage/
[ENCODING]
Anne van Kesteren. Encoding Standard. Living Standard. URL: https://encoding.spec.whatwg.org/
[FETCH]
Anne van Kesteren. Fetch Standard. Living Standard. URL: https://fetch.spec.whatwg.org/
[FILEAPI]
Marijn Kruisselbrink. File API. URL: https://w3c.github.io/FileAPI/
[HR-TIME]
Yoav Weiss. High Resolution Time. URL: https://w3c.github.io/hr-time/
[HTML]
Anne van Kesteren; et al. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[RFC7231]
R. Fielding, Ed.; M. Nottingham, Ed.; J. Reschke, Ed.. HTTP Semantics. June 2022. Internet Standard. URL: https://httpwg.org/specs/rfc9110.html
[STREAMS]
Adam Rice; et al. Streams Standard. Living Standard. URL: https://streams.spec.whatwg.org/
[URL]
Anne van Kesteren. URL Standard. Living Standard. URL: https://url.spec.whatwg.org/
[URLPATTERN]
Ben Kelly; Jeremy Roman; 宍戸俊哉 (Shunya Shishido). URL Pattern Standard. Living Standard. URL: https://urlpattern.spec.whatwg.org/
[WASM-JS-API-2]
. Ms2ger. WebAssembly JavaScript Interface. URL: https://webassembly.github.io/spec/js-api/
[WASM-WEB-API-2]
. Ms2ger. WebAssembly Web API. URL: https://webassembly.github.io/spec/web-api/
[WEBCRYPTO]
Daniel Huigens. Web Cryptography Level 2. URL: https://w3c.github.io/webcrypto/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/
[XHR]
Anne van Kesteren. XMLHttpRequest Standard. Living Standard. URL: https://xhr.spec.whatwg.org/

参考参考文献

[PERFORMANCE-TIMELINE]
Nicolas Pena Moreno. Performance Timeline. URL: https://w3c.github.io/performance-timeline/
[USER-TIMING]
Nicolas Pena Moreno. User Timing Level 3. URL: https://w3c.github.io/user-timing/

4. 用語定義

本ドキュメントの目的のために、ECMA-262、圧縮標準、コンソール標準、DOM標準、エンコーディング標準、フェッチ標準、ファイルAPI、高解像度タイム、HTML標準、ストリーム標準、URL標準、URLパターン標準、WebAssembly JavaScriptインターフェース、WebAssembly Web API、W3C Web暗号レベル2、および以下で与えられる用語と定義が適用されます。外部で定義された用語は付属書Aで出典にマッピングされています。

4.1. Web プラットフォーム

W3CやWHATWGなどの組織によって定義された技術標準の組み合わせで、Webブラウザによって実装されているもの

4.2. Web相互運用ランタイム

本標準を実装するECMAScriptベースのランタイム環境

注記: WebブラウザはWeb相互運用ランタイムです。
「Web相互運用ランタイム」という用語は意図的に広義に使われています。本標準の主な焦点はWebサーバランタイムです。

5. 共通APIインデックス

本標準に準拠するすべてのWeb相互運用ランタイムは、以下の各Web プラットフォームAPIを実装しなければなりません。これらは§ 6 グローバルスコープで指定されている場合を除き、規範的要件に従って実装する必要があります。技術的または構造的な理由により、どのランタイム環境でも規範的要件から逸脱する必要がある場合は、明確なドキュメントを提供しなければなりません。ドキュメントには逸脱の説明と影響の両方を含める必要があります。

注記: 例えば、Webサーバランタイムにはオリジンの概念がないため、[FETCH]のネットワークリクエストにOriginヘッダーを付与する要求を満たすことができません。

5.1. 共通インターフェース

以下のすべてのインターフェースは、globalThisを通じてアクセス可能なグローバルオブジェクト上で公開されなければなりません。

[DOM]で定義されているインターフェース:

[HTML]で定義されているインターフェース:

[WEBIDL]で定義されているインターフェース:

[FETCH]で定義されているインターフェース:

[XHR]で定義されているインターフェース:

[FILEAPI]で定義されているインターフェース:

[COMPRESSION]で定義されているインターフェース:

[STREAMS]で定義されているインターフェース:

[ENCODING]で定義されているインターフェース:

[URL]で定義されているインターフェース:

[URLPATTERN]で定義されているインターフェース:

[WEBCRYPTO]で定義されているインターフェース:

[HR-TIME]で定義されているインターフェース:

[WASM-JS-API-2]で定義されているインターフェース:

5.2. 共通メソッドおよびプロパティ

以下のすべてのメソッドおよびプロパティは、§ 6 グローバルスコープで指定されている場合を除き、globalThisを通じてアクセス可能なグローバルオブジェクト上で公開されなければなりません。

[HTML]で定義されているメソッドおよびプロパティ:

[FETCH]で定義されているメソッドおよびプロパティ:

[CONSOLE]で定義されているメソッドおよびプロパティ:

[WEBCRYPTO]で定義されているメソッドおよびプロパティ:

[HR-TIME]で定義されているメソッドおよびプロパティ:

[WASM-JS-API-2]で定義されているメソッドおよびプロパティ:

5.3. Webワーカー

本標準はweb workersのサポートをランタイムに要求しません。 ただし、グローバルスコープがWorkerGlobalScope に対応する場合(§ 6 グローバルスコープを参照)、グローバルオブジェクトが以下のイベントハンドラーおよび属性も[HTML]で定義されている通りに公開しなければなりません(§ 6 グローバルスコープで指定されている場合を除く)。

6. グローバルスコープ

グローバルスコープ(globalThis)の正確な型はランタイムによって異なります。多くのWebプラットフォームAPIは、WindowWorkerGlobalScope などの型を明確に公開しているWebブラウザ環境を前提に定義されています。適合性を簡素化するために、本標準ではこのようなグローバルスコープインターフェースのサポートを要求しませんが、関連するランタイムの各グローバルスコープはWeb仕様で定義されたグローバルスコープインターフェースへマッピングしてもよいです。本標準で要求するすべてのインターフェース、メソッド、プロパティは、Web仕様でグローバルスコープインターフェースに公開することが要求されたものであれば、当該ランタイムのすべての対応するグローバルスコープ(例:globalThis.cryptoglobalThis.ReadableStreamなど)で公開されなければなりません。

注記: ランタイムのメイングローバルスコープはWindowに、 web workerのグローバルスコープはWorkerGlobalScopeに それぞれマッピングされるべきです。特定のグローバルインターフェースにマッピングされていないグローバルスコープは、[Exposed=*] として定義されているWeb APIしか実装できません。

多くのランタイムでは、新しいグローバルスコーププロパティを追加すると、既存のアプリケーションコードとの衝突で破壊的変更を引き起こすことがあります。多くのWebプラットフォームAPIはthe readonly属性をつかってグローバルプロパティを定義します。破壊的な変更を回避するため、本標準準拠のランタイムはグローバルスコープに追加されるプロパティについてreadonly属性を省略してもよいです。これにより、それらのプロパティが既存アプリケーションコードと競合する場合、利用者が削除または上書きできるようになります。

グローバルオブジェクトがWindow またはWorkerGlobalScope のグローバルインターフェースに対応している場合、それはEventTarget のインスタンスであるべきです。Web相互運用ランタイムは例外報告アルゴリズムおよび JavaScriptの HostPromiseRejectionTracker ホストフックを[HTML]の定義どおりに実装すべきです。これにはグローバルオブジェクト上でerrorunhandledrejectionrejectionhandled イベントの発火も含まれます。

レガシー上の理由でそのようなグローバルオブジェクトをEventTarget のインスタンスにできない場合でも、該当イベントはグローバルスコープで利用可能な適切な別の仕組みで通知されなければなりません。この仕組みは、グローバルオブジェクトがEventTarget である場合の該当イベントインターフェースが提供する情報と同等の情報を必ず提供する必要があります。このようなランタイムはonerroronunhandledrejectiononrejectionhandled のグローバルプロパティをサポートしません。また、そのようなランタイムはErrorEventおよび PromiseRejectionEvent インターフェースも実装する必要はありません。

注記: 例えば、Node.jsではグローバルオブジェクトがEventTargetを実装しておらず、該当イベントはglobalThis.processオブジェクト上でuncaughtExceptionunhandledRejectionrejectionHandledという名前でそれぞれ通知されます。

7. デフォルトUser-Agent値の要件

デフォルト`User-Agent`値は、アプリケーションコードが自身が動作しているランタイムを確実に識別できるよう提供されます。この値はUser-Agent の構成に準拠した文字列でなければなりません。[RFC7231]:

User-Agent      = product *( RWS ( product / comment ) )
product         = token ["/" product-version]
product-version = token

デフォルトの `User-Agent` 値 は、アプリケーションコードから単一で完全、不透明かつ非構造化の値として扱うべきです。値は任意の product-version を除いた単一の product トークンに限定することが推奨されます。値に comment コンポーネントを含めるべきではありません。

注意: 例えば、navigator.userAgentには'MyRuntime'などを設定できます。

索引

本仕様で定義された用語

他参照で定義された用語

Ecma International

Rue du Rhone 114

CH-1204 Geneva

Tel: +41 22 849 6000

Fax: +41 22 849 6001

Web: https://ecma-international.org/

© 2025 Ecma International

This draft document may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published, and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this section are included on all such copies and derivative works. However, this document itself may not be modified in any way, including by removing the copyright notice or references to Ecma International, except as needed for the purpose of developing any document or deliverable produced by Ecma International.

This disclaimer is valid only prior to final version of this document. After approval all rights on the standard are reserved by Ecma International.

The limited permissions are granted through the standardization phase and will not be revoked by Ecma International or its successors or assigns during this time.

This document and the information contained herein is provided on an "AS IS" basis and ECMA INTERNATIONAL DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT INFRINGE ANY OWNERSHIP RIGHTS OR ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

Software License

All Software contained in this document ("Software") is protected by copyright and is being made available under the "BSD License", included below. This Software may be subject to third party rights (rights from parties other than Ecma International), including patent rights, and no licenses under such third party rights are granted under this license even if the third party concerned is a member of Ecma International. SEE THE ECMA CODE OF CONDUCT IN PATENT MATTERS AVAILABLE AT https://ecma-international.org/memento/codeofconduct.htm FOR INFORMATION REGARDING THE LICENSING OF PATENT CLAIMS THAT ARE REQUIRED TO IMPLEMENT ECMA INTERNATIONAL STANDARDS.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  3. Neither the name of the authors nor Ecma International may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE ECMA INTERNATIONAL "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ECMA INTERNATIONAL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.