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

Import assertionsが消えた日~ECMAScriptの仕様はどう決まり、なぜ覆るのか~

Import assertionsが消えた日~ECMAScriptの仕様はどう決まり、なぜ覆るのか~

Stage 3まで進めば、ほぼ標準化は確実。そう思われていたJavaScriptの新構文Import Assertionsは、仕様から消え去りました。

本資料では、ECMAScriptの仕様策定プロセス(TC39)の裏側を、ある構文の挫折と復活のストーリーを通して解説します。

言語仕様の専門家が集まるTC39であっても、ブラウザのネットワーク仕様やセキュリティ(CSP)の落とし穴を見落とすことはあります。しかし、仕様策定がGitHub上で完全にオープンに行われているからこそ、外部の実装者からの指摘によって致命的な欠陥が防がれ、新たに Import Attributes として生まれ変わることができました。

仕様は泥臭い議論と軌道修正の繰り返しによって、JavaScriptを前進させています。言語が進化する生々しい現場を知り、Web標準への見方をアップデートするための発表です。

【この資料で発表したイベント】

- フロントエンドカンファレンス名古屋 2026

【著者について】

- Portfolio: bicstone.me
- X: @bicstone_me

© 2026 Oishi Takanori

Avatar for おおいし

おおいし

May 08, 2026

More Decks by おおいし

Other Decks in Programming

Transcript

  1. © Findy Inc. 2 @bicstone_me ⼤⽯ 貴則 OISHI Takanori 登壇者紹介

    • ⾼専機械⼯学科卒、元機械設計エンジニア • 現在はSaaS業界に5年携わるWebエンジニア • TypeScript / Ruby / PHP / Python / Dart • Certified ScrumMaster ® @oishi.takanori @bicstone Certified ScrumMaster® is a certification mark of Scrum Alliance, Inc. Any unauthorized use is strictly prohibited.
  2. © Findy Inc. 3 背景:ECMAScriptの仕様はどうやって決まる? • 提出されたプロポーザルをTC39委員会が議論‧審査し仕様化 ◦ ブラウザベンダー(Google /

    Apple / Microsoft / Mozilla …) ◦ ランタイム開発者(Node.js / Deno …) ◦ 開発者、実装者、専⾨家など • 議論の様⼦は誰でもGitHubから閲覧が可能 • 仕様化の意思決定はコンセンサス⽅式 ◦ 多数決ではない ◦ ⼀社でも強く反対すれば通らない ➔ 新しい機能はプロポーザルを元に洗練されて仕様となる 参考: https://tc39.es/
  3. © Findy Inc. 4 背景:ECMAScriptのStageとは? • プロポーザルが議論されている間、5段階のStageが公開 ➔ Stageを⾒ることでプロポーザルの標準⼊りの確度が推測可能 Stage

    名前 意味 0 Strawperson アイデア 1 Proposal ⽬的が明確に‧Championが付く 2 Draft 仕様の体裁を整える 3 Candidate 仕様が完成‧実装が開始 4 Finished 標準⼊りの準備が完了 参考: https://tc39.es/process-document/
  4. © Findy Inc. 5 Import Assertions の歴史 • 2020年にImport AssertionsのプロポーザルがStage3に

    ◦ モジュールの読み込み⽅法を指⽰する構⽂ ◦ assert キーワードを接頭辞として使⽤ • エコシステム全体で実装され、使われ出した ◦ TypeScript / Node.js / Deno / Chrome など 👇 参考: https://github.com/tc39/proposal-import-attributes ➔ Stage 3まで来たらほぼ確で採⽤される… そう思っていた
  5. © Findy Inc. 6 Import Assertions の歴史 • ところが…assert キーワードは標準化には⾄らなかった

    画像引⽤元: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import ➔ Stage3になった機能が削除されるという異例の事態
  6. © Findy Inc. 7 ⾒落とされたImport Assertionsの落とし⽳ • ブラウザはリソース種別ごとにリクエストを変える ◦ Acceptヘッダ、Sec-Fetch-Destヘッダで宣⾔

    ◦ CSPのセキュリティ判定にも使われる • Import Assertionsは「ロード後」に検証するという思想だった ◦ つまりリクエストの形は変えられない ◦ JSONを取りに⾏くのに、JSをくれと送ってしまう ◦ CSPはscript-srcで判定 → JSONのつもりがJS扱い 参考: https://github.com/whatwg/html/issues/7233 ➔ TC39から⾒えない問題が、ブラウザに実装されたことで顕在化
  7. © Findy Inc. 8 誰が気づいたか • 2020年9⽉にStage3となり、エコシステムで実装が進む • ブラウザを実装するメンバーがこの問題をコミュニティで指摘 ◦

    初出はWHATWG。Apple, Mozillaのメンバーで議論 • TC39のメンバーだけでは⾒つけられなかった ◦ TC39の議論の中⼼は⾔語仕様で、HTTPやCSPは守備範囲外 • 結果、2023年1⽉にStage3からStage2に降格 ◦ ⾮推奨化し、その後実装の削除が進む 参考: https://github.com/whatwg/html/issues/7233 ➔ Stage 3(実装して試す段階)まで進んだからこそ⾒つかった
  8. © Findy Inc. 9 この機能はImport Attributesとして⽣まれ変わった • TC39は実装者のフィードバックを踏まえ再度議論 • 2023年3⽉にImport

    AttributesとしてStage3に復活 • assert キーワードを with キーワードに変更 ◦ assert: ロード後のチェックのみ ◦ with: ロードの仕⽅を変える 参考: https://github.com/tc39/proposal-import-attributes ➔ オープンな議論によって軌道修正の判断を下せた 👇
  9. © Findy Inc. 10 Import Attributes として多くの環境で使⽤できるようになった • 2024年10⽉にStage4へ。無事ES2025でリリース🎉 ➔

    紆余曲折を経て、JavaScriptの⼀部として利⽤可能に 画像引⽤元: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import/with
  10. © Findy Inc. 11 過程はすべて公開されている • 議論はGitHubですべて公開され⾒ることが可能 • 新しい仕様が決まるまでに多くの会社‧⼈が関わっている ➔

    仕様が作られる過程を知って、より⾝近に感じてみませんか 種類 URL 議事録 https://github.com/tc39/notes プロポーザル https://github.com/tc39/proposals Import Attributes https://github.com/tc39/proposal-import-attributes