Web IDLとWeb API
《 初回公開:2023/03/05 , 最終更新:2023/11/10 》
【 目次 】
Web IDL
MDNの記事をみているとJavaScriptのデータ型とは思えないデータ型を見かける。 DOMString,Uint8Array,USVString等々。
これはWebIDLというウェブアプリケーションプログラミングインターフェイスを規定するために使われるデータ型のようで、
WebAPIが特定の言語に依存しないようにWebIDLというやや定式化された構文,抽象的な言語を使って定義されている。
以下のドキュメントを読んでも文章が抽象的で中身がちんぷんかんぷん。
とりあえず、雰囲気だけはなんとなくわかったような。
現実的にはクライアントサイドで使えるWebブラウザで動作する言語はJavaScriptしかないはずなのだが。
(IEで使えるVBSという懐かしい言語もあるにはあるがいまではほとんど使われていないし)
とりあえず、あいまいなまま適当に自分流に解釈すると。
このWeb IDLで定義されているWeb APIをJavaScriptで利用するためにはWeb IDLのデータ型をJavaScriptのデータ型にあてはめる必要がある。
DOMStringとかUSVStringはWeb IDLという架空の言語で定義されているデータ型で、JavaScriptではどちらも実態はString型を指しているのだが。
これを使う用途,局面で(コンテキスト - 文脈によって)DOMStringとかUSVStringとか言い換えているようだ。
DOMString とは、「DOM における文字列」 という程度の意味の名称です。 「DOM」とついていることにさしたる意味はありません。
スカラー値列scalar value string (USVString) は、Unicodeスカラー値の文字列です。
[70]ほとんど「Unicode文字列」という意味に近いですが、 「文字」の語義を巡っては相当の混乱があります。
型付き配列もWeb IDLで定義されている。
Web API
そもそもWeb APIとは何なのか?
広義の意味ではSOAPやREST等のAPIも含まれるが。
JavaScriptの世界では主にクライアントサイド Web APIとかブラウザー APIを指しているようだ。
まとめ
ここで、最近 お友達になったChatGPT先生に「Web IDL」と「Web API」についてまとめてもらった。
Web IDLとWeb APIは、Web開発において重要な概念です。
Web IDLは、Web上のAPIの仕様を定義するための言語仕様です。IDLは、Interface Definition Languageの略で、Web IDLはWeb上のインタフェースを定義するための仕様のことです。Web IDLには、WebブラウザのJavaScriptエンジンや、JavaScriptを介してアクセスできるWeb APIなどが含まれます。Web IDLは、プログラマーにとって役立つドキュメントを提供するために使用されます。
Web APIは、WebブラウザやJavaScriptエンジンが提供するAPIのことです。これらのAPIは、ウェブアプリケーションを構築するために使用されます。Web APIには、Document Object Model (DOM) API、Canvas API、Web Audio API、Web Socket APIなど、多数の種類があります。
Web IDLとWeb APIは、Web開発において密接に関連しています。Web APIは、Web IDLに基づいて定義されます。Web IDLは、Web APIのプログラム上のインタフェースを提供し、Web APIを使用する開発者がそれらを適切に使用できるようにします。
Web IDLとWeb APIの正確な知識は、Web開発において非常に役立ちます。それらを理解することで、Web APIをより効果的に使用し、Webアプリケーションをより効率的に開発することができます。
追記 - インターフェース
MDNのJavaScriptのドキュメントを呼んでいるとインターフェイスというキーワードがよく出てくる。
このインターフェイスというキーワードはいったい何を指すのだろうか?
JavaやC#ではソースコード内にinterfaceというキーワードが使えて、これは多重継承の代替えとなる仕組みとして備わっている。
interface Person {
name: string;
greet(): void;
}
ところがJavaScriptではこのようなinterfaceというキーワードが使えない。
MDNのJavaScriptのドキュメントのインターフェイスというキーワードは多分、WebIDLのinterfaceを指しているものと思われる(TypeScriptのinterfaceを指すという説もあるが)。
ChartGPTに説明してもらうと
JavaScript自体にはinterfaceというキーワードは存在しませんが、MDNのJavaScriptのドキュメントで"インターフェース"という用語が使われる場合、通常はオブジェクトやクラスの構造や機能を記述した抽象的な定義を指すことがあります。この用語は、コード内でオブジェクトやクラスが特定のプロパティやメソッドを持つべきであることを表現するために使用されます。この "インターフェース" の意味は、クラスの実装の一部ではなく、クラスやオブジェクトの振る舞いや構造を文書化するために使われます。実際の実装は、このインターフェースを満たすようにコーディングされます。JavaScriptには言語レベルでインターフェースのサポートがないため、このようなインターフェースを実現するためには通常、オブジェクトやクラスの設計や命名規則に従う必要があります。
要するに、"インターフェース"という用語は、オブジェクトやクラスが特定の機能やプロパティを備えるべきであるという要件を文書化し、コード内でそれに従った設計を行うために使用されます。この文脈では、クラスそのものを指すのではなく、クラスが従うべき要件を指します。
更に
はい、MDNのJavaScriptのドキュメントでの "インターフェイス" というキーワードは、Web IDL(Web Interface Definition Language)の interface に関連していることが一般的です。Web IDLは、ウェブブラウザとJavaScriptエンジン間での相互運用性を確保するために使用される言語で、ブラウザのAPI仕様を記述するのに使われます。Web IDLの interface は、JavaScriptのオブジェクトやAPIのメソッドやプロパティの抽象的な定義を提供します。
Web IDLに基づいて、MDNのJavaScriptのドキュメントでは interface キーワードを使用して、ブラウザのAPIや他のJavaScript関連の仕様の一部を説明します。これらの "インターフェース" の定義に従って、JavaScriptでのオブジェクトやクラスの振る舞いを理解し、それに従ったコーディングを行うことが一般的です。
要するに、JavaScriptの "インターフェース" という用語は、特にWeb開発の文脈において、Web IDLの interface に関連しています。ただし、この用語はJavaScriptの一般的な言語機能としてではなく、API仕様として使用されることが多いことに注意してください。
つまりある機能(例えば反復処理プロトコル等)の為に、オブジェクトが備えなけらばならないプロパティやメソッドをインターフェイスとして規定しているようだ。
当サイトでもこのような意味でJavaScriptにおける "インターフェイス"という言葉を使っていくつもりである。