025. hx-select(届いたHTMLから必要なパーツだけを「つまみ食い」する)
原理:サーバーの「全部盛り」を賢く選び取る
大きすぎるレスポンスを制御する
Webの開発をしていると、サーバー側が「融通を利かせてくれない」場面に出会うことがあります。 「画面の一部分だけを更新したいのに、サーバーはページ全体のHTML(ヘッダーやフッターも全部入ったもの)を返してくる……」というようなケースです。特に、既存の古いサイトにHTMXを導入しようとすると、この問題によくぶつかります。
このとき、HTMXが備えている「選別眼」が hx-select 属性です。
これは、サーバーから届いた大きなHTMLの塊の中から、「自分が今、本当に必要としている一部分だけ」をピンポイントで抜き出し、それをターゲットに流し込むという、フィルタリングの役割を果たします。
サーバー側を一切改造することなく、ブラウザ側の「受け取り方」を工夫するだけで、部分更新を実現できる魔法のフィルター。それが hx-select です。
パーツ探しの名手
使い方は、hx-target と同じくらい直感的です。
属性の中に、「届いたHTMLの中にある特定のIDやクラス」をCSSセレクタで指定するだけ。
HTMXは届いたHTMLをメモリ上で仮に組み立て、指定された部分だけをハサミで切り取るように抽出してくれます。それ以外の余計なヘッダーや広告などは、まるでなかったかのように捨て去られます。
実践:フルページのレスポンスから一部を抜き出す
1. ページ全体からメイン記事だけを抽出する
「詳細を見る」ボタンを押したら、詳細ページのURLへ通信するが、そのページ全体のHTMLの中から「記事本文」だけを今の画面に埋め込みたい、という例です。
<!-- index.html -->
<div id="preview-area">
ここに詳細が表示されます。
</div>
<!--
hx-get: 詳細ページ "/detail/123" を丸ごと取得しに行く
hx-select: そのHTMLの中にある "#main-article" という部分だけを抜き取れ
hx-target: 抜き取ったものを "#preview-area" に表示せよ
-->
<button hx-get="/detail/123"
hx-select="#main-article"
hx-target="#preview-area">
詳細をプレビュー
</button>
2. 既存のフォームを再利用してエラー表示
送信してエラーになった時、サーバーが再び「入力画面全体」を返してきても、エラーメッセージの場所だけを抜き出して今の画面に上書きできます。
<form hx-post="/save" hx-select="#error-summary" hx-target="#notif-box">
<!-- 送信してエラーが出たら、返ってきたページ内の #error-summary だけを表示 -->
</form>
<div id="notif-box"></div>
3. ステップ・バイ・ステップ解説
- サーバーの現状を知る: サーバーが「部分用のHTML」を返してくれるなら不要ですが、そうでない(フルパッケージを返す)場合にこの属性を導入します。
- ターゲット・セレクタの選定: サーバーから返ってくるHTMLを想像(またはブラウザで確認)し、抜き出したい場所のIDやクラスを正確に指定します。
- パフォーマンスの意識:
hx-selectは便利ですが、裏では「大きなHTMLの転送」自体は起きています。究極の高速化を目指すなら、将来的にサーバー側を「部分だけ返す」ように改良するまでの「繋ぎ」として使うのも賢い戦略です。
比較:JSでの手動抽出 vs hx-selectの自動抽出
JavaScriptでの「つまみ食い」
const res = await fetch('/full-page');
const html = await res.text();
// 一時的なDOMを作って検索する
const parser = new DOMParser();
const doc = parser.parseFromString(html, 'text/html');
const part = doc.querySelector('#main-article');
document.getElementById('preview-area').innerHTML = part.innerHTML;
HTMXの hx-select
この短い記述だけで、上記の複雑なJS処理がすべて裏側で、しかも安全に実行されます。まとめ:初心者のための「いいとこ取り」の極意
hx-select は、理想と現実のギャップを埋めてくれる、開発者に優しい属性です。
- サーバーを責めない: サーバー側のプログラムを直せない事情があっても、
hx-selectがあればHTMXの恩恵をフルに受けられます。 - 既存サイトのリフォームに最適: 昔ながらの古いWebサイトに、少しずつ「今時」の滑らかな挙動を付け足していく時に、最強の武器になります。
- ミニマルな美学: 「自分に必要なものだけを受け取る」という潔い姿勢で、HTMLという素材を自由に料理しましょう。
全部はいらない、これだけでいい。hx-select というフィルターを手に入れたあなたは、Web上のどんなHTMLであっても、自分が必要な部分だけを自由自在に引き寄せることができます。次の記事では、この選別術をさらに高度化し、複数の場所を同時に「つまみ食い」する「hx-select-oob」(026. hx-select-oob)をご紹介します。