039. hx-request(リクエストの「細かな振る舞い」を調整する)
原理:通信の「性格」をチューニングする
普段は見えない「通信の設定」を覗く
HTMXは、あなたが hx-get や hx-post を書いたとき、裏側で「AJAX」という技術を使っていい感じに通信を行ってくれます。通常、このデフォルトの設定は非常に優秀で、私たちは何も気にする必要がありません。
しかし、時には「この通信は3秒でタイムアウト(諦めて)ほしい」「ログイン情報(クッキーなど)を特別な方法で送りたい」「これはHTMXによる通信だとサーバーに詳しく伝えたい」というような、一歩踏み込んだ「通信の性格設定」が必要になることがあります。
hx-request(リクエスト)属性は、これらの細かな通信パラメーターを一つの属性にまとめて指定するための「設定パネル」のような役割を果たします。
実践:一歩進んだ通信のコントロール
1. タイムアウト(時間切れ)の設定
ネットワークが重い時に、いつまでも待ち続けずに「5秒で処理を打ち切る」ようにする設定です。
<!--
hx-get: 通信を開始
hx-request: JSON形式で詳細設定。timeout を 5000ミリ秒に設定
-->
<button hx-get="/api/slow-data" hx-request='{"timeout": 5000}'>
重いデータを読み込む(5秒待機)
</button>
2. 認証情報(Credentials)の扱い
別のドメインにあるサーバーへクッキーなどの情報を送りたい場合の、セキュリティに関する秘密の設定です。
<button hx-post="https://api.another-domain.com/save"
hx-request='{"credentials": true}'>
外部サーバーに保存
</button>
3. ステップ・バイ・ステップ解説
- 問題の特定: 「通信が遅すぎる」「外部サーバーとの通信でエラーが出る」といった特定の課題がある時に、この属性を思い出してください。
- 設定内容の記述: JSON形式(
{"key": value})で、公式ドキュメントにある特定の単語(timeout,credentials,noHeadersなど)を書き込みます。 - 確認: ブラウザの開発者ツールの「ネットワーク」タブを見て、設定したタイムアウトやヘッダーが意図通りに反映されているかチェックします。
比較:標準設定 vs hx-requestによるカスタマイズ
標準のHTMX通信
- 性格: 元気いっぱい、忍耐強い。
- 特徴: サーバーが答えるまでずっと待ちます。同じ要素の通信に
hx-request: trueという印を必ず付けます。
hx-request適用後の通信
- 性格: 規律正しい、あるいは特殊な事情を抱えている。
- 特徴: 「時間はきっちり守る(timeout)」「見ず知らずの相手にも身分を明かす(credentials)」といった、場面に合わせた最適な振る舞いができるようになります。
まとめ:初心者のための「通信の調律」
hx-request は、普段は目立ちませんが、アプリが「過酷な環境(遅いネットなど)」や「複雑な構成」になった時に真価を発揮する、玄人好みの属性です。
- JSONの書き方に注意: これまでの属性と同じく、
'{"a": true}'のように引用符を正しく使い分けましょう。 - ドキュメントを友に: ここで設定できる項目は非常に専門的です。何か困った時にだけ、「こんな設定があったな」と思い出して公式ドキュメントを引く、というスタンスで十分です。
- 安定性を高める: タイムアウトを適切に設定することは、ブラウザのリソース(メモリなど)を無駄遣いしないための「良い習慣」です。
通信という「見えない糸」の太さや長さを調整する。hx-request を使って、どんな環境でもへこたれない、安定したWebアプリへと磨き上げてください。第2章の最後を飾るのは、不要なデータを送らないためのデータの取捨選択術 hx-params(040. hx-params)です。