
2026/10/02 3:08
Bez:仕様とテストからブラウザエンジンを生成する
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Bez プロジェクトは、カスタムブラウザコンポーネントの構築に必要な高額な費用と手作業を大幅に削減することを目的とした画期的な生成型 Web レンダリングエンジンです。ブラウザ仕様およびテスト結果に基づいて自動的にコードを作成するため、現在は Chromium、Firefox、WebKit などの主要ブラウザと 94.8% の互換性を実現しています。この自動化により、規格が変更された際に瞬時に論理を検証でき、繰り返しの手作業による書き換えの必要性を排除しています。手書きコードは現在なお複雑な領域(特に JavaScript)で支配的であり、現在のエンジンでは 93.0% を占めていますが、システムは「tree-shaking」と呼ばれるプロセスを通じて生成された機能をより多く含める方向に進化しています。この手法は、アプリケーションが必要とする特定の機能のみを選択的に取り込むことで、全機能を含むエンジンと比較してメモリ使用量と実行オーバーヘッドを削減し、パフォーマンスを最適化します。最終的に、このアプローチは企業に、Web エンジンをゼロから構築するための prohibitively high な費用をかけずに、高速で軽量なレンダリングソリューションを展開することを可能にします。
本文
Bez:生成された Web エンジン
Bez は、仕様の定義に基づいて Web レンダリングエンジンを自動「生成」するプロジェクトです。Web ブラウザの動作ルールを人手で記述し直すのではなく、仕様とテストからコードを導き出します。
プロジェクト概要
なぜ Bez か?
- 現状の問題:手作業で Web エンジンを構築するには数百人のエンジニアと長年多くが必要です。これにより機能決定権は限られた企業に委ねられかねません。
- Bez のアプローチ:仕様の定義に基づき、3 つの商用ブラウザ(相互検証済み)と WPT(Web Platform Tests)を使用してエンジンが自動的に生成されます。パイライン構築後は、追加のエンジンを生成するコストを大幅に低減できます。
目標
- 完全性または Tree-shaken
- デフォルトは完全なエンジンとなります。
- Web ブラウザ以外の用途(サイト分析やアプリケーション検討など)では、利用されている機能のみを含むようにビルド可能です。
- 未使用の機能はバイナリから除外されます(単なる無効化ではなく)。詳細:
docs/content-scoped-engine.md
- あらゆるデバイスで高速
- コード量が少なく、メモリ使用量も最小限です。
- 容易な埋め込み
- 明確な API を備えた小型エンジンです。
- Chromium の全体を含む場合でも含まない場合でも動作するように設計されています。
- 更新が最も迅速
- 仕様やテストに変更が発生しても、コードを手動で書き直す必要はありません。自動再生成と再検証が行われます。
仕組み(生成プロセス)
spec["spec text"] --> model["model writes<br/>many candidates"] model --> engine["candidate runs<br/>inside the engine"] browsers["Chromium, Firefox,<br/>WebKit (cached)"] --> check{"same boxes,<br/>same places?"} engine --> check check -- no --> model check -- yes --> code["committed as<br/>ordinary Rust"]
主要ドキュメント
:仕様テキストからコミットされたコードへの変換ルールについて。docs/generation-loop.md
:エンジン内のレイアウトが 3 つのブラウザでどのようにチェックされるか。docs/geometry-verification.md
:生成されたレイアウトルールと各バッチの内容。docs/generated-functions.md
:プロジェクト計画、決定事項、未解決の課題。roadmap.md
ステータス(2026 年 9 月 25 日時点)
browser-compat-data 8.0.4(17,259 のリーフキー、docs/feature-map.json に 74 のルールを含む)に対する計算結果です。
| 領域 | 生成済み | 手書き | リンク付き | オーラクルのみ | 未到達 |
|---|---|---|---|---|---|
| 全体 | 0.6% | 0.3% | 0.5% | 5.7% | 93.0% |
| CSS | 2.5% | 1.1% | 2.0% | 0.0% | 94.4% |
| HTML | 0.0% | 0.0% | 0.0% | 0.0% | 100.0% |
| API | 0.0% | 0.0% | 0.0% | 9.9% | 90.1% |
| JavaScript | 0.0% | 0.0% | 0.0% | 0.0% | 100.0% |
| SVG | 0.0% | 0.0% | 0.0% | 0.0% | 100.0% |
| WebAssembly | 0.0% | 0.0% | 0.0% | 0.0% | 100.0% |
| HTTP | 0.0% | 0.0% | 0.0% | 0.0% | 100.0% |
| MathML | 0.0% | 0.0% | 0.0% | 0.0% | 100.0% |
- ステータスの意味と同期方法の詳細は
を参照してください。docs/dashboard.md - DOM、スタイル、ボックスツリー、フラグメントツリー は
およびcrates/dom
で手書きされており、ブラウザチェックに合格しています。crates/layout- CSS 2.1 レイアウトルール(9 つ)のうち 8 つはモデル作成で生成され、3 ブラウザの投票で承認されました。
- ブロックの高さはどのモデル候補でも凌駕できず、引き続き手書きルールが保持されています。
- これらは約 227 のレシピケースとすべての WPT normal-flow ページをパスします。
- 実行ルールの詳細:
→ 「各生成関数が実行するそれぞれの解析器」。roadmap.md
これまでの所見
- ブラウザ間の合致
- 3 つのブラウザは大部分で合致しています(残りの 1 つが逸脱)。
- 699 の比較のうち、235 のドキュメントで一致しました。すべての不一致は Firefox のみでした(多数決投票結果)。
- 詳細:docs/firefox-app-units.md
- Firefox の差異と Web 互換性バグ
- Gecko は長さを 1/60 px に丸めるのに対し、Blink および WebKit は 1/64 px を使用します。
- これにより Flex アイテムの折り返しや
の 1 ピクセルの違いなどが発生します。offsetWidth - Mozilla は Slack、Google Store、Samsung で同様の破損を診断済みです(Mozilla bug 1719314)。
- WPT の投票表
- 安定した 3 エンジンによる多数決は、2,282,301 テストキーのうち 2,162,676(94.8%) をカバーします。
- 詳細:docs/wpt-votes.md
- スクリプト観測とコンフォーマンススイート
は 15/18 のエンジンペアで合致し、残りの不一致はプラットフォーム固有の違いです。Trace probes- コンフォーマンススイートは有用なオーラクルとなります:
- WPT canvas: 82.6%(tentative 除外:92.7%)
- Khronos WebGL (dEQP): 99.7%
- WPT Web Audio: 74.4%(tentative 除外:85.6%)
- WebGPU CTS: 検証用約 85%、数値実行用約 50%
- 詳細:docs/conformance-oracles.md、docs/webgpu-cts.md
- ロジックプログラミング
- Datalog で記述された Margin collapsing は、すべてのオフセットケース(1,195)で合致しました。
- 幾何学チェックにより、手書きルールに潜む種まきバグを捕捉できました。
- 詳細:docs/logic-layer.md
- 経済性
- エンジン関連の互換性エントリの約 55–60% は、自動化されたオーラクルと生成可能な仕様プロースを持っています。
- 一方、約 8–18% はどちらも持っていないため自動生成が困難です。
- 詳細:docs/platform-economics.md、docs/oracle-coverage.md
未解決の問い
- 各ルール構築の手作業コストと、生成部分の幅(スコープ)はどれほどあるべきか?
- JavaScript を使わずに到達可能な WPT の範囲はどのくらいか?
- IDL 生成コードの境界はどこか?
- 詳細:roadmap.md → 「Open questions」を参照。
ソースデータ
プロジェクトは以下のリポジトリから Web プラットフォームデータを取得しています。
- browser-specs:すべての Web 仕様
- web-features:機能別にグループ化した Web プラットフォームデータ
- browser-compat-data:Web の互換性データ全体
- WPT:Web プラットフォームテストスイート
- wpt-gen:仕様から生成された WPT テスト
- webref:機械読み取り可能な Web 仕様用語集