概要
- DOM とその周辺APIは時代遅れで肥大化
- Webアプリ開発 ではDOMの直接操作を避ける傾向
- CSS は直感的でないレイアウトモデルと複雑な継承
- SVG の統合は便利だが一貫性に欠ける
- 新しい UIツールキット への転換が必要
DOMを原点から再考する
- WebAssembly の普及でサーバー側は進化したが、クライアント側の DOM は10年前と大差ない現状
- WASM からDOMアクセスが「解決済み」とされるが、そもそもDOMを使いたい理由自体が問われていない
- DOMや関連APIを「引退」させるべき時期と主張
- Chrome のdocument.bodyには350以上のプロパティやメソッドが存在、さらにCSSプロパティは660にも及ぶ現状
- プロパティとメソッドの区別が曖昧で、getterがレイアウト計算を引き起こすことも
- 古いイベントプロパティなど、レガシーな機能が多数残存
- DOMは肥大化し続け、Webページ制作者とWebアプリ開発者で問題意識に差
- 多くの開発者はDOMの直接操作を避け、JSフレームワークを利用
- DOMの宣言的な機能(innerHTMLなど)は現代UIパターンに適合しない
- 同じことを実現する方法が多すぎ、どれも洗練されていない
Web ComponentsとDOMの限界
- Web Components はネイティブなコンポーネントモデルだが、普及せずAPIも扱いづらい
- Shadow DOMは新たな入れ子・スコープ問題を導入
- DOMの本質的な問題はSGML/XML由来の「文字列型」中心設計
- React系フレームワークはこの問題を回避
- 状態管理をDOMに持たせるのは不適切と認識
- HTML自体は10年以上本質的な進化がなく、ARIAのみが目立つ変化
- セマンティックHTMLの理想は未達成で、明確な設計指針が不在
- HTMLの管理はWHATWG(ブラウザベンダー主体)に移行し、ビジョン不在のまま小手先の改良が続く
- CSSもテンプレート言語的な方向に拡張され、複雑化
- contentEditableの実用化は困難、Google DocsやNotion開発者も苦戦
- プログレッシブエンハンスメントやマークアップとスタイルの分離という旧来の価値観は失われつつある
- 現代のWebアプリはHTML/CSS/SVGを無理やりUIツールキット化しているが、巨大なオーバーヘッドと非効率
CSSの本質的な問題
- CSS のレイアウトモデルは直感に反し、制約解決型と誤解されがち
- 例: 親要素の高さが未定義の場合、子要素のheight: 50%は無効
- CSSのレイアウトは「外から内(outside-in)」と「内から外(inside-out)」の2パス制約伝播
- outside-in:アプリケーションフレーム等、親がサイズを決定
- inside-out:テキストや段落など、子が親を伸ばす
- CSSはデフォルトでinside-out、outside-inは明示的に指定が必要
- flex box(display: flex)は自動レイアウトに便利だが、内部的には2回レイアウト計算が必要で複雑
- contain: sizeやflex-basisで再帰的依存を回避可能
- containやwill-changeなどの新機能はレイアウト最適化に寄与するが、DOM全体の制約伝播を部分的に断ち切る
- CSSは本質的に「文書指向」であり、アプリケーションUIには不向きな設計
CSS・SVGの「良い部分」と設計上の問題
- flex boxは理解すれば直感的で強力、グリッドレイアウトも同様だが記法が複雑
- 本来なら「外から内」「内から外」を明示的なコンテナ・配置モデルで分けるべき
- CSSは「リッチテキスト用の継承型スタイル」と「ブロック・インライン要素のレイアウトシステム」が混在
- font-sizeなどは継承するが、borderなど大半のプロパティは継承しない
- emスケーリングは論理ピクセル・デバイスピクセルの概念に置き換えられ、現代では重要性が低下
- SVGはDOM統合で動的描画やアイコンスタイル調整に有用
- ただしCSSと完全な互換性はなく、座標の文字列化など独自仕様あり
- CSSもSVG的な機能(角丸、グラデーション、マスク等)を取り入れるが不十分
- SVGはポリゴンヒットテスト等、CSSでは不可能な機能あり
レイアウト・API設計の課題
- HTML/CSS/SVGの使い分けは特有のトレードオフが多く、一貫したUI構築が困難
- 例示される問題点:
- text-ellipsisは段落全体の省略不可、テキスト計測APIも不十分
- position: stickyは本来簡単なはずが、実際は複雑な入れ子構造が必要
- z-indexは絶対値指定で、相対的なZ階層管理ができず「z-index戦争」が発生
- いずれもv1仕様のまま本質的なプリミティブ提供に至っていない
まとめ:新しいUIツールキットへの転換
- DOMは時代遅れ、CSSは部分的に有用だが設計上の限界
- SVGは必要悪的存在
- 全体として、現行のWeb UI基盤は抜本的な再設計が必要
- 新しいUIツールキット・API設計への転換が求められる