B3S
menu close

HTML/CSS

HTMXためしてみた


うどん

公開日:2025/02/28


どうもこんにちは。

もう3月になることが信じられません。うどんです。

会社のシステムを構築する際に、Aのセレクターに連動してBのoptionの内容をかえる、といったことを定期的にしているんですが、この実装をするたびに
「jsonデータを別に用意するの、面倒だな~。DBの取得はほかでもしてるのに、このためだけにjsonデータにするの、なんかヤダ。」
とか思ってたんです。

そんなことをよく考えてる私に、「HTMX」といったものがあるということを知りました。
今回はこのHTMXを試してみます。

HTMXとは

HTMXはHTMLを拡張したJavaScriptライブラリ。
HTMLの属性を通じて、AJAX、CSS Transitions、WebSocketとServer Sent Eventsへのアクセスを提供してくれます。
つまりはデータ通信やページ更新をHTML属性で簡単に定義できるよってことです。

と、公式の記述だけだとわかりにくいのですが、ざっくりいうとHTMXではパーツごとにURLを叩いてくれて、返り値にはHTMLを記載しておくことで表示内容を切り替えるよといったものです。

HTMLで処理を実行し、JavaScriptの記述を少なくするために生まれたようなのですが、実際はどんな感じなのでしょうか。

実装する方法

公式サイト_インストールページ
https://htmx.org/docs/#installing

HTMXはCDNが用意されているので、CDNコードを設置するだけで利用することができます。

ローカルにインポートすることももちろん可能で、その場合はnpmでインストールすることができます。

実際に書いてみた

今回はバックエンドがLaravel(8)、フロントはBootstrap(5)の簡易的な環境にHTMXを追加してみました。
実際のソースを貼っていきます。

routeはこんな感じの内容にしていました。

Controller

Views

ベースになるhtmx.blade.php
※今回はCDNでインストールしてみました。

submit.blade.php

response.blade.php

HTMLを触ってみて思った使えそうな場面

フォーム入力時に部分的に表示を変えたくても、サーバー側で処理を行うと基本は全画面描写をし直すことになっていたかと思うのですが、HTMXの場合は部分的な要素を差し替えられるため、今までjsonレスポンスを返していた部分では使うこともできるのではないかと思いました。
jsonと違っていいことは、バリデーションを通してから検索できることかと思います。

ただこのバリデーションをしようとした際に、ちょっとした苦労がありました。

HTMLのちょっぴり苦労した点

基本的には指定されたアクションをトリガーにHTMLを更新するのがHTMXの機能であるため、バリデーションを使った場合にエラー表示があってもLaravel側にリダイレクト「しない」という設計にする必要があったことでした。
また、バリデーションを通過できたあともviewファイルを返却するのではない場合は記述を変える必要があります。

そうしておかないとHTMLを入れ替えて表示させるHTMXでは無限おなじ内容を入れ子に表示させてしまうのです・・・。
そのため、リダイレクトさせないようにするために、TestRequest.phpを作りました。

このfailedValidationの中で、エラー時はどのviewファイルに返すかということを設定しています。

HTMXを使ってみた感想まとめ

新しいものは調べてみてもわからないことだらけでしたが、HTMXは「HTMLのレスポンスを返却する」という機能であることを想定すると、ほかのライブラリなどと比べると原因もわかりやすい気がしました。

また、トリガーフックも細かく設定できるので、もっとちゃんと調査すれば、さらに使える場面が増えそうなライブラリだとも感じました。
もう少し調査を進めて、実際のシステムにも取り入れようと思います。