
2026/08/28 22:28
Htmx 4.0
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
htmx 4.0.0 では、XMLHttpRequest など従来の手法をフェッチ(fetch)インタフェースなどの現代のブラウザ API に置き換えるという大きな内部変更が導入されました。この更新により、
hx:xhr:* のような古来のイベント属性は標準化された名前(例:htmx:before:request)へと置き換えられ、hx-disable といった非推奨要素は hx-ignore に置換されます。移行を支援するため、テンプレートにおけるエラー(付与不足や削除された属性の使用など)をスキャンするコマンドラインツール($ npx htmx.org@4.0.0 upgrade-check)がリリースされています。重要なアーキテクチャ変更として、以前の自動継承からの変更となり、子要素への適用を望む場合、親属性に対して明示的に :inherited サフィックスを追加する必要があります。本リリースには、「morph swaps」(<hx-partial> タグを通じて)、hx-live という名前のスクリプトリングティングソリューション、そして hx-preload やストリーミングサポートなどを含むいくつかの新しい拡張機能が含まれています。履歴管理については、デフォルトで localStorage が使用され不再;代わりに、ステアジングが必要なチームのために、hx-history-cache 拡張機能を通じて sessionStorage を介したキャッシングが可能になります。移行には、バージョン 2.x がバージョン指定なしの CDN で 2027 年初頭まで引き続き利用可能である一方、バージョン 4.0.0 は特定の CDN URL(https://unpkg.com/htmx.org@4.0.0/dist/htmx.min.js)でアクセス可能です。アップグレードを行う企業は、非推奨要素を置換し、履歴キャッシングロジックをこれらの標準化された振る舞いと整合させる必要があります。本文
htmx 4.0.0 リリース
htmx チームより、htmx 4.0.0 のリリースを発表します!本プロジェクトには 8 ヶ月(およびゲーム開発)を要し、その成果に満足を覚えます。
背景
-
htmx 4 のアイデアは、「fixi」というプロジェクトの立ち上げから生まれました。
-
この過程で、JavaScript の
API や非同期プログラミングへの理解が深まりました。(htmxy は以前逆互換性の理由からfetch()
を使用していました)XMLHttpRequest -
開発のきっかけ:
- ストリーミング HTML に関するアイデアを持つ Christians 氏からご連絡をいただき、内部処理を
に移行することでシンプルになる可能性を感じました。fetch() - その後、マイケルとアレックスも加わり、開発が加速しました。
- ストリーミング HTML に関するアイデアを持つ Christians 氏からご連絡をいただき、内部処理を
-
開発プロセス:
- fixi と htmxy のテストスイートを移植し開始しました。
- 旧挙動を再認識しつつ、新しい実装で徐々に近似させていく方式を取りました。
- 現在、2.x と 4.x の間での挙動差異は少数です。
- Web サービスとして100 年以上健在になるように、明確な意思決定のもと差異への対応を進めています。
-
バージョン戦略について:
- NPM では 4.0 を最新版としてマークしておりません。これは、CDN URL でバージョン指定を含まずに依存しているユーザーを強制アップグレードさせないためです。
- 結果として、2.x が引き続き「最新版」として維持され、4.0 ラインは少なくとも 2027 年初期 まで「次期版」として残ります(※本ウェブサイトでは 4.0 を参照しています)。
メジャーな変更点
ユーザー視点から見ると htmxy 4 は htmxy 2 とほぼ同様ですが、主な変更点は以下の 3 つです:
- 属性の継承:もはやデフォルトで暗黙的ではなく、明示的に指定する必要があります(最大のアップグレード項目)。
- htmxy イベント名:標準化・整理されました。一部の高度なユーザーはイベントの変更が必要になるかもしれません。
- 履歴機能:
をデフォルトでは使用しないように変更されました(サポートトラブルの主要原因だったため)。多くのユーザーには目立った変化はありません。localStorage
※内部では
XMLHttpRequest から fetch() への移行を行いましたが、利用者の大半にとっては透明です。
属性の継承
htmxy 2 では多くの属性がデフォルトで「継承」されました(親要素に設定すれば子要素にも適用)。これは CSS にインスパイアされた挙動ですが、理解しにくい側面もありました。
htmxy 4 の対応方法:
- 属性を継承させるには、
というサフィックスを明示的に指定する必要があります。hx-attr:inherited
などの属性は不要になり、削除されます。hx-disinherit
コード例の比較
<div hx-confirm="Are you sure?"> <button hx-delete="/item/1">Delete</button> </div>
<div hx-confirm:inherited="Are you sure?"> <button hx-delete="/item/1">Delete</button> </div>
- これを容易にするため、継承が必要な箇所を検出するコマンドラインツールを提供しています。
イベント
htmxy 2 のイベントは機能的に成長しましたが、整理不足によりどのイベントが発火しているかが把握しにくかったのが実情でした。
htmxy 4 の変更点:
- すべてのイベントが
の形式に従います。htmx:phase:action[:sub-action]
| htmxy 2 | htmxy 4 |
|---|---|
| |
| |
| |
| |
| |
その他のイベント変更
- 大半のエラーイベントが
に統合されました(HTTP エラーレスポンス時:htmx:error
)。htmx:response:error
イベントは削除されました(htmx:xhr:*
へ移行したため)。fetch()
イベントは、ブラウザ固有のフォーム検証機能への譲歩として削除されました。htmx:validation:*
※詳細な一覧は「htmxy 4 の新機能」を参照してください。 コマンドラインのアップグレードチェッカーは、旧イベント名(
hx-on 属性や JS コード内)をフラグ付きで報告します。
ヒストリ(履歴)機能
htmxy 2 では
localStorage を利用してページのスナップショットを保持し、バックボタンの遷移時に復元していました。
問題点:このスナップショットにはサードパーティ製 JavaScript ライブラリによる DOM 変異が含まれることがあり、ページ復元時にロジックが適用されないトラブルが多発しました。
htmxy 4 の対応方法:
にキャッシュしない方式に変更されました。localStorage- バックボタンの遷移時に htmxy はページを再取得し、以下のようにスワップします:
タグ内にスワップするか、存在する場合<body>
の要素内へスワップ。[hx-history-elt]- これによりサードパーティ製ライブラリの動作を保ちつつ、適切なリクエストキャッシュによる高速化を実現しています。
ローカルキャッシングの代替手段
もしローカルでのキャッシングを希望される場合は、
sessionStorage から履歴を復元する hx-history-cache エキステンションをご利用ください(Alpine.js などのスクリプト解決ソリューションとの統合も最適化されています)。
ニュートな機能
htmx 4 では以下に大きな期待がかかる 2 つの新機能が搭載されています:
Morph Swaps(形態置換)
- htmx 本体でそのままモーフィング系 swap をサポートするようになりました。
- 元々は
ライブラリ作成者のアイデアでしたが、htmx への統合が大幅に改善されシームレスに行われました。idomorph
<hx-partial>
<hx-partial>- アウトオブバンド系 swap と似ていますが、単一要素の置き換えだけでなく複雑な処理にも適しています。
<hx-partial hx-target="#messages" hx-swap="beforeend"> <div>New message</div> </hx-partial> <hx-partial hx-target="#count"> <span>5</span> </hx-partial>
エキステンション
htmx 4 では内部処理の
fetch() 移行に伴い、エキステンションの再考が進み、多くの新機能が生まれました。
既存・主要なエキステンションの更新
:コンテンツを事前ロード(例:マウスオーバー時)してリクエスト速度を向上。hx-preload
:ネイティブかつ fetch ベースのファイルダウンロード。hx-download
:htmx と Alpine.js の間での互換性問題を解消。hx-alpine-compat
:履歴をhx-history-cache
にキャッシュし、Alpine.js との互換性を確保。sessionStorage
ストリーミング HTML エキステンション(新規/更新)
:text/event-stream を経由したストリーム。hx-sse
:WebSocket を経由したストリームおよび送信。hx-ws
:multipart/mixed を経由したストリーム。hx-multipart
フロントエンドスクリプト解像ソリューション
:Alpine.js、jQuery、hyperscript にインスパイアされ、フロントエンドスクリプトをより楽しいものにします(DOM ベースの HATEOAS フレンドリーなリアクティビティをサポート)。hx-live
バンドル:htmxy と最も人気のあるエキステンションを単一ファイルにパッケージ化し、選択の手間を省けます。htmax.js
アップグレード
完全なアップグレードガイドは「htmxy 4 の新機能」を参照してください。
アップグレードチェッカー(コマンドラインツール)
アップグレードを手助けするためのコマンドラインツールを提供しています。
$ npx htmx.org@4.0.0 upgrade-check -- ./templates
- 対応ファイル拡張子:
,.html
,.php
,.js
,.ts
,.jinja
,.jinja2
,.j2
,.erb.hbs- 追加の場合:
を使用(例:--ext
)--ext .vue --ext .svelte
- 追加の場合:
- 出力の例:
Scanning 1 file(s)... Found 8 issue(s) in 1 of 1 file(s). templates/index.html:1: [inheritance] hx-headers needs :inherited suffix (descendant on line 3 has hx-delete) (this looks like a CSRF token; without :inherited the header does not reach child elements and the server rejects the request) templates/index.html:2: [inheritance] hx-target needs :inherited suffix (descendant on line 3 has hx-delete) templates/index.html:2: [inheritance] hx-confirm needs :inherited suffix (descendant on line 3 has hx-delete) templates/index.html:3: [renamed-attr] hx-disable -> rename to hx-ignore (hx-disable now means 'disable during request') templates/index.html:4: [removed-attr] hx-vars is removed -> use hx-vals with js: prefix templates/index.html:4: [removed-attr] hx-prompt is removed -> load the hx-prompt extension to keep the same syntax templates/index.html:9: [old-event] old event name "htmx:afterRequest" -> "htmx:after:request" templates/index.html:9: [old-api] htmx.addClass() is removed -> use element.classList.add()
インストール
htmx 4.0 は、バージョン管理可能なパッケージマネージャー(例:npm)経由、または CDN リンクによりインストール可能です。
<script src="https://unpkg.com/htmx.org@4.0.0/dist/htmx.min.js"></script>
あるいはダウンロードすることもできます。
LLMs
大規模言語モデル(LLM)向けに、以下のスキルファイルを提供しています:
:htmx 4 で開発するためのコアな htmxy スキル。htmx-guidance
:開発中の htmxy 問題の診断。htmx-debugging
:htmx 4 エキステンションの作成とデバッグ。htmx-extension-authoring
:htmx 2.x から 4.x へのコードベース移行。htmx-upgrade-from-htmx2
結論
htmx 4 を楽しんでいただけることを願っています。htmx 2 は引き続き長期間サポートされる予定ですので、アップグレードにプレッシャーを感じることなくご検討ください。
ご尽力いただいた皆様へ(感謝)
- Michael West:驚異的なチームメイトであり、直感的で創造的な開発者。
- Christian Tanul:htmx 4 のアイデアを提案し、ストリーミングおよびライブ系エキステンションをリード。
- Alex Petros:シップ(リリース)を安定した軌道に保ってくれた。
- Stephen Mitchell:ゲームの天才的な頭脳。
- Stu Kennedy:WebSockets エキスペート。
- André Ahlert Jr.:IDE とエディタサポートを提供。
- Dien Hoa Truong:早期の htmxy 4 でテスト走行を行い、多くのバグ修正を支援。
アップグレードミュージック
htmx のアップデートにはアップグレードミュージクが不可欠!