本文へスキップ
MameTechNews
フロントエンド

Safari 27、モジュールローダを書き直しトップレベルawaitを仕様準拠に

## POINTS

  • 不具合は並行importとトップレベルawaitの組み合わせで顕在化していた。Safari限定の直列化回避を棚卸しできる
  • 検証はSafari 27ベータとTP 251で可能。正式版まで本番のブラウザ要件は据え置く判断が無難
  • ローダ全体の再実装なので、await以外のESM初期化順も変わる可能性がある。主要導線を実機で確認する

WebKitは9月2日、Safari 27のWebKitでトップレベルawaitが仕様準拠になったと公式ブログで解説した。原因は、2016年頃のWHATWG Loader提案を基にした自己ホストJavaScript実装を、ECMAScript 2022の非同期モジュール実行へ継ぎ足していたことにある。並行import()で同一モジュールを読むと、完了順が乱れ、未初期化のexportへ触れて例外になる事例があった。

チームは2026年1月から旧ローダを削除し、仕様の疑似コードをC++へ移植した。Bunが収集した再現例、test262、Web Platform Tests、他エンジンとの出力比較用ファザーで検証し、数週間の日常利用でも問題が出ない段階でマージした。自己ホストJSは起動時コンパイルと最適化の不安定さが欠点だったため、ネイティブ実装へ切り替えた。

フロントエンドへの意味は、Safariだけトップレベルawaitを避ける、あるいは動的importを直列化する回避を段階的に外せる見通しが立ったことだ。本番投入はSafari 27正式版まで待つべきだが、ベータとTP 251で依存グラフを確認できる。モジュール初期化順に依存するSSRやバンドラ出力も、実機確認の対象になる。