ai-elements-chatbot について
ai-elements-chatbotは、AIアプリ向けのshadcn/uiベースのチャットコンポーネントです。Next.js App RouterとVercel AI SDKを使う開発者向けで、ストリーミング応答やツール呼び出し、推論、コードブロック、ソースを表示できます。
主な機能
- 0130種類以上のチャットUIコンポーネント
- 02ストリーミング応答に対応
- 03ツール呼び出しと推論を表示
- 04Markdownとコードブロックを描画
- 05メッセージ、入力、ソースのコンポーネント
活用シーン
- 01AIアプリのチャット画面を構築
- 02会話内のツール呼び出しを表示
- 03推論内容やコードブロックを表示
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ secondsky/ claude-skills --skill ai-elements-chatbotインストール後、Claude Code で/ai-elements-chatbotを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/api-route-template.tschat-interface-starter.tsxexample-template.txtreferences/component-catalog.mdexample-reference.mdsetup-guide.mdscripts/example-script.shsetup-ai-elements.sh詳細
AI Elements チャットボットコンポーネント
ステータス:本番環境で利用可能 ✅ | 最終確認日:2025-11-18
AI Elements とは?
AI アプリケーション向けの、本番環境で利用可能なチャット UI コンポーネントです。
- shadcn/ui をベースに構築
- 30 種類以上のコンポーネント(Message、Conversation、Response など)
- Vercel AI SDK v5 に対応
- ストリーミングに対応
- ツール/関数呼び出しの表示
- 推論の可視化
クイックスタート(15 分)
前提条件
- Next.js 15+(App Router)
- shadcn/ui の初期化が完了していること
- Tailwind v4
- AI SDK v5+
1. 初期化
pnpm dlx ai-elements@latest init
2. コンポーネントを追加
pnpm dlx ai-elements@latest add message conversation response prompt-input
3. チャットインターフェースを作成
'use client';
import { useChat } from 'ai/react';
import { Conversation } from '@/components/ui/ai/conversation';
import { Message } from '@/components/ui/ai/message';
import { Response } from '@/components/ui/ai/response';
import { PromptInput } from '@/components/ui/ai/prompt-input';
export default function ChatPage() {
const { messages, input, handleInputChange, handleSubmit } = useChat({
api: '/api/chat'
});
return (
<div className="flex h-screen flex-col">
<Conversation>
{messages.map((msg) => (
<Message key={msg.id} role={msg.role}>
<Response markdown={msg.content} />
</Message>
))}
</Conversation>
<PromptInput
value={input}
onChange={handleInputChange}
onSubmit={handleSubmit}
/>
</div>
);
}
セットアップ手順の全容は references/setup-guide.md を読み込んでください。
コアコンポーネント
Message と Conversation
import { Conversation } from '@/components/ui/ai/conversation';
import { Message } from '@/components/ui/ai/message';
<Conversation>
{messages.map((msg) => (
<Message key={msg.id} role={msg.role}>
{msg.content}
</Message>
))}
</Conversation>
Response(Markdown)
import { Response } from '@/components/ui/ai/response';
<Response markdown={content} />
PromptInput
import { PromptInput } from '@/components/ui/ai/prompt-input';
<PromptInput
value={input}
onChange={handleInputChange}
onSubmit={handleSubmit}
/>
CodeBlock
import { CodeBlock } from '@/components/ui/ai/code-block';
<CodeBlock code={code} language="typescript" />
Reasoning(思考)
import { Reasoning } from '@/components/ui/ai/reasoning';
<Reasoning content={thinking} />
Tool(関数呼び出し)
import { Tool } from '@/components/ui/ai/tool';
<Tool name="search" args={{ query: "..." }} result={result} />
重要なルール
必ず行うこと ✅
- 最初に shadcn/ui をインストールする(AI Elements に必要です)
- Next.js App Router を使用する(Pages Router はサポートされていません)
- AI SDK v5 を使用する(v4 からの破壊的変更があります)
- CLI 経由でインストールする(
pnpm dlx ai-elements@latest) - レジストリを
components.jsonに追加する - クライアントコンポーネントを使用する(
'use client'ディレクティブ) - UX 向上のため、レスポンスをストリーミングする
- 読み込み状態を処理する
- エラーバウンダリを追加する
- モバイルでテストする
絶対に行わないこと ❌
- npm パッケージとしてインストールしない(コンポーネントはコピーされます)
- Pages Router を使用しない(App Router のみ対応)
- AI SDK v4 を使用しない(破壊的変更があります)
- 前提条件を省略しない(shadcn/ui、Tailwind)
- コアの型を変更しない(shadcn の型を拡張します)
- ストリーミングなしで使用しない(本来の目的を損ないます)
- アクセシビリティ対応を省略しない(ARIA ラベル)
- スタイルをハードコードしない(Tailwind を使用)
- エラー処理を省略しない(API の失敗に備えます)
- モバイル対応を無視しない(レスポンシブ対応が必要です)
利用可能なコンポーネント(30 種類以上)
コア:
- Message
- Conversation
- Response
- PromptInput
コンテンツ:
- CodeBlock
- Markdown
- Tool
- Reasoning
- Sources
アクション:
- Actions
- CopyButton
- ShareButton
- RegenerateButton
高度なコンポーネント:
- BranchNavigation
- ThinkingDisplay
- WebPreview
よくあるユースケース
ユースケース 1:基本的なチャット
const { messages, input, handleInputChange, handleSubmit } = useChat();
return (
<>
<Conversation>
{messages.map(m => (
<Message key={m.id} role={m.role}>
<Response markdown={m.content} />
</Message>
))}
</Conversation>
<PromptInput value={input} onChange={handleInputChange} onSubmit={handleSubmit} />
</>
);
ユースケース 2:ツール呼び出しを使用
{messages.map(m => (
<Message key={m.id} role={m.role}>
{m.toolInvocations?.map(tool => (
<Tool key={tool.toolCallId} name={tool.toolName} args={tool.args} result={tool.result} />
))}
<Response markdown={m.content} />
</Message>
))}
ユースケース 3:推論を使用
<Message role="assistant">
{reasoning && <Reasoning content={reasoning} />}
<Response markdown={content} />
</Message>
ユースケース 4:コードブロックを使用
<Response markdown={content}>
{(node) => node.type === 'code' ? (
<CodeBlock code={node.value} language={node.lang} />
) : null}
</Response>
ユースケース 5:ソースを使用
<Message role="assistant">
<Response markdown={content} />
<Sources sources={sources} />
</Message>
API ルート
基本的なストリーミング
// app/api/chat/route.ts
import { streamText } from 'ai';
import { openai } from '@ai-sdk/openai';
export async function POST(req: Request) {
const { messages } = await req.json();
const result = streamText({
model: openai('gpt-4'),
messages
});
return result.toDataStreamResponse();
}
ツールを使用
const result = streamText({
model: openai('gpt-4'),
messages,
tools: {
search: {
description: 'Search the web',
parameters: z.object({ query: z.string() }),
execute: async ({ query }) => {
return await search(query);
}
}
}
});
AI Elements を使用する場面
次の場合に使用します:
- ChatGPT 形式のインターフェースを構築する
- 本番環境で利用可能なコンポーネントが必要
- Vercel AI SDK を使用する
- ストリーミングレスポンスが必要
- ツール/関数の表示が必要
- 推論を可視化したい
次の場合は使用しないでください:
- Next.js App Router を使用していない
- shadcn/ui を導入していない
- Pages Router が必要
- 独自のデザインシステムを構築する
リソース
リファレンス(references/):
component-catalog.md- 8 種類すべての AI Elements コンポーネントと使用例example-reference.md- 完全な統合例とパターンsetup-guide.md- Next.js 15 と shadcn/ui を使った手順ごとのセットアップ
テンプレート(templates/):
- コンポーネントの使用例はリファレンスファイルにあります
公式ドキュメント
- AI Elements:https://ai-elements.vercel.app
- コンポーネント:https://ai-elements.vercel.app/docs/components
- 使用例:https://github.com/ai-elements/ai-elements/tree/main/examples
質問や問題がある場合:
- セットアップ手順の全容は
references/setup-guide.mdを確認してください - 前提条件(Next.js 15+、shadcn/ui、AI SDK v5)を確認してください
- 公式の使用例を参照してください
コメント
Markdown 対応