要約

  • W3Cは2013年2月14日、HTML Templates の最初の公開草案を出した。HTMLとして解析したDOMの部分木を、不活性なまま保存し、後から複製する仕組みを提案した。
  • 2014年のHTML文書に <template> が入り、現在の標準でも template.content の DocumentFragment を複製して文書へ挿入できる。

ニュース一覧には、同じ形の記事カードがずらりと並ぶ。見出し、写真、短い紹介、リンク。中身は変わるが枠は変わらない。かつての動的ページは、この枠を見えない場所に隠したり、文字列から毎回タグを組み立てたりした。ブラウザーはHTMLを読む名人なのに、読んだ部品を「後で使うまで預かる」窓口がはっきりしていなかった。

2013年2月14日のW3C初公開草案は、その窓口を設けた。作者が <template> に書いたHTMLをブラウザーが解析する。できた構造は不活性な状態で保管され、必要になれば複製して使える。カードの枠は先に書いてよい。どの記事を入れるか、いつ画面に載せるかは後で決められる。

保管場所は少し変わっている。2014年2月のHTML 5.1草案によれば、中身は要素の普通の子ではなく、template.content が返す DocumentFragment に入る。その所有文書には閲覧コンテキストがない。しまってある間、スクリプトは走らず、フォームの部品も本番の送信に加わらない。ひな型そのものは画面に描かれない。椅子はもう組み立てたが、客席の照明はまだついていない。

同草案の実例には猫の一覧表が登場する。一行分のセルをひな型として置き、猫ごとに複製し、名前などを書き込み、表へ追加する。記事一覧なら猫の代わりに記事を入れる。複製したカードだけを編集し、元の型は次の一枚のために残す。これなら二十枚目のカードに十九枚目の見出しが紛れ込む悲劇も避けやすい。

2014年10月のHTML5勧告にはこの要素が収められた。W3Cの公開履歴には、2013年の独立した草案と2014年の作業部会ノートが並ぶ。提案書の棚は片づいたが、機構はHTMLの本棚に移った。

現在のHTML標準も、template をスクリプトで複製し文書に挿入できる断片の宣言として扱う。描画上は何も表さず、中身は別の断片として持つ。ここを知らずに要素の普通の子だけ探すと、舞台袖の扉の前で「衣装がない」と騒ぐことになる。扉には content と書いてある。

この仕組みは記事の良し悪しを選ばない。ブラウザーの仕事は、枠を正しく解析し、待機させ、複製できるようにすること。編集者は各カードの内容と登場順を決める。地味な役割分担だが、毎日何十枚も作るページでは、その地味さこそありがたい。