プログラミング フレームワーク ソフトウェア 公開日 2026.05.15 更新日 2026.05.20

htmx とは何か?HTML 属性で SPA 的な動きを実現する手法と React との使い分け

htmx は HTML 属性(「hx-get」 「hx-post」など)だけで SPA 的な動きを実現する小さな JavaScript ライブラリです。サーバ側で HTML 断片を返すモデルに戻すことで、「React 一辺倒の SPA 設計に違和感」を感じる現場で再評価されています。考え方・React との違い・採用判断軸を整理します。

先に要点

  • htmx は、「hx-get」 「hx-post」のような HTML 属性だけで部分更新やインタラクションを実現する 小さな JavaScript ライブラリ。フロントエンドフレームワークではなく、HTML を直接拡張する道具。
  • サーバは JSON ではなく HTML 断片を返す。「UI の状態はサーバが知っている」 「クライアント側に状態管理を作りすぎない」 という、SPA 一辺倒の流れと逆方向の設計が特徴。
  • Rails / Laravel / Django / Phoenix / Go のテンプレートエンジンと相性が良く、「サーバ側で HTML を組み立てる文化」を持つ案件で再評価が進んでいる。「React + REST API は重い」と感じる中小規模 Web で特に効く。
  • 万能ではない。クライアント側で複雑な状態を持つ UI(リッチエディタ、ゲーム、大規模ダッシュボード)」には不向き。「サーバ駆動で十分な UI かどうか」を見極めるのが採用判断の中心。

「htmx ってよく聞くけど、React の代わりなの?」 「HTML 属性だけで動くって、jQuery と何が違うの?」 「Rails 復権の話と関係ある?」 ── 2023年頃から、SPA フレームワーク疲れの文脈で htmx の名前を見る機会が一気に増えました。

ざっくり言うと、htmx は 「 HTML だけでサーバとの通信を書ける」ようにする小さなライブラリ です。 「SPA は重い」 「JSON API を作るだけで仕事が倍になる」 「状態管理の闇に毎回ハマる」── そんな現場の疲労感に対して、「 サーバが HTML を返す古典的な Web の仕組みに、ちょっとだけモダンな部分更新を足す」 というアプローチで応えるのが htmx の立ち位置 です。

この記事では、2026年5月時点の htmx の状況をベースに、何ができるか・React との違い・どこで効くか・どこでは不向きか・採用判断 を、Rails / Laravel / Django などのサーバサイド経験者でも、React 経験者でも追える粒度で整理します。

htmx の核心 — HTML を拡張する小さな JS

htmx の本体は 1ファイルの小さな JavaScript(2026年5月時点で gzip 後 14KB 程度)で、それを読み込むと HTML に 「hx-*」属性 が使えるようになります。

<button hx-get="/users/42/profile" hx-target="#profile">プロフィールを開く</button>
<div id="profile">(ここに HTML が差し込まれる)</div>

このボタンを押すと、ブラウザは 「/users/42/profile」に GET リクエストを送り、返ってきた HTML 断片を 「#profile」要素の中に差し込む という挙動になります。 「JavaScript を1行も書かずに部分更新ができる」のが、htmx の体験を一言で表す部分です。

代表的な属性

「hx-get」 「hx-post」 「hx-put」 「hx-delete」(HTTP メソッド)、「hx-target」(差し込み先)、「hx-swap」(差し込み方)、「hx-trigger」(発火条件)、「hx-vals」(送信値)。これだけ覚えれば多くの UI は組める。

サーバが返すもの

JSON ではなく HTML 断片。「プロフィールカードの HTML」 「テーブル行の HTML」 「モーダルの中身の HTML」など、「そのまま挿入できる形」で返す。

クライアント側の状態

持たない。「UI の状態 = サーバが返してきた HTML の現在形」。「React の useState で迷う」ような場面が原理的に減る。

SSR との関係

HTML が中心なので、SSR ファーストなフレームワーク(Rails / Laravel / Django / Phoenix / Hono + JSX 等)と自然に組み合わせられる。

SPA を作るために生まれた」のではなく、SPA を作らずに済むようにするための仕組み と捉えると、htmx の存在意義が見えてきます。

ハイパーメディア駆動 — HATEOAS の現代的解釈

htmx の思想的な背景は、「HATEOAS」(Hypermedia As The Engine Of Application State)という Web 本来の設計哲学を、現代的に再解釈したものです。

古典的な Web の発想

「 次に何ができるか」はサーバが返した HTML に含まれている。「このユーザーは編集できるか」 「削除できるか」はサーバが UI に書き込んで返す。クライアントは深いことを知らない。

SPA 時代に失われたもの

JSON ベースの API では、「いま何ができるか」をクライアント側で再計算する必要がある。「権限ロジックがフロントとバックに二重実装される」のはよくある問題。

htmx が戻す視点

サーバが HTML(= 次のアクションを内包したハイパーメディア)を返す形に戻すと、「今できることはサーバが決めて、クライアントはそれを表示するだけ」にできる。

ハイパーメディアの効用

API バージョニング、フロントとバックの認識ずれ、「画面と整合しないボタンが表示されてしまう」タイプのバグ ─ これらを構造的に減らせる。

「昔の Web に戻る」のではなく、Web 本来の強みを現代的な道具で取り戻す というのが htmx の哲学です。 このあたりは作者の Carson Gross が公開している Hypermedia Systems という無料書籍に詳しくまとまっています。

React / SPA との比較

React で書くこと」と 「htmx で書くこと」を並べると、何が違うかが立体的に見えます。

React + REST API htmx + サーバサイド
状態の場所 クライアントとサーバの両方で持つ 主にサーバ。クライアントは表示専門
サーバが返すもの JSON HTML 断片
必要なフロント実装 コンポーネント / hooks / 状態管理 / ルーティング テンプレート(blade / erb / jinja 等) + 少しの hx-*
JS フットプリント 大きい(数百KB 〜 MB) 小さい(htmx 本体 14KB 程度)
権限ロジック サーバとフロントで二重に書きやすい サーバ側に集約しやすい
得意な UI リッチで動的、複雑な状態の SPA CRUD、業務系、コンテンツサイト
不得意な UI シンプルな業務 UI(オーバーキル感) リッチエディタ、リアルタイム、ゲーム

要点は 「 どこに複雑性を置くか」の選択 です。 React は 「クライアントに複雑性を引き取って、サーバを薄くする」、htmx は 「サーバに複雑性を残し、クライアントを薄くする」。どちらが正解ではなく、業務の性質と既存のスタックに合うほう を選ぶ、という構図になります。

どこで効くか — htmx 向きの案件

実務で htmx が 「効く」場面を整理します。

①業務系 Web アプリ

社内ツール、管理画面、CRM、入力フォーム中心の業務システム。「画面遷移 + フォーム送信」の世界で、SPA 化のコストに見合わないケースが多い。

② コンテンツサイト / メディア

ブログ、ニュース、ドキュメントサイトのような 「読む」中心の UI。「いいねを押すと色が変わる」程度の動きは htmx で十分。

Rails / Laravel / Django の既存案件

サーバ側で HTML を組み立てる文化が既にある。「React 化のために API を二重実装」するコストを払わずに、現代的な UX に近づけたいケース。

④ 個人開発 / スタートアップの初期

小さいチーム / 1人開発 では、「フロントとバックを別人格で持つ」のはオーバーヘッド。htmx で 「1人開発の総工数を縮める」効果が大きい。

「シンプルな CRUD + ちょっとした非同期」で済む UI のかなりの部分は、htmx で十分実装できます。 特に SPA にしたが大して使いこなしていない案件 ほど、htmx 化のリターンが大きい印象です。

どこで詰まるか — htmx の限界

逆に、htmx が向かないケースもはっきりしています。

①複雑なクライアント側状態

巨大フォームの動的バリデーション、リッチテキストエディタ、グラフィカルなフローエディタ ─ こうした 「クライアントが状態を持たないと話にならない」UI は React / Vue / Svelte の領分。

② オフライン対応 / PWA

htmx はサーバ前提なので、「オフラインでも動く UI」は構造的に苦手。PWA + Service Worker 前提の案件は別アプローチが必要。

ネイティブアプリと UI を共有したい

React Native などで 「モバイルと同じコンポーネントを Web でも使いたい」案件では、HTML 断片を返す htmx 系では合わない。

④ 大規模なフロントチーム

「 数十人のフロントエンドエンジニアで分業する」ようなチームでは、「コンポーネント単位での分担」を可能にするフレームワーク(React / Vue 等)の方が運用に向く。

「htmx だと書けないわけではない」が、「書ける範囲を超えると無理が出やすい」というのが正確な表現です。 UI 全体の複雑さの真ん中に、クライアント状態がガッツリ存在するかどうか が、採用可否の一番大きな判断軸になります。

Rails / Laravel / Django との相性

htmx は サーバ側で HTML を組み立てるフレームワーク と非常に相性がよく、特に Rails / Laravel / Django の案件で再評価が進んでいます。

Rails + Turbo / Stimulus との関係

Rails 公式の Hotwire(Turbo / Stimulus)も 「HTML over the wire」の思想で htmx と近い。「Rails ならまず Hotwire、それ以外なら htmx」 という棲み分けが現実的。

Laravel(Blade)との組み合わせ

Blade テンプレートで HTML 断片を返すコントローラを作るだけ。Inertia / Livewire / htmx の3択になりがちで、「軽さ重視なら htmx」 が選ばれる。

Django との組み合わせ

「 django-htmx」のようなヘルパー拡張があり、HTML 断片を返す view を簡単に書ける。「htmx + Django」 はコミュニティでも人気の組み合わせ。

Phoenix / Elixir(参考)

Phoenix LiveView と同じ系統の発想だが、htmx は技術的にもっとシンプル。「プロトコルWebSocket かどうか」が大きな違い。

「SPA + REST API」 が標準だった2010年代の流れに対して、「サーバが HTML を返す」 系がじわじわ復活していて、その代表的なライブラリの1つが htmx、というのが2026年現在の景色です。

AI 時代の htmx 観

AI 時代に htmx が再評価される文脈もあります。

AI でコードを生成しやすい

「HTML + サーバテンプレート」 はテキストとしてシンプルで、LLM が出力しやすい / 読みやすい構造。「React のコンポーネントツリーを把握させる」より低コスト。

小さなアプリを爆速で立てたい

AI で素早くプロトタイプを作るときに、「SPA を立てる手間」 を省略できる。v0 で UI のたたき台を作る ような流れと、「そのまま手早く動かす」選択肢として並ぶ。

サーバ駆動 UI と AI

ChatGPT のような UI」 は実は htmx と相性が良い。「サーバが次に表示する HTML を返す」 という発想で、AI チャットや AI ワークフロー UI を素直に作れる。

フロント実装の 「軽量化」 圧力

AI で開発スピードが上がるほど、「重い SPA を作る労力に見合うか」 が問われる。「軽い htmx で済むなら htmx」 という判断が経済的に成立しやすくなる。

「React か htmx か」 ではなく、「 どの UI を htmx で、どの UI を React で書くか」 を意識して選ぶ時代 に入りつつあります。 すべてを SPA で書く時代は徐々に終わり、「 道具を使い分ける成熟期」 に入っている、というのが大きな流れです。

htmx に関するよくある質問

Q. htmx と jQuery の違いは何ですか?

A. jQuery は 「任意の DOM 操作を JS で書きやすくする汎用ライブラリ」、htmx は HTML 属性で部分更新を宣言する専門ライブラリです。jQuery は 「何でも書ける」 反面、コードが散らかりやすい。htmx は 「できることが意図的に絞られている」 ので、HTML がそのまま設計図になります。

Q. React を学ばずに htmx だけで仕事できますか?

A. 業務系 / 管理画面中心の案件であれば十分に可能です。` 業界全体では React 系のスキルも依然として必須に近い ので、「htmx も覚える」 か 「React + htmx 両方の使い分けができる」 立ち位置を目指すのが、キャリア上の柔軟性を保ちやすいです。

Q. SEO に htmx は不利ですか?

A. むしろ 有利に働くことが多い です。サーバが HTML をフルレンダリングして返すモデルなので、「SSR / SSG と相性が良く、クローラに優しい」 状態を作りやすい。SPA の 「JS を実行しないと中身が見えない」 問題と無縁です。

Q. 認証 / 認可はどう扱いますか?

A. サーバ側で従来通りに扱う のが基本です。「セッション Cookie + サーバ側のロールチェック」 という Web 標準のやり方で十分。「API トークンJWT をクライアントで管理する」 という SPA 的な複雑さを抱える必要が少ないのも htmx の利点です。

Q. JavaScript で複雑な処理を書きたいときはどうしますか?

A. htmx は他の JS ライブラリと併用しやすい設計です。「Alpine.js」 のような小さな状態管理ライブラリ、または必要箇所だけ vanilla JS / Hyperscript を使うのが定番です。「巨大な状態管理が必要」 ならその時点で 「React の方が向く」 と判断するのが健全です。

Q. htmx でリアルタイム更新はできますか?

A. できます。「Server-Sent Events(SSE)」 や 「WebSockets」 のサポートがあり、「hx-sse」 「hx-ws」 属性で実装できます。チャット / 通知バッジ / リアルタイム集計などは、軽量実装で十分対応できる範囲です。

Q. テストはどう書きますか?

A. サーバ側のテスト が中心になります。「/users/42/profile が期待した HTML 断片を返すか」 を統合テストで確認すれば、UI の正しさはほぼ担保できます。「E2E テスト(Playwright / Cypress)」 で 「クリック → 部分更新が反映される」 ところまでカバーすれば十分なケースが多いです。

参考リンク

あとで見返すならここで保存

読み終わったあとに残しておきたい記事は、お気に入りからまとめて辿れます。