Chromium で WPT の external/wpt/domxpath/fn-id.html が失敗している issue を見つけて修正出来た(嬉しい)ので、せっかくなのでその事をまとめる。
issue: https://issues.chromium.org/issues/422038088
対応した CL: https://chromium-review.googlesource.com/c/chromium/src/+/8041295
wpt とは
Web Platform Tests の略。各ブラウザが W3C や WHATWG の Web 標準の仕様に沿って実装されているか検証するためのテストスイート。
以下公式ドキュメントより引用。
The web-platform-tests project is a cross-browser test suite for the Web-platform stack.
詳細は公式ドキュメントを参照:https://web-platform-tests.org/
ちなみに、似たような立ち位置の test262 は、JS エンジンが JavaScript 言語仕様に沿って実装されているか検証するためのテストスイート。
おこなったこと
どんな風に issue に対応したのか箇条書きで書く。
- いつからこのテストが失敗したのか見にいった
- issue の Upstream changes imported から、wpt リポジトリに以下の commit, PR が入って失敗した事が分かった
- merge されたのが2025年6月なので、割と最近追加されたテストが失敗している事が分かった
- どんなテストで、どんな失敗をしているのか確認するためにテストコードと、ベースラインファイルを見る
- ベースラインファイルは、wpt の変更によってテストが失敗するようになっても、CI が pass するように現在の失敗結果を持つ
- wpt の変更を import した際に新規に起きた失敗は、issue 起票と共にベースラインファイルが生成される(という理解)
- ベースラインファイルは、wpt の変更によってテストが失敗するようになっても、CI が pass するように現在の失敗結果を持つ
- テストコードに添付されている仕様書を見にいく
- wpt.fyi を見に行って、他の主要ブラウザの様子を見る
上記を調べてみて、以下の事が分かった
- 失敗しているこのテストは最近追加されたテストであること
- id() によって 2つ返ってくる事を期待するテストへの違和感
- 仕様書の以下の文との不整合
-
If an XML processor reports two elements in a document as having the same unique ID (which is possible only if the document is invalid) then the second element in document order must be treated as not having a unique ID.
-
- 他の主要ブラウザも同様のエラーでテストが落ちている

(引用: https://wpt.fyi/results/domxpath/fn-id.html)
よって、Chromium 側ではなく、テストを修正すれば良さそうだと判断し、CL を提出した。親切なレビュワーの方にレビューしていただいて無事 land された。
学び
wpt について
Chromium に wpt 用のディレクトリがあって、wpt と自動で同期する仕組みが興味深かった。リポジトリの運用について、monorepo vs polyrepo みたいな考えをしていたところがあり、そういうやり方もあるのか!と思った。
Chromium の開発をしていて、wpt にも PR を別途作るような手間がなく、Chromium のためにテストを直したら、それが他のブラウザにも反映される。もちろん wpt リポジトリを直接編集してもよく、それも各ブラウザに同期される。つまり wpt リポジトリを SSoT として、各ブラウザはそれと同期する事で、仕様通りに動作している事を保証している。
この 1つのリポジトリを SSoT として、それに依存する他のリポジトリでは、SSoT リポジトリの mirror ディレクトリを用意して、相互に同期する運用は色々使い所がありそう。
Chromium 開発について
既に色々な方が言っているように、ストレージ容量が沢山必要。fetch で 100GB, build すると +100GB で合計 200GB くらいになる。私は内部ストレージだと足りないので、外部 SSD を使っている。
最初試した時、どうしても fetch が最後まで正常に終わらず。SSD のファイルシステムを exFAT -> APFS に変えてトライしたら上手くいった。SSD が無駄にならなくてよかった。
また、最初の fetch と local での build に時間がかなり掛かる。最初の fetch は一晩実行して、朝確認した記憶。以降の pull や rebase は全然大丈夫。実は別の CL も挙げており、そのテストのために、最初は分からず full build していて、増分 build のはずだが、commit がどんどんされているので、結局毎回 5h くらいかかっていたと思う。test のための最小構成の build でも、変更内容次第では、数行程度の変更でも 5h くらい掛かる。もちろんマシンパワーに依存はあると思う。メモリ 16GB だとこんな感じ。
Chromium のドキュメントがすごく整備されていて、困りそうな事は大抵ドキュメントに書いてある。特にレビューのやり取りに関するコミュニケーションルールがあって、個人的にそれがとても有り難かった。
気になる方は、詳しくはドキュメントを:
https://chromium.googlesource.com/chromium/src/+/HEAD/docs/README.md
Design Docs のような興味深いドキュメントも沢山まとめられている。
また、Chromium のドキュメントではないのだけど、元 Google Chrome チームの Addy Osmani氏の Google Chrome at 17 - A history of our browser も Web とブラウザの歴史という感じでとても良い内容だった。philosophy の話が特に好き。
その他
github の activity に web-platform-tests と chromium が入った。おまけだけど、やっぱりこういう形で何かもらえるのは嬉しい。

また、github はそのリポジトリ上に commit があっても、アカウントの activity が紐付かない事を知った。activity と紐付けるためには、fork 等で、リポジトリとアカウントに何らかの関係を作る必要がある様子。私は fork したら activity に反映された。