Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Webの地図

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 Webの地図

FEC Fukuoka で発表したWebの地図についての話です

Avatar for Yosuke Furukawa

Yosuke Furukawa PRO

September 12, 2026

More Decks by Yosuke Furukawa

Other Decks in Programming

Transcript

  1. 今回の講演の背景 とある年末の忘年会での一コマ • なんで fetch って ECMAScript に入ってないのかなって思ったんですよね • たしかに・・・?

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

    Math といったライブラリはECMAScriptの内部で規定、つまりECMA が仕様作成元 • ネットワーク経由のライブラリだけなぜこっちなんだという問いをちゃんと 答えたいが、Webの「地形」がわかっていないと理解が難しそうだと思った
  3. 今回の講演の背景 そもそも Web アプリケーションを1つ作る場合複数の仕様にまたがる • HTML => WHATWG • CSS

    => W3C • JavaScript => ECMAScript • HTTP => IETF • URL => IETF • 他の言語とかサーバサイドだと1つの仕様でまとまっていることが多い
  4. Before Web • 最初のブラウザが搭載していたのは • 共通のファイルフォーマット => HTML • 共通の通信方式

    => HTTP • 共通のアクセス先の表現 => URL • 特に仕様団体という枠組みもなく、大陸で言うと1つしかない。 • というより、まだ仕様化されてない
  5. 1990年代のWebブラウザ • 最初の World Wide Web プロジェクト発足から大学などの研究機関を中心に ブラウザの開発が行われる • さらに

    1993年頃、NCSA Mosaic Browser がイリノイ大学で開発される • この頃に時を同じくして企業が参入し始める
  6. 1990年代のWebブラウザ • このあたりから企業がどんどん参画してくる、 商用のブラウザで Netscape Navigator, IBM Web Explorer, Mosaicのライセンスを企業が買うなどで商用

    化の道ができていく • Microsoft が Internet Explorer を開発し始めるのもこの頃 • 商用化による競争は発展でもあるが、独占は産業そのものの衰退でもある
  7. 1990年代のWebブラウザ • 一社の企業にブラウザが独占されてしまうと産業の発展にならないことは懸 念されていた • 1994年頃を境に仕様化が進み出す • IETF を中心に HTML

    の仕様ドラフトを発行、後に失効(なんと最初はIETF) • 今も昔も仕様は「独占されないように強者を縛る鎖」みたいなものだった • 今風に言うと「ハーネス」か?(ハンターハンターっぽい)
  8. 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
  9. 1990年代のWebブラウザ • Mosaic がマルチメディアに対応してから文書はどんどん装飾表現が出てくる • 画像を埋め込みたい、フォントを変えたい、カラフルにしたい • 文書と装飾表現は分離しようとする動きが起きる • HTMLの中だけで

    font 要素で表現しようとしても限界がある • そもそも文書の構造と装飾表現は分離されるべきという考え方はHTMLに限ら ない、論文を書くTeXとかも全部そういう概念に基づいている
  10. 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
  11. 1990年代のWebブラウザ JavaScript 参戦!!!! • Netscape 社は商用ブラウザを作る側だったが、より多くの表現を求めていた • プログラミング言語が動けばよりダイナミックに文書の表現ができる • 当時はやってる

    Java みたいな言語が動くブラウザってどうかなー? • 作って同梱させるぞ!!! • ブレンダン・アイク氏を登用し、 JavaScript を開発(1週間) powered by AI
  12. 1990年代のWebブラウザ JavaScript 参戦!!!! • 差別化と混乱・・・ • 対抗して、 Microsoft は IE

    に JScript を同梱。 • APIは違うが文法は似てるものができる。 • 圧倒的なシェアを誇っている IE に牛耳らせるわけにはいかない • 当時は既に Windows 95 もあり、 MS は強者の立場 • 「「「強者を縛る鎖(ハーネス)!!!」」」
  13. 1990年代のWebブラウザ JavaScript 参戦!!!! • 仕様を決めることで縛る鎖を発動したい!!!! • が、、、 W3C におもむいた所、断られる •

    「うちら宣言的なフォーマットだから、手続き的なプログラミング言語くん は他のところでやってよ」 • W3Cに断られたことで一同は泣く泣く別団体へ・・・
  14. 1990年代のWebブラウザ JavaScript 参戦!!!! • ECMAという仕様団体に参加 • ECMAで仕様を決めて国際標準として展開 (1997年) • 仕様上の呼称はECMAScript

    、 一般呼称は JavaScript として晴れて 標準化の仲間入りを果たす HTML / CSS HTTP/ URL W3C IETF JavaScript ECMA powered by AI
  15. 2000年代の変化 • XHTML は提唱から仕様策定まで非常に時間がかかった • 委員会をベースに標準化していたため、互換性やニーズの細かい変化に対応しきれな かった • ブラウザベンダー側がしびれを切らして W3C

    じゃない団体で仕様を決めようという動 きが起きる • WHATWG ができる 2004年 • その後 HTML は HTML5 として仕様になり、今は Living Standard として仕様更新さ れている 2014年
  16. ここまでのまとめ • 最初は文書を共有するための枠組みだった WWW Project • 大学や研究機関が開発に参入 • 企業も参入したことで大きく競争が起きる •

    一社に市場を独占させないために仕様策定が行われる • 仕様は強者を縛る鎖として機能している • 最初は1つの仕様としてIETFで定義されていた
  17. 2000年代の変化(続き) • XMLHttpRequestは仕様化されたものではなく、IEの独自実装(XMLHTTP)が 始まり。そこからMozillaがXMLHttpRequestとして互換実装を行う 2000年 • そこから Google Map や

    Gmail などの衝撃が起きるリロードしなくても更新 される、動的なWebアプリケーションが開発、これに Ajax と命名される 2005年 • 実装から5~6年後、衝撃を与えて、W3Cで仕様化される 2007年
  18. 2000年代の変化(続き) • ちなみに同時期 2008年に Google Chrome リリース • 新しい強者が産声を上げる •

    検索エンジン、Webアプリケーション基盤作り、ブラウザ開発とほとんどの プラットフォームを押さえた強者 • 仕様があったから混沌としたときよりも参画がしやすくなっていた。仕様は ハーネスであると言ったが、新規参画ハードルを下げるものでもある
  19. 2000年代の変化(続き) • XMLHttpRequestはW3C側で策定 • 後にWHATWGが生まれた時にそちら に継承 • ちょうどJavaScriptとHTMLとHTTP HTML/XMLHttpRequest CSS

    WHATWG W3C JavaScript HTTP / URL ECMA IETF のそれぞれの大陸をつなぐようなもの であったが、出自がW3Cだったので そのまま後継者(WHATWG)に 引き継がれた
  20. ちなみにDOMは??? • DOM (Document Object Model) の歴史は深い • Netscape Navigator

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

    document オブジェ クトを導入 • この時に JavaScript も仕様決めたからそこで document オブジェクトもECMAの 仕様に入れられたような・・・? • なんでそれをしなかったんだろう・・・?(これがsakuさんの質問にストレート に回答できなかった理由) • 歴史上の経緯であることはわかったけど理由はもっと知りたい
  22. ちなみにDOMは??? • そもそも JavaScript 設計時に自由に外部からオブジェクトを差し込める拡張性の高い仕様 として設計されていた • Netscape Navigator はブラウザとしては

    document を導入していたが、同時期に Livewire と呼ばれるサーバ上で動く JavaScript も提供していた • ちなみに Livewire は初のサーバサイドJavaScriptで、Node.jsよりも前に作られていたもの • つまり、 JavaScript は初期の設計から単体のコア機能と実行環境によって必要なオブジェ クトを外から導入できるように設計されていた • ブラウザの一機能というよりも最初からかなり野心的な試みだったことが分かる
  23. fetchがなぜECMAじゃなかったのか • 「実行環境として外側から注入されるオブジェクト」という扱いだったため、fetchは ECMAじゃなかった。 • 前身のXMLHttpRequestがW3Cで仕様として定義されたため、それを引き継ぐ形で WHATWGで仕様が継承 • さらにそれを引き継ぐ形で XMLHttpRequest

    と同じ団体が fetch を仕様として規定した • 同じく注入されるオブジェクトとして document (DOM) 、 console、 Timer(setTimeout) も同じもの • 結果としてブラウザでの仕様とその外側の実行環境側での仕様は別な定義になる