HyperGen

ADR-003: インタラクティビティレイヤーとしてのHTMX

HyperGenがカスタムJavaScriptフレームワークやJSONベースのインタラクションモデルの代わりにHTMX属性をインタラクティビティに使用する理由。

ステータス: 承認済み 日付: 2026-03-28


コンテキスト

HyperGenのコアテーゼ(ADR-001参照)は、HTML自体がGenerative UIのプロトコルであるべきだということです。しかし静的HTMLだけでは不十分です — ユーザーにはインタラクティブなインターフェースが必要です: 送信するフォーム、更新するコンテンツ、クリックに応答するウィジェット。

問題は: エージェントに複雑なJavaScriptの生成を要求せず、クライアントに重いフレームワークのインストールを要求せずに、エージェント生成HTMLにインタラクティビティをどう追加するか?

Anthropicの知見

ClaudeのGenerative UIアプローチ(Saurabh Singhのアーキテクチャ分析で文書化)は重要な知見を実証しています: LLMは生のHTMLとCSSの生成に優れている。 ClaudeはインターフェースのJSON記述ではなく、完全なスタイル付きインターフェースを生成します。

これが機能する理由:

  1. LLMはどんなJSON UIスキーマよりもはるかに多くのHTML/CSSで学習されている。 WebのコーパスはHTML。生成品質と信頼性は本質的に高い。
  2. HTML + CSSは自己完結。 ビルドステップ不要、バンドラー不要、フレームワークランタイム不要。出力がそのままUIになる。
  3. CSSカスタムプロパティがデザインシステム統合を可能にする。 --color-surface--color-accentなどを定義することで、ホストアプリケーションのデザインシステムが自動的に生成UIに流れ込む。

しかし、Anthropicのアプローチは生成されたUIをインタラクティブにするために重要なインフラストラクチャを必要とする:

  • ストリーミングツールコール引数のための部分JSONパース
  • インクリメンタルDOM差分のためのMorphdom
  • カスタムスクリプト実行(<script>タグをプログラム的に作成された要素で置換)
  • 双方向通信ブリッジ(window.sendToAgent

ここでHTMXが登場します。 HTMXはこれらすべてのインタラクティビティを — 宣言的に、HTML属性で、カスタムインフラストラクチャゼロで提供します。


決定

HyperGenはインタラクティビティレイヤーとしてHTMXを採用します。 エージェントはHTMX属性付きのHTMLを生成してインタラクティブUIを作成。ホストアプリケーションはHTMX(14KB、単一スクリプトタグ)を含めてこれらの属性を処理。

HyperGenが生成するもの

HyperGen準拠のエージェントは、3つのレイヤーで構成される完全なUIアーティファクトを生成します:

1. HTML構造(必須)

インタラクティビティのためのHTMX属性付きセマンティックHTML:

<form hx-post="/api/agent/submit" hx-target="#result" hx-swap="innerHTML">
  <input type="text" name="query" placeholder="Ask a question..." />
  <button type="submit">Send</button>
</form>
<div id="result"></div>

これは単なるHTML。LLMはこれを段落を書くのと同じように自然に生成します。

2. CSSスタイリング(HTMLと並行して生成)

ホストのCSSカスタムプロパティを使用するインラインスタイルまたは<style>ブロック:

<style>
  .hg-card {
    background: var(--hg-surface);
    color: var(--hg-text);
    border: 1px solid var(--hg-border);
    border-radius: var(--hg-radius);
    padding: var(--hg-space-4);
  }
  .hg-btn {
    background: var(--hg-accent);
    color: var(--hg-accent-foreground);
  }
</style>

Anthropicのアプローチに従い: エージェントはCSS変数経由でホストのデザイントークンを参照するCSSを生成。ホストがこれらの変数を定義し、エージェントが使用する。スタイルの競合なし、CSS-in-JSランタイムなし。

3. JavaScript(最小限、必要な場合のみ)

ほとんどのインタラクティビティはHTMX属性だけで処理されます。追加の動作が必要な場合(ローカル計算、アニメーション、チャートレンダリングなど)、インライン<script>ブロックが含まれます:

<script>
  // Local-only logic that doesn't need server round-trips
  document.querySelector('#slider').addEventListener('input', (e) => {
    document.querySelector('#value').textContent = e.target.value;
  });
</script>

重要な原則: JavaScriptはクライアントローカルの動作用。サーバー通信は常にHTMX属性を通じて行う。


なぜHTMXなのか

検討した代替案

アプローチ利点欠点
生JavaScript最大の柔軟性LLMが生成するJSは信頼性が低い; innerHTMLではスクリプトが実行されない; 宣言的パターンなし
Alpine.js軽量、宣言的別のDSL追加(x-datax-on); HTMXよりエコシステムが小さい; クライアントサイド状態に焦点、サーバー通信ではない
Stimulus (Hotwire)HTMLセントリック、Railsで実証済みコントローラー登録が必要; Railsエコシステム偏重; より複雑なメンタルモデル
カスタム属性完全な制御HTMXが存在するのに独自の属性システムを発明するのは不要; エコシステム、コミュニティ、ドキュメントなし
HTMXHTMLネイティブ、14KB、依存関係ゼロ、大規模エコシステム、LLMフレンドリーWeb限定(ADR-001で許容可能なトレードオフ)

HTMXが勝つ理由

1. LLMが完璧に生成できる。

HTMX属性は単なるHTML属性。新しい構文なし、DSLなし、コンパイルステップなし。<a href="...">を書けるLLMなら<button hx-get="/data" hx-target="#output">を書ける。学習データには何百万ものHTMXの例が含まれています。

2. JavaScriptなしのインタラクティビティ。

HTMXはClaudeのGenerative UIアーキテクチャで特定された5つの問題を解決します:

問題ClaudeのソリューションHyperGen + HTMXソリューション
HTMLとテキストの混在構造化ツールコール構造化ツールコール(同じ)
スクリプトが実行されない手動スクリプト置換HTMX属性 — サーバーインタラクションにスクリプト不要
ストリーミングなし部分JSON + MorphdomSSE拡張(hx-ext="sse")— HTMXに組み込み
デザインシステムなしCSS変数CSS変数(同じアプローチ)
インタラクティビティループなしwindow.sendToAgentブリッジhx-post/hx-get — エージェントへの標準HTTP

3. ストリーミングがファーストクラス。

HTMXのSSE拡張がプログレッシブレンダリングをネイティブに実現:

<div hx-ext="sse" sse-connect="/api/agent/stream" sse-swap="message">
  <!-- Content appears here as the agent generates it -->
</div>

Morphdomなし。部分JSONパースなし。カスタムストリーミングインフラなし。HTMXが処理します。

4. 双方向通信が組み込み。

ユーザーが生成されたUI(ボタンクリック、フォーム送信)を操作すると、HTMXがサーバーに標準HTTPリクエストを送信します。エージェントはこれを新しい入力として受信し、更新されたHTMLで応答できます。Claudeのwindow.sendToAgentと同じフィードバックループですが、標準Webメカニクスを使用しています。

5. プログレッシブエンハンスメント。

HyperGen UIは3つのレベルで動作:

  • HTMXなし: 静的HTMLがレンダリング。リンクとフォームは標準ナビゲーションで動作。機能は低下するが動作する。
  • HTMXあり: hx-*属性による完全なインタラクティビティ。ページリロードなし。ストリーミング動作。
  • HTMX + インラインJS: 拡張されたローカル動作(アニメーション、計算、チャート)。

6. 14KB、依存関係ゼロ。

HTMXは単一のスクリプトタグ。npm installなし。ビルドステップなし。推移的依存関係グラフなし。HyperGenの哲学に完璧に一致。


HyperGenコンテキストでのHTMX属性

以下のHTMX属性がGenerative UIに最も関連します:

属性HyperGenでの目的
hx-get / hx-postユーザーアクションをエージェントエンドポイントに送信
hx-targetエージェントのレスポンスを受信するDOM要素を指定
hx-swap新しいHTMLが既存コンテンツをどう置換するか制御(innerHTMLouterHTMLbeforeendなど)
hx-triggerリクエストがいつ発火するか定義(clicksubmitloadrevealedevery 2sなど)
hx-ext="sse"エージェント出力のストリーミング用Server-Sent Eventsを有効化
sse-connectエージェントのSSEエンドポイントに接続
sse-swap名前付きSSEイベントからコンテンツをスワップイン
hx-valsリクエストに追加データを含める(エージェントへのコンテキスト)
hx-indicatorエージェントレスポンス待機中のローディング状態を表示
hx-confirm破壊的アクション送信前にユーザーに確認を促す

結果

ポジティブ

  • 最小限のクライアントインフラストラクチャ。 1つの<script>タグ(HTMX)が、Morphdom、部分JSONパーサー、カスタムストリーミングコード、双方向ブリッジを置き換える。
  • LLM生成の信頼性。 HTML属性はLLMの最も強力な生成領域。JSONスキーマバリデーション不要。
  • 標準Webパターン。 HTTPリクエスト、SSE、HTMLフラグメント — すべて実戦テスト済み、充分に文書化、広く理解されている。
  • プログレッシブエンハンスメント。 生成されたUIはHTMXがロードされなくても機能する。

ネガティブ

  • Web限定。 HTMXはブラウザ技術。ネイティブモバイル/デスクトップアプリにはWebViewが必要。(許容可能なトレードオフ — ADR-001参照。)
  • インタラクション時のサーバーラウンドトリップ。 すべてのユーザーアクションがHTTPリクエストをトリガー。高頻度のインタラクション(ドラッグ&ドロップ、リアルタイム描画)には代わりにインラインJavaScriptが必要。
  • LLMにとってのHTMX学習曲線。 HTMX属性はシンプルなHTMLだが、LLMが正しく使用するためにプロンプトエンジニアリングやシステム指示が必要な場合がある。仕様が推奨プロンプトパターンを定義する。

オープンクエスチョン

  • HTMXバージョンの固定。 HyperGenは特定のHTMXバージョンをターゲットすべきか、機能セットをターゲットすべきか? HTMX 2.xが現在の安定版。
  • 拡張戦略。 HTMXには拡張(SSE、WebSocketなど)がある。どの拡張がHyperGen仕様の一部で、どれがオプションか?
  • HTMX属性のサニタイズ。 hx-gethx-postは任意のURLをターゲットにできる。セキュリティモデル(将来のADR)でどの属性が安全でどれがサニタイズを必要とするか定義しなければならない (MUST)。

参考資料

目次