LLMでUIを生成・カスタマイズできる、Reactベースのヘッドレスエンジン
既存のコンポーネントをそのまま使いながら、ユーザーごとに最適化されたUIを動的に生成できます。
- ユーザーの役割、行動履歴、状況に応じて最適化されたUIを動的生成
- 各ユーザーに合わせた体験を提供
- あなたのReactコンポーネントをそのまま使用
- 独自のデザインシステムとブランディングを維持
- 安全なランタイム環境で動作、拡張性も確保
- 任意のLLM(OpenAI、Anthropic、ローカルモデル等)を選択可能
- Spec生成ロジックは完全にあなたが実装・管理
- オープンなJSON形式、いつでも移行可能
npm install @context_ui/core// ユーザーごとにハードコードが必要
function Dashboard({ userRole }) {
if (userRole === 'sales') return <SalesDashboard />
else if (userRole === 'engineer') return <EngineerDashboard />
// 役割が増えるたびにコンポーネント追加...
}import { ContextUI, createRegistry, generateSpec } from '@context_ui/core'
import Anthropic from '@anthropic-ai/sdk'
// 既存のコンポーネントをそのまま使える
const SummaryCard = ({ title, value }) => (
<div className='card'>
<h3>{title}</h3>
<p>{value}</p>
</div>
)
const TrendChart = ({ title }) => (
<div className='chart'>
<h3>{title}</h3>
{/* チャート描画 */}
</div>
)
// 1. コンポーネントを登録
const registry = createRegistry()
.register('SummaryCard', {
component: SummaryCard,
propsHint: { title: 'string', value: 'string' }
})
.register('TrendChart', {
component: TrendChart,
propsHint: { title: 'string' }
})
// 2. LLM用のgeneratorを定義
const anthropic = new Anthropic({
apiKey: process.env.ANTHROPIC_API_KEY
})
const generator = async (prompt) => {
const response = await anthropic.messages.create({
model: 'claude-3-5-sonnet-20241022',
max_tokens: 1024,
messages: [{ role: 'user', content: prompt }]
})
return response.content[0].text
}
// 3. ユーザーコンテキストからSpecを生成
async function createDashboardSpec(userRole, userIntent) {
return await generateSpec({
prompt: `User role: ${userRole}, intent: ${userIntent}`,
generator,
registry,
})
}
// 営業マネージャー向け
const salesSpec = await createDashboardSpec('sales-manager', '今週の売上を確認したい')
// エンジニア向け
const engineerSpec = await createDashboardSpec('engineer', 'システム状態を確認したい')
// 4. 同じregistryでも、ユーザーごとに異なるUIをレンダリング
export function Dashboard({ spec }) {
return <ContextUI spec={spec} registry={registry} />
}- Layer 1はデータとアクションからOrganismsを作るボトムアップ
- Layer 2は目的に合わせてOrganismsを並べるトップダウン
- 生成と構成を分けることで一貫性と柔軟性を両立
現時点で提供しているのはLayer 2(Templatesの構成とレンダリング)で、Layer 1は今後追加予定です。
このフェーズでは、LLMがUIコンテキストを使ってAtoms/MoleculesからOrganismsを生成します。
- 入力: あなたのReactコンポーネント(Atoms / Molecules)
- UIコンテキスト: 表示するデータモデル、利用可能なアクション
- 出力: 生成されたOrganisms(例: 検索バー)
今後「管理すべき状態」、「データ」、「利用可能なアクション」からOrganismsを生成できるようにする予定です。
これにより、事前に定義されたコンポーネントを構成するだけでなく、新たなコンポーネントの定義にも対応できます。
LLMがユーザーの意図に合わせてOrganismsを選択・配置し、Templatesを構成します。
- 入力: Atoms / Molecules + 既存Organisms + 生成Organisms
- System/User Context: 目的/意図、制約
- 出力: Templates(画面レイアウトのSpec)
- パーソナライズドダッシュボード: ユーザーの役割に応じてウィジェットを動的配置
- チャットボットUI: 会話の流れに応じてフォームやカードを生成
- A/Bテスト自動化: LLMが複数のレイアウトバリエーションを生成
更なる情報は、React Exampleを参照して下さい。
最小構造
{
"version": "1.0",
"components": [
{ "component": "ProfilePanel", "props": { "title": "プロフィール" } }
]
}主要フィールド
layout?:'vertical' | 'horizontal'(省略時は'vertical')components[].children?: 子ノード配列components[].id?: 安定キー
重要ルール(制約)
- 許可コンポーネントのみ使用可能
componentはRegistry名(大文字小文字は区別されない)propsはそのまま渡される
- コントリビューション手順:
CONTRIBUTING.md - License: Apache 2.0

