コンテンツにスキップ

056. hx-trigger-name Header(IDではなく「名前」で自分を証明する)

原理:属性「name」によるアイデンティティの通知

IDだけが自分じゃない

前回の記事(055. hx-trigger)では、通信を発火させた要素の「ID」がサーバーに届く仕組みを学びました。これは非常に便利ですが、開発の現場では「IDを振るのが面倒」だったり、「同じ名前を持つ複数のボタンを区別したい」場合もあります。

そんな時に役立つのが hx-trigger-name ヘッダーです。 その名の通り、要素に付けられた name 属性 の値をサーバーへ伝えます。

通常、name 属性は入力フォームのデータのラベルとして使われますが、HTMXはこの name を「誰からの通信か」という身分証明書としても活用します。


実践:同じ動作をする、異なる名前のボタンたち

1. 複数のボタンを「name」で見分ける(疑似コード)

一括操作のリストなどで、複数のボタンを name で区別する例です。

<form hx-post="/api/batch-action">
    <!-- 同じフォーム内だが、ボタンのnameが違う -->
    <button name="action_approve" value="all">すべて承認</button>
    <button name="action_reject" value="all">すべて却下</button>
</form>

サーバー側でこのヘッダーを読み取る:

// Node.js (Express) の例
app.post('/api/batch-action', (req, res) => {
    const triggerName = req.get('hx-trigger-name');

    if (triggerName === 'action_approve') {
        // 承認のロジック
    } else if (triggerName === 'action_reject') {
        // 却下のロジック
    }
});

2. IDとNameの使い分け

  • ID (hx-trigger): 画面上で世界に一つだけのユニークな名前。特定のピンポイントな要素を指すのに向いています。
  • Name (hx-trigger-name): 「種類」や「ラベル」としての意味合いが強く、同じ種類のアクションをまとめるのに向いています。

どちらのヘッダーもHTMXが自動で飛ばしてくれるため、あなたはサーバー側で「今どっちの名前を知りたいか」を自由に選ぶことができます。

3. ステップ・バイ・ステップ解説

  1. name属性を付ける: 送信ボタンや入力欄に、name="my-action" のように名前を付けます。
  2. 通信の発火: ボタンを押すなどして通信が始まると、HTMXが自動的にその値をヘッダーへ乗せます。
  3. サーバーの処理: サーバーサイドで hx-trigger-name ヘッダーの中身をチェックして、処理を分岐させます。

比較:hx-trigger vs hx-trigger-name

hx-trigger

  • 届く値: 要素の id 属性。
  • イメージ: 「背番号」や「マイナンバー」。個人の特定に強い。

hx-trigger-name

  • 届く値: 要素の name 属性。
  • イメージ: 「役職」や「ラベル」。役割の特定に強い。

まとめ:初心者のための「自己紹介」のバリエーション

hx-trigger-name ヘッダーは、IDに縛られすぎない柔軟な開発を実現するための隠し味です。

  • フォームとの親和性: 従来のHTMLフォームでも name は必須の属性でした。その慣習をそのままHTMXの高度な通信に活かすことができます。
  • コードの読みやすさ: 「action_delete」といった名前が付いたヘッダーを受け取ることで、サーバー側のコード(if 文など)がぐっと直感的になります。
  • 二重の証明: もし不安なら、IDとNameの両方をチェックすることも可能です。

自分をどう名乗るか。IDだけでなく name も活用して、サーバーとの対話をより柔軟で、豊かで、間違いのないものにしてください。次の記事では、通信が長引いた時の「諦め時」を決める Timeout(057. Timeout)の設定について解説します。