世界を動かす技術を、日本語で。

Show HN: JavaScriptなしの(X)HTMLインクルード

2025年8月23日原文(github.com)

概要

  • XSLT を利用した 静的ウェブサイト の共通テーマ適用手法の紹介
  • サーバーサイド処理やビルドステップ不要 のシンプルな実装
  • ヘッダーやフッターのコピペ排除 による効率化
  • どのウェブサーバー でも動作可能な互換性
  • XSLTサポート終了議論 を踏まえたデモの意義

XSL-Websiteによる静的ウェブサイトの共通テーマ適用

  • ブラウザの 組み込みXSLサポート を活用したウェブサイト構築手法
  • サーバーサイドコード・静的サイトジェネレーター・JavaScript 不要
  • index.xml などのXMLファイルをブラウザで開くと、XML冒頭で指定したテンプレート(XSLファイル)を自動読み込み
  • テンプレートファイルが、XML内の カスタムタグ をHTMLへ変換する仕組み
  • advanced/ ディレクトリには、フィールド付きテンプレートや、テンプレートの入れ子利用など、より高度な例も用意

XSLTによるテンプレート機能の特徴

  • JekyllやHugo のようなビルドステップ不要、 公開前のビルド作業を省略 可能
  • ヘッダー/フッターのコピペ不要、簡単なテンプレート記述で一貫性維持
  • どのWebサーバー でも利用可能、特別なサーバー構成やアクション不要
  • URLが通常通り (例: example.com/foobar)、ハッシュやパラメータでのページ切替不要
  • ブログ投稿 などもテンプレート化して容易に管理可能

XSLTサポートに関する注意点

  • HTML仕様からXSLTサポート除外 の議論が進行中
  • 現時点での実装例 として、サポートが残っている間の利用を推奨

関連情報・参考リンク


このアプローチは、 最小限の構成と手間で静的サイトの共通テーマ適用 を実現したい場合に有効です。 XSLTサポート終了の可能性 を考慮しつつ、現状のシンプルな選択肢として検討価値あり。

Hackerたちの意見

次のChromeのバージョンから、XSLTはフラグの後ろに隠されることになるみたい。Googleはそれを標準から削除するように頼んでるらしいよ。[0] https://github.com/WHATWG/html/issues/11523

そろそろXSLTをもっと使う時期だね。

うん、それがこの投稿のきっかけだったと思う。これで、XSLTにコンパイルするテンプレート言語のアイデアも再燃したし、今度こそやってみようかな。XSLT 3.0がウェブ標準に入ったら絶対にやるよ: https://github.com/whatwg/html/issues/11578, https://news.ycombinator.com/item?id=44987552 それに、ちょっと前にシンプルなXSLTプレイグラウンドも作ったんだ! https://xsltbin.ale.sh/

Googleが機能を標準から削除するように頼むだけで、誰も気にしないのが不思議だよね。

XSLTがもっと普及しなかったのは残念だな。確かに複雑だけど、今この問題を解決するもの(例えば、クライアントサイドで絶対に必要なReactやwebpackを使ったビルドステップ)と比べると、まだマシだよね。OPがうまく示しているように、XSLTは基本的なHTMLコンポーネントの問題を解決するための宣言的で、JavaScriptやビルドを使わない方法を提供してくれる。もしかしたら、V8の致命的な0-dayがあれば、今のベストプラクティスの代替を本当に欲しくなるかも。

次のChromeのバージョンでは、XSLTはフラグの後ろに隠されることになる。引用?それが突然で厳しいってのは、ちょっと驚きだな(今月になってやっと話し始めたし、特に企業にとってリスクが大きいって認めてるのに)し、https://chromestatus.com/feature/4709671889534976にはそんなことは書いてないよ。

期待できそう!これまでの数年間いじってきたXML/XSLTコードを見せるにはいい場所だね: https://github.com/zmodemorg/wyrm.org

2000年代にはこれをやってたな。すごく楽しかったよ。でも当時はIEのエンジンが他のXML機能よりもずっと完成度が高くて、バグも少なかった。

これ、クライアントサイドで動くよね?ユーザーがこのページに移動すると、サーバーからコンテンツを再帰的に取得するの?もしネストされたインクルードがあったら、滝のように流れる感じ?シングルページアプリのフレームワークは、クライアントから何度も往復する代わりにサーバーでレンダリングすることでほとんど解決してるし。これ、JavaScriptなしのSpinnergeddonみたいだね。ブラウザはページを表示する前にすべてのインクルードが解決されるのを待つの?それともちらつく感じ?

xsltスタイルシートを見てみると、ネストされたインクルードはないみたいで、ただの一つのスタイルシートで他は含まれてないね。リクエストの面では、cssとそんなに変わらない感じ。

サーバーサイドでコンパイルしたいなら、ci/cdでxslt変換を実行すればいいんじゃない?それでも、Jekyllよりは簡単な解決策になると思うけど、趣味プロジェクト以上にはやらないかな。

なんでHTMLインポートは残らなかったんだろう?

Hacker Newsで議論の続きを見る