JSなしでUIが動く?HTMLだけで画面更新できるライブラリ
朝の出汁版(通勤2分)
- ポイント1: htmxを使うと、JavaScriptを書かずにHTML属性だけでボタンクリックやフォーム送信に応じた画面の部分更新が実現できる。
- ポイント2: バイブコーディングでLPや管理画面を作る際、AIに「htmxで書いて」と指示するだけでJSレスなインタラクティブ画面が生成されやすくなっており、コードの見通しが格段にシンプルになる。
- ポイント3: 公式サイト(htmx.org)のサンプルをそのままAIに渡し「このパターンで問い合わせフォームを作って」と頼むのが、まず触ってみる最速の入り口になる。
出汁の素(深読みモード)
JavaScriptを書かずに画面が動く、という意味
通常、ボタンをクリックして画面の一部だけ更新する(ページ全体をリロードせずにデータを反映する)には、JavaScriptを書く必要があります。ReactやVueといったフレームワークを使うか、少なくともfetchやaxiosでAPIを叩くコードが必要です。
htmxはその前提をひっくり返します。HTMLのタグに属性を追加するだけで、「このボタンを押したらサーバーにリクエストを送り、返ってきたHTMLをこの要素に差し込む」という動作が実現できます。たとえば hx-post="/submit" hx-target="#result" の2行をformタグに書けば、それだけでページ遷移なしのフォーム送信が動きます。
JSフレームワーク全盛のいま、あえてHTMLに立ち戻るアプローチとして注目を集めており、GitHubスター数は約4.9万。枯れたシンプルさを求める開発者コミュニティで支持が根強いライブラリです。
バイブコーディングでhtmxが刺さる理由
AIにコードを生成させる「バイブコーディング」との相性が、htmxの再評価を加速させています。
Reactで管理画面を作らせようとすると、コンポーネント設計・状態管理・ビルド設定まで巻き込んだ複雑なコードがAIから返ってきます。修正のたびにAIへの指示が長くなり、出力も肥大化していく。AIに「余計なコードを書かせない」ツールが登場でも触れたように、AI生成コードの「膨らみ」は今のバイブコーディングの実用上の課題です。
htmxに切り替えると、AIへの指示が「このフォームをhtmxで書いて、送信結果を#resultに表示して」のような短い日本語で済みやすくなります。生成されるコードもHTML中心でシンプルになるため、何が起きているかを人間が把握しやすい。フロントエンドの知識がなくても、出力物の構造を理解しながらAIと往復できる点が強みです。
LP・問い合わせフォーム・簡易管理画面など、「インタラクティブだけど複雑なSPAは要らない」用途にとくに向いています。
htmxでできることとできないことの境界線
触る前に押さえておきたいのは、htmxはあくまで「HTMLとサーバーのやりとりを簡略化するツール」だという点です。
できること:ボタン・フォーム・リンクなどのイベントをトリガーにサーバーへリクエストを送り、返ってきたHTMLを指定した要素に挿入・更新・削除する。ポーリング(定期自動更新)やWebSocketとの連携も属性ベースで書けます。
できないこと(苦手なこと):クライアント側だけで完結するリッチなインタラクション(ドラッグ&ドロップ、リアルタイムのグラフ描画など)は、htmxだけでは難しいケースがあります。また、htmxはサーバーがHTMLを返すことを前提としているため、JSONを返すREST APIとの組み合わせには素直にはまりません。バックエンドにFlask・FastAPI・Railsなど「HTMLを直接返せるサーバー」を用意するか、AIにその構成ごと作ってもらう必要があります。
「フロントはシンプルに、ロジックはサーバー側に寄せる」という設計思想に共感できるかどうかが、向き不向きの分かれ目です。
最初の一手:公式サンプルをAIに渡す
まず触ってみるなら、以下の流れが最速です。
1. 公式サイトのサンプルを確認する htmx.org(https://htmx.org/examples/)には、クリックで要素を差し込む・フォーム送信・無限スクロールなど10種類以上のパターンが短いコードで公開されています。まずここを眺めて、「このパターンが使えそう」と目星をつけます。
2. そのサンプルコードをそのままAIに渡す ClaudeやChatGPTに対して、「このhtmxのサンプル(以下のコード)を参考に、〇〇フォームを作って。バックエンドはPythonのFlaskで、送信結果を#resultに表示して」のように指示します。公式サンプルをコンテキストとして与えることで、AIがhtmxのパターンをそのまま踏襲しやすくなります。
3. ローカルで動かす
htmx自体はCDNから1行で読み込めます(<script src="https://unpkg.com/htmx.org"></script>)。インストール不要で、HTMLファイルとサーバースクリプトだけで動作確認できます。
AIにアーキ図を自動生成させるツールが登場のように、構成を可視化しながら作り進めると、AIとのやりとりでブレが出にくくなります。最初はLP上の問い合わせフォームなど、1機能だけを切り出して試すのが現実的なスタートラインです。
PythonバックエンドとhtmxをセットでAIに設計させる
htmxを使いこなす上で一段踏み込むなら、「フロント(htmx)+バックエンド(Python/Flask or FastAPI)」のセットをAIに一括設計させるアプローチが有効です。
AIへの指示例:「htmxを使ったフォームと、FastAPIでそのフォームのPOSTを受け取ってHTMLフラグメントを返すエンドポイントをセットで書いて。フォームは名前とメールアドレスの入力欄だけ。送信後に#resultに『送信完了』と表示する。」
この指示で、htmxの属性付きHTMLとFastAPIのルーティングコードが一緒に出てきます。重要なのは「HTMLフラグメントを返す」という一言で、これがhtmxの動作原理に沿った設計になります(JSONでなくHTMLを返すこと)。
さらに発展させるなら、htmxのhx-trigger属性を使った「入力中にリアルタイムでバリデーションを返す」パターンや、hx-push-urlでブラウザの履歴を管理するパターンも公式ドキュメントに豊富に掲載されています。GitHubリポジトリ(https://github.com/bigskysoftware/htmx)のissueやdiscussionには実装上のエッジケースも蓄積されており、詰まったときの参照先になります。
参照ソース
- [GitHub]bigskysoftware/htmx→ github.com/bigskysoftware/htmx
- [GitHub]THU-MAIC/OpenMAIC→ github.com/THU-MAIC/OpenMAIC
- [GitHub]tailscale/tailcat→ github.com/tailscale/tailcat
