コンテンツにスキップ

039. hx-request(リクエストの「細かな振る舞い」を調整する)

原理:通信の「性格」をチューニングする

普段は見えない「通信の設定」を覗く

HTMXは、あなたが hx-gethx-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. ステップ・バイ・ステップ解説

  1. 問題の特定: 「通信が遅すぎる」「外部サーバーとの通信でエラーが出る」といった特定の課題がある時に、この属性を思い出してください。
  2. 設定内容の記述: JSON形式({"key": value})で、公式ドキュメントにある特定の単語(timeout, credentials, noHeaders など)を書き込みます。
  3. 確認: ブラウザの開発者ツールの「ネットワーク」タブを見て、設定したタイムアウトやヘッダーが意図通りに反映されているかチェックします。

比較:標準設定 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)です。