htmxは、フロントエンド向けのJavaScriptライブラリです。Reactなどと同様、主にウェブアプリケーションを対象とし、既存のHTMLに力不足を感じて開発された点も共通します。しかし、アプローチは大きく異なります。Reactは、UI構築を力不足のHTMLには依存せずにJavaScriptで制御します。一方、htmxは、力不足のHTMLを拡張して動的機能を実現し
HTMLを拡張する
HTMLの力不足とは、たとえば次の点です。
- HTTPリクエストを発行できるのは、a要素とform要素だけ
- 発行できるHTTPメソッドは、GETとPOSTだけ
- レスポンスによる書き換えは、ページ全体を単位とするだけ
高度で繊細なインタラクションが要求されるウェブアプリケーションには、かなり力不足です。ReactはJavaScriptやJSONを駆使してこの問題の解決に向かいます。一方、htmxは次のようなアプローチをとります。
- あらゆる要素がHTTPリクエストを発行できるようにする
- すべてのHTTPメソッドを発行できるようにする
- レスポンスによってページの一部を書き換えられるようにする
これらをすべてHTMLの延長線上で実現します。具体的には、HTMLに hx-*
形式の独自属性を追加します。たとえば次のものです。
- HTTPリクエストのトリガ:
hx-trigger
- HTTPメソッドの発行:
hx-get
、hx-post
、hx-put
、hx-patch
、hx-delete
- ページの一部の書き換え:
hx-target
、hx-swap
使用例は次のとおりです。
<div id="main">
<button hx-get="/contacts" hx-target="#main" hx-swap="outerHTML"
hx-trigger="click, keyup[ctrlKey && key == 'l'] from:body">
連絡先を取得
</button>
</div>
見慣れない属性こそあるものの、従来のHTMLと同様の記述です。しかし、行っていることはHTMLを大きく超えています。ボタンクリックやキーボードショートカットをトリガにしてGETメソッドを発行し、そのレスポンスによってページの全体ではなく一部
同様のシンプルな記述により、htmxでは多くの動的機能を実現できます。入力データのバリデーションやページング、無限スクロール、インクリメンタル検索など。クライアント側でJavaScriptを書くことなく、です。
ハイパーメディアとして拡張する
もしhtmxに少しでも関心を覚えたようでしたら、ぜひ
「2025年にもなってハイパーメディア?」