Next AI Draw.io
チャットで指示するだけで draw.io 互換の図を生成・編集する Next.js アプリ
Next AI Draw.io は、自然言語のチャット指示で draw.io 互換の XML(mxCell)図をリアルタイムに生成・編集するウェブアプリ。左ペインのエディタと右ペインのチャットを組み合わせ、LLM のストリーミングツール呼び出しで図の変更を即座に反映する。Electron でデスクトップ版、OpenNext + Cloudflare でエッジデプロイにも対応。
入力はテキストのほか、画像・PDF・URL にも対応。生成した図は draw.io 形式(.drawio)・SVG・PNG でエクスポートでき、VLM による図の自動検証も備える。
ブラウザ・API サーバー・外部サービスの 3 層構成。LLM のストリーミングツールコールがクライアント側で図 XML に変換される。
display_diagram / edit_diagram / append_diagram は LLM がストリームした後、ブラウザの use-diagram-tool-handlers フックで DiagramContext に反映される。サーバー実行は get_shape_library のみ。
Vercel AI SDK useChat + DefaultChatTransport で /api/chat にストリーム POST。図の XML とヒストリーをコンテキストに含め LLM に送信する。
テキスト入力に加え、画像・PDF(テキスト抽出)・URL(SSRF 対策済み記事取得)を受け付ける。入力内容に合わせてシステムプロンプトを最適化。
クライアントが API キー・プロバイダー・モデルを選択できる UI を提供。サーバー側 getAIModel がリクエストヘッダーを解析し、OpenAI / Anthropic / Google / Bedrock / Vertex / DeepSeek 等 10+ プロバイダーに対応。
生成した図の PNG を撮影して /api/validate-diagram に送り、ビジョン対応 LLM で内容を検証。エラー検知時は自動リトライし、図の品質を担保する。
Vercel / Cloudflare Workers(OpenNext)/ Electron の 3 通り。Electron はオフライン用に draw.io をローカルバンドルし、ネット不要で動作。
Langfuse によるトレース、DynamoDB による日次リクエスト/TPM クォータ管理、アクセスコード認証。図のスナップショット履歴も保持。
| ツール名 | 実行場所 | 引数 | 説明 |
|---|---|---|---|
display_diagram |
クライアント | xml |
図全体を新しい XML で置き換える。初回生成・全面改訂に使用。 |
edit_diagram |
クライアント | operations[] |
差分操作(追加・更新・削除)で既存の図を部分編集。大きな図の効率的な更新に使用。 |
append_diagram |
クライアント | xml |
既存の図に要素を追加する。display_diagram との違いは既存要素を保持する点。 |
get_shape_library |
サーバー | library |
docs/shape-libraries/*.md からシェイプ一覧を読み込み LLM に渡す。図の正確性を上げるために呼ばれる。 |
display_diagram は全面書き換えのため初回に最適。edit_diagram は操作単位の差分で送信コストを抑える。append_diagram は既存レイアウトを崩さず要素を追加できる。この 3 ツールの組み合わせで、大きな図でもコンテキスト長を最小化しながら精度を保つ。
| カテゴリ | 技術 | 用途 |
|---|---|---|
| フレームワーク | Next.js 16 (App Router)、React 19 | UI + API Route |
| スタイリング | Tailwind CSS 4、Radix UI、Motion | コンポーネント・アニメーション |
| AI SDK | ai v6、@ai-sdk/react | LLM ストリーミング・ツール呼び出し |
| AI プロバイダー | OpenAI / Anthropic / Google / Azure / Bedrock / Vertex / DeepSeek / OpenRouter / Ollama 等 | 各 LLM への接続 |
| 図エディタ | react-drawio(DrawIoEmbed) | draw.io iframe 埋め込み |
| バリデーション | Zod 4 | スキーマ・型検証 |
| 可観測性 | Langfuse(任意)、OTEL | LLM トレース・コスト追跡 |
| クォータ管理 | AWS SDK DynamoDB(任意) | 日次リクエスト・TPM 制限 |
| デスクトップ | Electron + esbuild | オフライン対応デスクトップ版 |
| エッジデプロイ | OpenNext + Cloudflare Workers | エッジでの高速配信 |
| テスト | Vitest、Playwright、Biome | ユニット・E2E テスト・Lint |
| MCP | @next-ai-drawio/mcp-server(別パッケージ) | MCP 経由の外部連携 |
| 変数名 | 説明 |
|---|---|
NEXT_PUBLIC_DRAWIO_BASE_URL | draw.io ホスト URL(未設定時は embed.diagrams.net) |
ACCESS_CODE_LIST | カンマ区切りのアクセスコード一覧(簡易認証) |
DYNAMODB_QUOTA_TABLE | クォータ管理用 DynamoDB テーブル名 |
LANGFUSE_PUBLIC_KEY / LANGFUSE_SECRET_KEY | Langfuse 接続情報 |
ENABLE_VLM_VALIDATION | VLM による図検証の有効化 |
MAX_OUTPUT_TOKENS | 最大出力トークン数の制限 |
DAILY_REQUEST_LIMIT / TPM_LIMIT | 日次リクエスト数・TPM の上限 |
- GitHub: DayuanJiang/next-ai-draw-io — 本体リポジトリ
- draw.io(diagrams.net)公式 — 図エディタ本体
- Vercel AI SDK — ストリーミング・ツール呼び出しの基盤
- Langfuse — LLM トレース・オブザーバビリティ
- npm: @next-ai-drawio/mcp-server — MCP サーバーパッケージ