概要
Web開発界隈 で「JavaScript Fatigue」や「HTML Over The Wire」などの議論が活発化。 HTMX が注目され、HTML属性による宣言的な開発手法が再評価。 SPAフレームワークの構造性とHTMXの柔軟性のギャップが課題。 MESH は「1コンポーネント=1エンドポイント」という新しいSSRアプローチを提案。 Shadow DOMとHTMXの連携、OOBアップデートなど最新技術の実装例を紹介。
Web開発の潮流とHTMXの台頭
- Web開発者 の間で「JavaScript Fatigue」「Framework Fatigue」などの言葉が話題
- HTML Over The Wire や Hypermedia Revival など、HTMLファーストな開発手法の再評価
- HTMX がこの流れの象徴的存在、HTML属性で多くの操作を実現
- ブラウザがHTMXのようなセマンティクスを ネイティブサポート すれば、JavaScript不要なWeb実現も可能性
- 従来のSPA は構造性や規約で人気だが、HTMXは柔軟すぎてスパゲッティ化の懸念
HTMXの課題とMESHの発想
- HTMX は開発者に構造や規約を委ねるため、設計の一貫性確保が難題
- 「 宣言的jQuery」との印象を持つ開発者も多い
- SPAフレームワーク のような「唯一正しい方法」がほしいというニーズ
- MESH は「1コンポーネント=1エンドポイント」を原則としたSSRフレームワーク
- HTMLファーストな開発体験と SPA的な構造性 の両立を目指す
基本的なインタラクションと技術スタック
- HTMX と Declarative Shadow DOM(DSD) の組み合わせが有望視
- Go+Templ をバックエンドに採用、爆速ビルド&デプロイ体験
- Junie による「vibe coding」も試行
- HTMX はShadow Rootを越えられない制約あり、JSフックで回避策を実装
htmx:beforeSwapイベントでShadowRootごとにスワップ制御
MESH流コンポーネント設計例
- mesh-card カスタム要素:HTML, CSS, JS, バックエンドコードが一体
<template shadowrootmode="open">でShadow DOMを宣言- HTMXと連携しつつ、JSでインタラクション追加
- MeshElement ベースクラス:ShadowRootのセットアップとHTMX処理
- イベントリスナーの自動バインド
- HTML属性でメソッド名を指定し、JS関数へ接続
- Cardクラス :表示切り替えや編集機能をJSで実装
edit()やcancel()などのメソッドでUI制御
親子間連携とOOBアップデート
- HTMX で親コンポーネントの状態更新が課題
- 「ターゲット拡張」や「レスポンスヘッダーイベント」など複数の流派
- OOB(out of band)スワップ が最新のベストプラクティス
- サーバーレスポンスに他のコンポーネントも含めて返却、HTMXが自動で差し替え
- MESH ではOOB更新用のPub/Subを実装
- イベントごとにコンテキスト付きでコンポーネントを描画
- 親子の依存なしで独立した更新が可能
Shadow DOMとHTMXの壁・解決策
- HTMX はShadowRootを越えてDOM操作できない仕様
- Shadow DOMとの共存には追加ハックが必要
findInShadow関数でShadowRootを再帰的に探索し、IDで要素を特定
まとめ:HTMLファースト×構造的なWeb開発への提案
- MESH はHTMXの柔軟性とSPA的な構造性を両立する新アプローチ
- Shadow DOM や OOBアップデート など、現代的Web技術の課題と解決策
- 今後のWeb開発は「HTMLファースト」「唯一の正しい方法」「構造性と柔軟性のバランス」が鍵
- MESH の詳細やコードは GitHub で公開中、実践例も豊富
参考
- HTMX公式サイト
- MESH GitHubリポジトリ
- Go + Templドキュメント
- Declarative Shadow DOM仕様書