← すべての記事

Safari 27が525件の修正を出荷した理由:WebKitラボからのノート

WWDC 2026でSafariチームが語ったなかで最も示唆に富んでいたのは、ある機能の話ではありませんでした。Safari and Web Technologiesグループラボでの1時間を通じて、WebKitのエンジニアたちは一つの問いをめぐって何度も議論を重ねていました。ブラウザのチームは何を作るかをどう決めているのか、そしてなぜそれは外から見るとしばしば遅く映るのか、という問いです。ラボから言い換えると、彼らが繰り返し立ち返った答えは、自分たちは本当に気にかけているのだ、というものでした。しかもそれは、誰でも確認できる数字に裏打ちされています。Safari 27は58の新機能と525件の修正を出荷しており、WebKitはこれを「近年のどのSafariリリースよりも大きな修正の山」と呼んでいます。1 この記事は、その数字の下にある推論についてのものです。ラボから引き出し、WebKit自身のリリースノートに根拠を置いています。

視聴:Safari and Web Technologies Group Lab (WWDC26)

WWDC 2026のSafari & Web Technologiesグループラボ。

TL;DR

  • Safari 27は58の新機能と525件の修正を出荷しており、これはどのSafariリリースよりも多い修正数です。1 ラボは今年を「ペーパーカット(細かな切り傷)を潰すキャンペーン」として位置づけました。目立つ機能だけでなく、プラットフォームを信頼できるものにする小さな正確性のバグを追いかけるという姿勢です。
  • 最も明快な例が、JavaScriptモジュールローダーの書き換えです。WebKitのノートは「標準準拠のためにES module loaderを書き換え、複数のtop-level awaitの正確性のバグを修正した」と述べており、top-level awaitが存在するより前の、放棄された2016年の提案に基づく実装を置き換えました。1
  • ラボは:has()セレクタを、標準が実際にどう前進するかのケーススタディとして使いました。エンジニアたちが何年も不可能だと言っていた機能が、Igaliaのエンジニアリングによって十分に速くなり、いまでは主要なすべてのエンジンに出荷されています。23
  • フォームコントロールの取り組みは成熟しつつあります。appearance: base-selectはネイティブの<select>スタイリングをクリアし、まっさらな状態から始められるようにします。一方で、より広い「すべてのフォームコントロールをスタイルする」という方向性は依然として未確定の仕様であり、パネルは公の場でそれについて意見を異にしていました。12
  • WebKitとJavaScriptCoreは、ブラウザを持たないwatchOSを含むすべてのApple OS上で動作し、SwiftUIにはいまや第一級のWebViewがあります。つまり「Webエンジン」は、単一のアプリというより、システムサービスに近い存在になっているのです。24

その数字と、その意味するもの

WebKitによるSafari 27の位置づけは、珍しく定量的です。新機能とは別に、このリリースは「どのSafariリリースよりも大きな修正の山」である525件の修正を抱えています。1 ラボでチームは、この数字をマイルストーンではなく一つの姿勢に結びつけました。言い換えると、Web開発者はときにブラウザの選択を、自分たちの日々の体験を気にかけていないと読み取ってしまう。だがチームの答えは正反対で、SafariでWebをより悪くすることに何の利点もない、というものでした。2 この姿勢を鵜呑みにする必要はありません。なぜなら修正数こそがその証拠であり、リリースノートについてのラボ自身の説明は、しばらくスクロールし続けられるほど長く続く、というものだったからです。2

これを最もよく示す一例が、ほとんどの開発者が決して目にしない配管部分です。WebKitはJavaScriptモジュールローダーを書き換えました。リリースノートは具体的です。チームは「標準準拠のためにES module loaderを書き換え、複数のtop-level awaitの正確性のバグを修正した」のですが、それは従来の実装が「top-level awaitが存在するより前の、放棄された2016年のWHATWG Loader提案に基づいて」おり、importが完全に初期化される前のexportにアクセスできてしまうことがあったからです。1 awaitの順序に関するバグの一群を修正するためにモジュールローダーを書き換えるのは、正しくやれば誰も気づかないものに対する、膨大な労力です。それこそが、一つのコミットに凝縮されたペーパーカット・キャンペーンなのです。

標準が実際に前進するとき::has()の物語

ラボで最も有益だった語りは、CSSの:has()セレクタ、長らく望まれてきた親セレクタについてのものでした。パネルからの言い換えはこうです。ブラウザのエンジニアたちは20年近くにわたってノーと言い続けてきました。ページのパフォーマンスを台無しにせずにそれを評価できるほどチップが速くなかった、という理由からです。それが実現可能にするための作業がついに行われ、ブラウザ全体に出荷されました。2 この物語を支える、検証可能な背骨は本物です。WebKitはSafari 15.4で:has()を出荷し、Chromiumはオープンソースのコンサルタント会社Igaliaが主導したエンジニアリングによってChrome 105で続き、Firefoxがバージョン121でその顔ぶれを完成させました。つまり、何年も「不可能」だったセレクタが、いまでは主要なすべてのエンジンで動作しているのです。3

ラボはこれを、名前で知っておく価値のある設計原則に結びつけました。HTMLプロジェクトの「優先順位の序列(priority of constituencies)」は、ニーズが衝突したときに誰のニーズが勝つかをランク付けします。作者よりユーザー、実装者より作者、仕様策定者より実装者、そしてそれらすべてが理論的な純粋さに優先する、というものです。5 これは、ブラウザがサイトを壊すよりも醜い互換性回避策を永遠に抱え続ける理由を説明する規則であり、また作者を助ける機能であっても、実装がパフォーマンスを通じてユーザーを害するなら何年も待たされうる理由でもあります。:has()は、この規則がスローモーションで解決されていく様子そのものです。作者にとって有用でありながら、それを速くするユーザー側のコストによって阻まれ、そのコストが下がってようやく出荷されたのです。

フォームコントロールのプロジェクトと、公の場での意見の相違

ここ10年で最も要望の多かったCSSの能力がついに到来します。ネイティブのフォームコントロールを<div>から作り直すことなくスタイルする、という能力です。Safari 27はappearance: base-selectを出荷します。WebKitの言葉を借りれば、これは「ネイティブのスタイリングをクリアし、まっさらなパレットから始める」ことを可能にし、そのうえでコントロールの本来のセマンティクス、キーボード操作、アクセシビリティを保ったまま、自分のCSSを重ねていけます。1 これは::picker(select)::picker-icon::checkmark、そして<selectedcontent>要素と組み合わさります。これらのカスタマイズ可能なselectの領域については本物のselect要素をスタイルするで扱っています。

ラボが付け加えたのは、より広いビジョンがどれほど未完成かについての率直さでした。appearance: baseをすべてのフォームコントロールへ拡張するというのは表明された方向性であって、出荷された仕様ではありません。パネルは最も難しい問いについてカメラの前で意見を異にしていました。スタイルが当たっていないベースラインがそもそもどう見えるべきか、という問いです。やり取りを言い換えると、一方の立場は、スタイルされていないコントロールはプレーンでモダンなコントロールのように見えるべきだ、というもの。これに対する反論は、「モダン」は移ろうファッションの的であり、仕様で固定できるものではない、だからベースラインはできる限りページから継承し、それ以外ではできる限り意見を持たないべきだ、というものでした。2 彼らが合意したエンジニアリング上の制約こそが、本当に難しい部分です。この機能は、デフォルトのレンダリングとDOM構造がブラウザ間で同一である場合にのみ機能します。作者は両方に対してスタイルを当てるからです。2 だからこそ、30年来の問題がチェックボックスではなく、いまだ進行中の作業なのです。

Webエンジンはシステムサービスである

ラボからの有益な捉え直しがあります。WebKitはSafariよりもはるかに大きな存在だ、ということです。WebKitとJavaScriptCoreは、ブラウザがまったく存在しないwatchOSを含む、すべてのAppleオペレーティングシステムに出荷されており、JavaScriptを実行するアプリはどれもJavaScriptCoreに依存しています。2 WebKit自身のWWDC資料も同じ点を述べており、各プラットフォームにわたって「Safari内部と同じエンジンであるWebKitとJavaScriptCoreがレンダリングするHTML、CSS、JavaScriptによって動かされる」アプリのインターフェースについて説明しています。1 開発者にとっての実際的な帰結は2025年に訪れました。SwiftUIがネイティブのWebViewWebPageモデルを得て、WebKitを、UIViewRepresentableでラップされたWKWebViewではなく、第一級のSwiftUIビューにしたのです。4 WebエンジンがこれほどまでにOSの奥深くにあるとき、「これはネイティブにすべきかWebにすべきか」はもはや二択ではなくなります。

WebKitが最初に出荷しているもの、そして次に作っているもの

開発者が注目すべき小さめのスレッドが2つあります。まず、Safariは他のエンジンに先んじてCSSの機能を出荷し続けています。hanging-punctuationは何年もSafari専用であり、CSSのfilter()関数(広くサポートされているfilterプロパティとは別物です)は依然としてWebKit専用のままで、Safariは最近random()関数を出荷しました。これにはCSS Valuesドラフトで定義された、離散的な値のなかから選ぶためのrandom-item()が伴います。67 「Safariは遅れている」という反射的な見方は、それがどれほど頻繁に最初であるかを見落としています。

次に、Web拡張機能をめぐる話が統合されつつあります。クロスブラウザのWebExtensionsの取り組みは、複数年にわたるコミュニティグループから、正式なW3C Working Groupへと移行しつつあり、2025年のドラフト憲章は本物の相互運用性の仕様を目指しています。8 そしてAppleは、WWDC 2026の基調講演で消費者向けのひねりを発表しました。「Describe an Extension」です。これはApple Intelligenceを使って、平易な言葉による説明からカスタムのSafari拡張機能を生成しインストールするもので、Xcodeも、App Storeへの往復も不要です。9 これは開発者向けのAPIというより基調講演での発表として受け止めるべきですが、方向性は明確です。拡張機能の領域は、標準のレイヤーとエンドユーザーのレイヤーの両方で、同時に広がりつつあるのです。

ここから何を受け取るか

ラボは、ほとんどの機能報道が飛ばしてしまうトレードオフをのぞき見る窓です。ブラウザのチームは目立つ機能を追いかけることも、正確性を追いかけることもできます。WebKitはこのリリースで、目に見える形で後者を選びました。525件の修正、awaitのバグの一群のために書き換えられたモジュールローダー、ハードウェアが追いつくのを20年待った親セレクタ。このプラットフォームの上に何かを作るすべての人への教訓は、実際に何が良くなったのかを知りたいなら、基調講演ではなくリリースノートを読め、ということです。機能そのものはカスタマイズ可能なselectCSS Grid LanesHTMLの<model>要素にあります。そのペースの背後にある推論は、ラボのなかにあります。

FAQ

Safari 27にはいくつの修正が含まれていますか?

58の新機能とともに525件の修正があり、WebKitはこれをどのSafariリリースよりも多い修正数だと説明しています。1 ラボは今年を、目立つ機能ではなく正確性と「ペーパーカット」を軸に位置づけました。

モジュールローダーの書き換えとは何ですか?

WebKitは標準準拠のためにSafariのES module loaderを書き換え、複数のtop-level awaitの正確性のバグを修正しました。従来の実装はtop-level awaitが存在するより前の、放棄された2016年のWHATWG Loader提案に基づいており、importが完全に初期化される前のexportにアクセスできてしまうことがありました。1

appearance: baseは出荷されますか?

appearance: base-selectはSafari 27で<select>要素向けに出荷され、ネイティブのスタイリングをクリアして、コントロールのセマンティクスを保ったまま自分のCSSを適用できるようにします。1 appearance: baseをすべてのフォームコントロールへ拡張するのは表明された方向性ですが、未確定の仕様であり、ラボのパネルはスタイルされていないデフォルトがどう見えるべきかについて公の場で意見を異にしていました。2

Appleは本当にAI生成のSafari拡張機能を追加したのですか?

はい。AppleはWWDC 2026の基調講演で「Describe an Extension」を発表しました。これはApple Intelligenceを使って、自然言語による説明からカスタムのSafari拡張機能を生成しインストールするもので、XcodeもApp Storeも不要です。9 これは消費者向けの機能であって、開発者向けのAPIではありません。


Safariの機能に関する記事は「何が」を扱っています。本物の<select>をスタイルするネイティブmasonryのためのCSS Grid Lanes、そしてHTMLの<model>要素です。この記事は、そのペースの背後にある「なぜ」を扱っています。シリーズ全体のハブはApple Ecosystemシリーズです。

References


  1. WebKit, News from WWDC26: WebKit in Safari 27 beta. Source for the 58 new features and 525 fixes (“the largest pile of fixes in any Safari release”), the ES module loader rewrite (“Fixed multiple top-level await correctness bugs with a rewrite of the ES module loader for standards compliance,” replacing an implementation “based on an abandoned 2016 WHATWG Loader proposal that predated top-level await entirely”), the appearance: base-select description (“clear the native styling and start with a clean palette”) with ::picker(select)/::picker-icon/::checkmark/<selectedcontent>, and the framing of WebKit and JavaScriptCore as the engines behind app interfaces across Apple platforms. 

  2. Apple, WWDC 2026 session 8015, Safari and Web Technologies Group Lab. Paraphrased from a locally transcribed recording; Apple publishes no official captions for the labs, so the wording here is a paraphrase, not a quotation, and exact phrasing is unverified. Source for the team’s caring-about-the-platform framing tied to the length of the release notes, the :has() narrative that engineers resisted it for roughly two decades on performance grounds, the live disagreement over the unstyled appearance: base baseline (modern-control vs inherit-from-page) and the cross-browser identical-rendering-and-DOM-structure constraint, and the point that WebKit/JavaScriptCore run on every Apple OS including watchOS. 

  3. WebKit, Using :has() as a CSS Parent Selector and much more, and the cross-engine shipping record: Safari 15.4, Chrome 105 (engineering led by Igalia), Firefox 121. Source for :has() shipping in all major browser engines after years of being considered infeasible. 

  4. Apple, WebKit for SwiftUI and WWDC 2025 session 231, Meet WebKit for SwiftUI. Source for SwiftUI’s native WebView and WebPage model introduced in the 2025 releases, making WebKit a first-class SwiftUI view. 

  5. W3C, HTML Design Principles: Priority of Constituencies. Source for the ordering “users over authors over implementors over specifiers over theoretical purity.” 

  6. MDN / caniuse, hanging-punctuation and the CSS filter() function. Source for both being supported in Safari/WebKit and not in Chrome or Firefox at time of writing (the filter() function is distinct from the widely supported filter property). 

  7. W3C, CSS Values and Units Module Level 5, which defines random() and random-item(). Safari has shipped the random() function; random-item() selects among discrete keyword or property values. 

  8. W3C, WebExtensions Community Group and the 2025 draft WebExtensions Working Group charter. Source for the cross-browser WebExtensions effort moving from a community group toward a formal Working Group. 

  9. Apple announced “Describe an Extension” at the WWDC 2026 keynote, generating and installing a custom Safari extension from a natural-language description via Apple Intelligence, without Xcode or the App Store. Reported by MacRumors, June 8, 2026. Described here as a keynote announcement and consumer feature, not a developer API. 

関連記事

CSS Grid Lanes: Safariのネイティブmasonry

CSS Grid Lanesは、わずか3行のCSSでSafari 26.4にネイティブのmasonryレイアウトをもたらします。masonryの古くからのタブ順序問題を解決する`flow-tolerance`ダイヤルも備えています。

1 分で読める

Customizable Select: ついに本物の<select>をスタイルできる

Safari 27とChrome 135では本物のselect要素をスタイルできます。appearance: base-select、::picker(select)、optionへのリッチHTML、差し替え可能なボタンを紹介します。

2 分で読める

ノービルド宣言:バンドラーなしで本番に出す

FastAPI + HTMX + プレーンCSSでビルドツールゼロ、Lighthouseスコアは満点。実際の本番環境の数値、正直なトレードオフ、そして明確な境界線を示します。

1 分で読める