
2026/01/25 4:12
**JSON‑Render** LLMベースの JSON → UI ツール
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
## 改良された要約 本文では、`@json-render/core` の `createCatalog` を使ってコンポーネントカタログを作成し、完全に機能する Next.js UI を迅速に構築する方法について説明しています。カタログ内で再利用可能なコンポーネントを定義します。例えば: - **Card** – props: `title`(文字列)、オプションの `description`(nullable 文字列);子要素をサポート。 - **Metric** – props: `label`(文字列)、`valuePath`(JSON‑Pointer 文字列)、`format` (`currency` | `percent`)。 - カタログにオプションで **Chart** コンポーネントも含めることができます。 `export { format }` のようなアクションを追加することも可能です。ユーザーがシステムにプロンプトすると、カタログに制限された JSON ツリーが出力されます。収益ダッシュボードの例としては、次のような出力になるでしょう: ```json { "key": "dashboard", "type": "Card", "props": {"title":"Revenue Dashboard","description":null}, "children":[{"key":"revenue","type":"Metric","props":{"label":"Total Revenue","valuePath":"/metrics/revenue","format":"currency"}}] }
JSON はストリームが到着するたびに React コードへ段階的にレンダリングされ、UI が更新されます。ガードレールはカタログ化されたコンポーネントのみを使用できるよう保証します。この UI をエクスポートすると、
package.json、コンポーネントファイル(オプションの Chart も含む)、スタイル、および生成されたもの以外にランタイム依存はない自己完結型の Next.js プロジェクトが作成されます。
二方向データバインディングは、
valuePath や dataPath のような props に対して JSON Pointer パスを使用することで実現します。export などの名前付きアクションは、カタログ外側の周囲のアプリケーションロジックで処理されます。プロジェクトを実行または拡張するには、次のコマンドで必要なパッケージをインストールします:
npm install @json-render/core @json-render/react
このワークフローにより、カタログ制約を通じて品質を維持しつつ、ダッシュボードやその他のインターフェースの UI プロトタイピングが迅速化されます。
本文
コンポーネントカタログを定義する
-
コアライブラリをインストール
npm install @json-render/core @json-render/react -
カタログを作成 – AI が利用できるコンポーネント、アクション、およびデータバインディングのガードレールを設定します。
import { createCatalog } from '@json-render/core'; import { z } from 'zod'; export const catalog = createCatalog({ components: { Card: { props: z.object({ title: z.string(), description: z.string().nullable(), }), hasChildren: true, }, Metric: { props: z.object({ label: z.string(), valuePath: z.string(), format: z.enum(['currency', 'percent']), }), }, }, actions: { export: { params: z.object({ format: z.string() }) }, }, }); -
ユーザープロンプト – エンドユーザーが「ログインフォームを作成したい」「評価付きのフィードバックフォームを構築したい」など、欲しいものを記述します。
-
AI が JSON を生成(カタログに制限されます)。
{ "key": "dashboard", "type": "Card", "props": { "title": "Revenue Dashboard", "description": null }, "children": [ { "key": "revenue", "type": "Metric", "props": { "label": "Total Revenue", "valuePath": "/metrics/revenue", "format": "currency" } } ] } -
即時レンダリング – JSON をストリームで返し、データが届くと同時にコンポーネントを段階的に表示します。
-
コードとしてエクスポート – 実行時の依存関係なしに、独立した React コンポーネントツリーを生成します。
"use client"; import { Card, Metric, Chart } from "@/components/ui"; const data = { analytics: { revenue: 125000, salesByRegion: [ { label: "US", value: 45000 }, { label: "EU", value: 35000 }, ], }, }; export default function Page() { return ( <Card data={data} title="Revenue"> <Metric data={data} label="Total Revenue" valuePath="analytics/revenue" format="currency" /> <Chart data={data} dataPath="analytics/salesByRegion" /> </Card> ); }
主な特徴
- ガードレール:AI はカタログに定義されたコンポーネントのみを使用できます。
- 段階的レンダリング:モデルからの JSON ストリームは届き次第即座に描画されます。
- エクスポートオプション:
、コンポーネントファイル、スタイルを含む完全に自己完結型の Next.js または React プロジェクトを生成します。package.json - データバインディング:JSON Pointer パスによる双方向バインディング。
- 名前付きアクション:アプリケーション側で処理(例:上記の
アクション)。export - 可視性 & 条件付きレンダリング:データや認証状態に応じてコンポーネントを表示/非表示にします。
始め方
npm install @json-render/core @json-render/react
その後、上記手順に従ってカタログを作成し、ユーザーのプロンプトを受け付け、制約付き JSON を生成して UI をレンダリングまたはエクスポートしてください。