Slide 1

Slide 1 text

Webの地図 yosuke_furukawa 2026/09/12 @ FEC Fukuoka

Slide 2

Slide 2 text

X: @yosuke_furukawa GitHub: yosuke-furukawa

Slide 3

Slide 3 text

今回の講演の背景 とある年末の忘年会での一コマ • なんで fetch って ECMAScript に入ってないのかなって思ったんですよね • たしかに・・・? • 「fetch は JavaScript という言語の枠の中というよりもWebブラウザという プラットフォーム側の機能であり、仕様を管轄している場所が違うから」と いうのが答えだが、そもそもそこから曖昧な場合はなんでだろう?ってなる

Slide 4

Slide 4 text

今回の講演の背景 とある年末の忘年会での一コマ • fetch は WHATWG が仕様作成元 • Date / Math といったライブラリはECMAScriptの内部で規定、つまりECMA が仕様作成元 • ネットワーク経由のライブラリだけなぜこっちなんだという問いをちゃんと 答えたいが、Webの「地形」がわかっていないと理解が難しそうだと思った

Slide 5

Slide 5 text

今回の講演の背景 そもそも Web アプリケーションを1つ作る場合複数の仕様にまたがる • HTML => WHATWG • CSS => W3C • JavaScript => ECMAScript • HTTP => IETF • URL => IETF • 他の言語とかサーバサイドだと1つの仕様でまとまっていることが多い

Slide 6

Slide 6 text

Webの地形 • Web開発自身は地形がどうなってるかなんて意識しなくても開発ができる • これ自体がWebの大きな特徴、別に仕様がどこで定義されて、どうなってるとかは特 段意識しなくてもいい。 • 既に色んな目印や看板が立ってるのでやりたいことをすぐできる。MDNなんかは街中 にある地図が書かれた看板のようなイメージ • しかも今はAIという自動運転で連れてってくれる仕組みまである • 全体の地図なんて知ってても役に立つシーンは少ないが、 fetch が ECMAScript に存 在しない理由はわかる

Slide 7

Slide 7 text

というわけで、Webという大きな概念を 1つの世界地図のようなものと見立ててみようと思う HTML CSS WHATWG W3C JavaScript HTTP / URL ECMA IETF powered by AI

Slide 8

Slide 8 text

大陸が移動しながら今の地球が形作られたように、今 のWebがどうして形作られたのかを語る回にします

Slide 9

Slide 9 text

Before Web

Slide 10

Slide 10 text

Before Web • 論文や資料には参考となる資料(リファレンス)があり、各々のフォーマッ トでファイルとして保存され、各々の方法で共有されていた • それぞれの通信方式で通信し、それぞれのビューワーで閲覧し、、、となる と大変なので何らかの方法で共通の通信方式で共通のビューワーで見れない かという考えがあった • これ自身は誰にでも思いつくが、決定打となるものはなかった • インターネット上に共通の通信方式で共通のビューワーが求められていた

Slide 11

Slide 11 text

Before Web • 1990年、最初のWebブラウザが Tim Berners Lee 氏によって誕生する • いわゆるこれが World Wide Web プロジェクトの始まり

Slide 12

Slide 12 text

Before Web • 最初のブラウザが搭載していたのは • 共通のファイルフォーマット => HTML • 共通の通信方式 => HTTP • 共通のアクセス先の表現 => URL • 特に仕様団体という枠組みもなく、大陸で言うと1つしかない。 • というより、まだ仕様化されてない

Slide 13

Slide 13 text

1990年代のWebブラウザ

Slide 14

Slide 14 text

1990年代のWebブラウザ • 最初の World Wide Web プロジェクト発足から大学などの研究機関を中心に ブラウザの開発が行われる • さらに 1993年頃、NCSA Mosaic Browser がイリノイ大学で開発される • この頃に時を同じくして企業が参入し始める

Slide 15

Slide 15 text

1990年代のWebブラウザ • Mosaic ブラウザが画像とテキストを同じビューワーで見れるようにした

Slide 16

Slide 16 text

1990年代のWebブラウザ • このあたりから企業がどんどん参画してくる、 商用のブラウザで Netscape Navigator, IBM Web Explorer, Mosaicのライセンスを企業が買うなどで商用 化の道ができていく • Microsoft が Internet Explorer を開発し始めるのもこの頃 • 商用化による競争は発展でもあるが、独占は産業そのものの衰退でもある

Slide 17

Slide 17 text

1990年代のWebブラウザ • 一社の企業にブラウザが独占されてしまうと産業の発展にならないことは懸 念されていた • 1994年頃を境に仕様化が進み出す • IETF を中心に HTML の仕様ドラフトを発行、後に失効(なんと最初はIETF) • 今も昔も仕様は「独占されないように強者を縛る鎖」みたいなものだった • 今風に言うと「ハーネス」か?(ハンターハンターっぽい)

Slide 18

Slide 18 text

1990年代のWebブラウザ • World Wide Web プロジェクト発足から5年後、 IETF を中心にHTML, HTTP, URL が仕様化される • HTML 2.0 RFC 1866 1995年 • HTTP 1.0 RFC 1945 1996年 • URL RFC 1738 1994年 HTML / HTTP / URL IETF powered by AI

Slide 19

Slide 19 text

1990年代のWebブラウザ • Mosaic がマルチメディアに対応してから文書はどんどん装飾表現が出てくる • 画像を埋め込みたい、フォントを変えたい、カラフルにしたい • 文書と装飾表現は分離しようとする動きが起きる • HTMLの中だけで font 要素で表現しようとしても限界がある • そもそも文書の構造と装飾表現は分離されるべきという考え方はHTMLに限ら ない、論文を書くTeXとかも全部そういう概念に基づいている

Slide 20

Slide 20 text

1990年代のWebブラウザ • ホーコンウィウムリー氏がCHSS (Cascading HTML StyleSheet) というCSS の前身を開発 • 1994年からCSSも仕様策定の流れが起きる • 実際作られたのは 1996年で、この時の仕様化団体がなんと W3C である

Slide 21

Slide 21 text

1990年代のWebブラウザ W3C • もともとIETFベースで仕様策定されていたが、ウェブの進化を加速させるため にティム・バーナーズ・リーがスピンオフしてWorld Wide Web Consortium (W3C) として団体を発足 • もともと議論が進んでいたものはそのまま IETF として出したが、W3Cという 別な団体で HTML / CSS の協議を進めようとなった。

Slide 22

Slide 22 text

1990年代のWebブラウザ W3C参入 • CSS 1.0 1996年 W3C • HTML 3.2 1997年 W3C • HTTP/URL 1.0 IETF • ここで大陸が2つに割れる HTML / CSS HTTP / URL W3C IETF powered by AI

Slide 23

Slide 23 text

1990年代のWebブラウザ JavaScript 参戦!!!! • Netscape 社は商用ブラウザを作る側だったが、より多くの表現を求めていた • プログラミング言語が動けばよりダイナミックに文書の表現ができる • 当時はやってる Java みたいな言語が動くブラウザってどうかなー? • 作って同梱させるぞ!!! • ブレンダン・アイク氏を登用し、 JavaScript を開発(1週間) powered by AI

Slide 24

Slide 24 text

1990年代のWebブラウザ JavaScript 参戦!!!! • 差別化と混乱・・・ • 対抗して、 Microsoft は IE に JScript を同梱。 • APIは違うが文法は似てるものができる。 • 圧倒的なシェアを誇っている IE に牛耳らせるわけにはいかない • 当時は既に Windows 95 もあり、 MS は強者の立場 • 「「「強者を縛る鎖(ハーネス)!!!」」」

Slide 25

Slide 25 text

1990年代のWebブラウザ JavaScript 参戦!!!! • 仕様を決めることで縛る鎖を発動したい!!!! • が、、、 W3C におもむいた所、断られる • 「うちら宣言的なフォーマットだから、手続き的なプログラミング言語くん は他のところでやってよ」 • W3Cに断られたことで一同は泣く泣く別団体へ・・・

Slide 26

Slide 26 text

1990年代のWebブラウザ JavaScript 参戦!!!! • ECMAという仕様団体に参加 • ECMAで仕様を決めて国際標準として展開 (1997年) • 仕様上の呼称はECMAScript 、 一般呼称は JavaScript として晴れて 標準化の仲間入りを果たす HTML / CSS HTTP/ URL W3C IETF JavaScript ECMA powered by AI

Slide 27

Slide 27 text

1990年代のWebブラウザ HTTP にも変化が • 余り出番のないHTTPだが、よりパフォーマンス改善によって少しずつ新しく なっていく HTTP/1.1 1997年 ただしベースはIETFのまま • 裏ではHTTPSの仕様策定もあるが、これはこれで長い話なので一旦割愛

Slide 28

Slide 28 text

2000年代の変化

Slide 29

Slide 29 text

2000年代の変化 • XHTML をティム・バーナーズ・リーが提唱 2000年 • これ自身は実は一週間前に発表済みなので詳しくはそちらで。 • https://speakerdeck.com/yosuke_furukawa/xhtml-ga-nokoshita-mono

Slide 30

Slide 30 text

2000年代の変化 • スライド抜粋

Slide 31

Slide 31 text

2000年代の変化 • XHTML は提唱から仕様策定まで非常に時間がかかった • 委員会をベースに標準化していたため、互換性やニーズの細かい変化に対応しきれな かった • ブラウザベンダー側がしびれを切らして W3C じゃない団体で仕様を決めようという動 きが起きる • WHATWG ができる 2004年 • その後 HTML は HTML5 として仕様になり、今は Living Standard として仕様更新さ れている 2014年

Slide 32

Slide 32 text

2000年代の変化 • HTMLの仕様はWHATWGに引き継がれた • 大陸は4つになり、分離された HTML CSS WHATWG W3C JavaScript HTTP / URL ECMA IETF

Slide 33

Slide 33 text

一旦ここまでのまとめ

Slide 34

Slide 34 text

ここまでのまとめ • 最初は文書を共有するための枠組みだった WWW Project • 大学や研究機関が開発に参入 • 企業も参入したことで大きく競争が起きる • 一社に市場を独占させないために仕様策定が行われる • 仕様は強者を縛る鎖として機能している • 最初は1つの仕様としてIETFで定義されていた

Slide 35

Slide 35 text

ここまでのまとめ • しかし、Webの進化対応によりW3Cが誕生 • 新しいユースケースの発見によりECMAが誕生 • 互換性と進化を止めない動きによりW3CとWHATWGが分離 • 今の大陸の状況になる

Slide 36

Slide 36 text

2000年代の変化(続き)

Slide 37

Slide 37 text

2000年代の変化(続き) • Webブラウザをただの文書コンテンツを提供するだけではなく、アプリケー ションを提供していく動きが活発になる • いわゆる Web 2.0 とか ajax とかでアプリケーションレイヤがどんどん進化し ていく • Gmail, Google Docs, Google Map, 各種SNS もこの頃

Slide 38

Slide 38 text

2000年代の変化(続き) • XMLHttpRequestは仕様化されたものではなく、IEの独自実装(XMLHTTP)が 始まり。そこからMozillaがXMLHttpRequestとして互換実装を行う 2000年 • そこから Google Map や Gmail などの衝撃が起きるリロードしなくても更新 される、動的なWebアプリケーションが開発、これに Ajax と命名される 2005年 • 実装から5~6年後、衝撃を与えて、W3Cで仕様化される 2007年

Slide 39

Slide 39 text

2000年代の変化(続き) • ちなみに同時期 2008年に Google Chrome リリース • 新しい強者が産声を上げる • 検索エンジン、Webアプリケーション基盤作り、ブラウザ開発とほとんどの プラットフォームを押さえた強者 • 仕様があったから混沌としたときよりも参画がしやすくなっていた。仕様は ハーネスであると言ったが、新規参画ハードルを下げるものでもある

Slide 40

Slide 40 text

2000年代の変化(続き) • XMLHttpRequestはW3C側で策定 • 後にWHATWGが生まれた時にそちら に継承 • ちょうどJavaScriptとHTMLとHTTP HTML/XMLHttpRequest CSS WHATWG W3C JavaScript HTTP / URL ECMA IETF のそれぞれの大陸をつなぐようなもの であったが、出自がW3Cだったので そのまま後継者(WHATWG)に 引き継がれた

Slide 41

Slide 41 text

このまま流れで fetch を〜〜〜〜と思ったけど

Slide 42

Slide 42 text

なんで最初から XMLHttpRequest や DOM に 境界線を引いたのかわからないと思ったので

Slide 43

Slide 43 text

脱線します

Slide 44

Slide 44 text

ちなみにDOMは???

Slide 45

Slide 45 text

ちなみにDOMは??? • DOM (Document Object Model) の歴史は深い • Netscape Navigator が JavaScript を導入した時に同時に document オブ ジェクトを導入 • Internet Explorer も同様のオブジェクトを導入 • 相互APIが若干違うため開発者はif文地獄だった • ここでも W3C が介入し、お互いの仕様を共通化、鎖を発動する

Slide 46

Slide 46 text

ちなみにDOMは??? • おや・・・・? • > Netscape Navigator が JavaScript を導入した時に同時に document オブジェ クトを導入 • この時に JavaScript も仕様決めたからそこで document オブジェクトもECMAの 仕様に入れられたような・・・? • なんでそれをしなかったんだろう・・・?(これがsakuさんの質問にストレート に回答できなかった理由) • 歴史上の経緯であることはわかったけど理由はもっと知りたい

Slide 47

Slide 47 text

ちなみにDOMは??? • そもそも JavaScript 設計時に自由に外部からオブジェクトを差し込める拡張性の高い仕様 として設計されていた • Netscape Navigator はブラウザとしては document を導入していたが、同時期に Livewire と呼ばれるサーバ上で動く JavaScript も提供していた • ちなみに Livewire は初のサーバサイドJavaScriptで、Node.jsよりも前に作られていたもの • つまり、 JavaScript は初期の設計から単体のコア機能と実行環境によって必要なオブジェ クトを外から導入できるように設計されていた • ブラウザの一機能というよりも最初からかなり野心的な試みだったことが分かる

Slide 48

Slide 48 text

ちなみにDOMは??? • なので、、、 • JavaScript はコア機能と実行環境に分かれて定義できるように設計されていた ため、ECMAScriptで仕様として定義できたのはコア機能だけだった。 • documentがECMAに入らず、入らなかったがゆえに勝手に拡張され続けられた • W3CがDOMをまとめたのもここに起因する • 似たようなものはたくさんある、consoleもsetTimeoutも後々仕様化される が、昔は仕様化されなかった穴として存在していた

Slide 49

Slide 49 text

ちなみにDOMは??? • XMLHttpRequest もそういった「仕様の穴」の1つだった • W3C/WHATWGはそういった穴を見つけて埋めていく活動もしてくれていた • 一方であくまでW3C/WHATWGが提供しているもの「ブラウザの仕様」なの で「サーバ側のAPI」の仕様は統一されていない • 最近はそこにWinterCGが仕様化団体として発足しているためブラウザ仕様と の共通化が試みられている

Slide 50

Slide 50 text

というわけで、fetchがなんでECMAじゃな かったのか???という問いに対する回答

Slide 51

Slide 51 text

fetchがなぜECMAじゃなかったのか • まず、Webの仕様は複数のプレイヤーが絡むことで複雑である • 1つの団体、1つの個人が決めてるものではない • 複数の団体で協議しながら決めている • 仕様は強者を縛るハーネスであり、参画者のハードルを下げる装置である • ECMAScriptはJavaScriptのコア機能だけを定めた仕様 • ECMAScriptの仕様はJavaScriptの設計がコア機能と実行環境を分離するデザ インから来ている

Slide 52

Slide 52 text

fetchがなぜECMAじゃなかったのか • 「実行環境として外側から注入されるオブジェクト」という扱いだったため、fetchは ECMAじゃなかった。 • 前身のXMLHttpRequestがW3Cで仕様として定義されたため、それを引き継ぐ形で WHATWGで仕様が継承 • さらにそれを引き継ぐ形で XMLHttpRequest と同じ団体が fetch を仕様として規定した • 同じく注入されるオブジェクトとして document (DOM) 、 console、 Timer(setTimeout) も同じもの • 結果としてブラウザでの仕様とその外側の実行環境側での仕様は別な定義になる

Slide 53

Slide 53 text

fetchの仕様を眺めてみると...

Slide 54

Slide 54 text

fetchの仕様 • 単なる「HTTPリクエストを送るライブラリ」ではない事がわかる • クロスオリジンだとどうなる?クッキーの扱いは?ヘッダを勝手に操作して 良い? • ブラウザ独自のセキュリティ面での配慮が随所に盛り込まれてる • fetchそのものをECMAに今更入れるのは大分違和感がある... • ブラウザの仕様を決める団体側(W3C/WHATWG)で持つ方が違和感がない

Slide 55

Slide 55 text

Unicode IEEE ISO FIDO ちなみに大陸4つって言ったけどあくまで便宜上の 話でこの他にもたくさん団体があるし、関わってる IANA/ICANN ISO/IEC MPEG + ITU-T AOMedia

Slide 56

Slide 56 text

まとめます

Slide 57

Slide 57 text

まとめ • 前半 (Webの歴史) • 新しい産業の発展と差別化と仕様化の歴史 • 強者が一人でパワープレーができないのも仕様のおかげ • 色んなプレイヤーが出てこれるのも仕様のおかげ • 一方で色んなユースケースがあるので色んな仕様がある

Slide 58

Slide 58 text

まとめ • 後半 (JavaScriptと周辺のAPI) • JavaScriptは拡張可能なことを前提とした設計であり仕様である • 結果として「色んな拡張仕様」があることで「穴」も存在する • document, fetch, console etc etc • 後から穴は埋められていく結果として fetch はECMAではない所で定義され ている

Slide 59

Slide 59 text

蛇足

Slide 60

Slide 60 text

みんなに考えてみてほしい • Webの地図として地形図がどう変わっていったかという話をした • 仕様は強者を縛る鎖であるとも話した • 本当に気になるのはこれからどうなるのか、だと思う • 強者が一社独占を作れないようにするための仕様である、一方で強者は強者であり続け られるのか • 新しい強者は生まれるのか • 戦争や隕石衝突などで大陸は変わっていくのか • ぜひ、 Ask the speaker で終わりのない話をしましょう

Slide 61

Slide 61 text

ありがとうございました