🎨

OpenGenerativeUI — ClaudeのVisual Artifactsをオープンソースで再現した構造

CopilotKit Deep Agents + LangGraph + サンドボックスiframe、AIがチャート・3D・ダイアグラムをリアルタイム生成するパイプライン

Claudeが会話中にチャートやダイアグラムを生成する機能を出した途端、CopilotKitが同じものをオープンソースで作った。リリースから実装までの速度が速い。リポのコントリビューターにClaudeが載っているのも面白い — Claude Codeでコミットすると自動的に付く。

核心は単純だ。ユーザーがプロンプトを入力、AIエージェントがHTMLを生成、それをiframeでレンダリング。

モノレポ構造

Turborepoベースで3パッケージ。

apps/app — Next.js 16 + React 19 + Tailwind CSS 4フロントエンド。CopilotKitのチャットUI(<CopilotChat>)でユーザー入力を受け、useComponentフックで生成HTMLをサンドボックスiframeにレンダリング。

apps/agent — Pythonエージェント。LangGraph + CopilotKit SDK。「Deep Agents」という概念があり、エージェントがスキルリストから適切な可視化方式を選択する構造。

apps/mcp — MCP(Model Context Protocol)サーバー。デザインシステムとスキル情報をエージェントに提供。

エージェントの可視化判断

プロンプトが入ると、エージェントが判断する。テキストで答えるか、ビジュアルコンポーネントを作るか。

可視化が必要と判断したら、リクエストタイプに応じて技術を選択。プロセス説明ならSVGフローチャート。データ比較ならChart.jsバーチャート。アルゴリズムならCanvasアニメーション。3DならThree.js。ネットワークグラフならD3.js。この決定マトリクスがエージェントプロンプトに内蔵されている。

生成されるのは完全なHTMLドキュメント。<script>タグでCDNライブラリをロードし、インラインJavaScriptで可視化を描画。Reactコンポーネントではなく純粋HTML。

iframeサンドボックスレンダリング

生成HTMLは<iframe sandbox>内で実行。メインページと完全に隔離。

フロントエンドのwidgetRendererフックがこの過程を処理。スケルトンローディング → HTML注入 → ResizeObserverで自動高さ調整 → フェードインアニメーション。ライト/ダークテーマも自動検出。

iframeを使うのはセキュリティのため。AI生成コードをメインページDOMに直接注入するとXSSリスクがある。sandbox属性でallow-scriptsだけ開き、残り(top-navigation、same-origin等)はブロック。

あるコメントが核心を突いた

「生成したhtmlをiframe安で렌더링する方式ですね」 — その通り。これがアーキテクチャ全体の核心だ。AIがどの技術を使おうと(Chart.jsでもThree.jsでもD3でも)最終成果物はHTML文字列で、それを隔離されたiframeに入れる。単純だが効果的な設計。

この方式の利点:フロントエンドがAIの出力形式を事前に知る必要がない。HTMLであれば動く。新しい可視化タイプ追加時にフロントエンドコードを触る必要がない。

対応する可視化

アルゴリズムアニメーション(二分探索、BFS/DFS、ソート)、3D(Three.js/WebGL/CSS3D)、チャート(Chart.js — 円、棒、線)、ダイアグラム(SVGフローチャート、ネットワークグラフ)、ウィジェット(フォーム、数学グラフ、対話ツール)、サウンド(Tone.jsシンセサイザー)。

範囲は広い。だが結局エージェントが生成するのはHTML+JSコード。品質はLLMのコード生成能力に100%依存。

正直な評価

アイデア自体は良い。Claudeの機能をオープンソースに持ってきた点に価値がある。

だが現実的な限界がある。

エージェント品質がLLMに依存。可視化判断、HTML生成、エラーハンドリング — 全てプロンプトエンジニアリング次第。モデルが変われば結果も変わる。

Pythonエージェントが必須。フロントだけ切り出して使えない。LangGraph + CopilotKit Python SDKがバックエンドに必要。デプロイ複雑度が上がる。

Star 1.1K、リリース直後。Claudeの機能リリースとほぼ同時に出たので、コード成熟度はまだ検証が必要。

xguruの言う通り、「クロードが出した機能をそのまま実装するのを手伝うクロード」 — この状況自体が現在のAIエコシステムをよく表している。

アーキテクチャ分析

各カードをクリックすると詳細が展開されます

モノレポ Turborepo 3パッケージ構造

フロントエンド(Next.js 16)、エージェント(Python/LangGraph)、MCPサーバー — 3つの独立パッケージ

apps/app — Next.js 16 + React 19 + Tailwind CSS 4。<CopilotChat>でユーザー入力、useComponentフックでiframeレンダリング
apps/agent — Python。LangGraph + CopilotKit SDK。Deep Agentsアーキテクチャでスキルベースの可視化選択
apps/mcp — MCPサーバー。デザインシステムとスキルメタデータをエージェントに提供
決定マトリクス リクエストタイプ → 可視化技術の自動選択
リクエスト技術
プロセス/フローSVGフローチャート
データ比較Chart.js棒・円グラフ
アルゴリズムCanvasソート、BFS/DFS
3DThree.js / WebGL3Dモデル
ネットワークD3.jsノードグラフ
サウンドTone.jsシンセサイザー
セキュリティ iframeサンドボックスでAI生成コード隔離
sandbox属性allow-scriptsのみ許可。top-navigation、same-originアクセスはブロック
DOM隔離 — 生成コードはメインページのcookie、localStorage、DOMにアクセス不可
自動リサイズ — ResizeObserverでiframeの高さをコンテンツに合わせて自動調整
リポ現況 2026-04時点
Star: ~1,110
ライセンス: MIT
技術スタック: TypeScript(Next.js 16、React 19、Tailwind 4)+ Python(LangGraph、CopilotKit SDK)
ビルド: Turborepo
注目: コントリビューターにClaudeが含まれる(Claude Codeコミット時に自動登録)

キーポイント

1

ユーザーがCopilotKitチャットUIでプロンプト入力(例:「二分探索を可視化して」)

2

Python Deep Agentがテキスト/ビジュアル応答を判断、可視化時に技術選択(SVG/Chart.js/Three.js/D3等)

3

LLMが完全なHTMLドキュメントを生成 — CDNライブラリロード + インラインJSで可視化実装

4

フロントエンドwidgetRendererフックがHTMLをsandbox iframeに注入、ResizeObserverで高さ自動調整

5

スケルトンローディング → フェードインアニメーション → ライト/ダークテーマ自動検出

ユースケース

AIチャットボットにビジュアル生成機能を追加する際 — iframeサンドボックスパターン参考 CopilotKit + LangGraphベースのエージェントアプリ構築時のフロント/バック分離構造参考 AI生成コードのセキュリティ隔離が必要な場合 — sandbox iframe + allow-scriptsパターン