> Discover all available pages from the documentation index: https://mastra.zisheng.pro/ja/llms.txt # Electron プロジェクトに Mastra を統合する このガイドでは、Mastra を使用して Tool を呼び出す AI Agent を構築し、Mastra のサーバーから Agent を直接呼び出すことで Electron デスクトップアプリに接続します。 [AI SDK UI](https://ai-sdk.dev/docs/ai-sdk-ui/overview) を使用して、美しくインタラクティブなチャット体験を作成します。 ## 始める前に - サポートされている[モデル Provider](https://mastra.zisheng.pro/ja/models) の API キーが必要です。特に希望がなければ、[OpenAI](https://mastra.zisheng.pro/ja/models/providers/openai) を使用してください。 - Node.js `v22.13.0` 以降をインストールしてください ## 新しい Electron アプリを作成する(任意) Electron アプリがすでにある場合は、次の手順に進んでください。 [electron-vite](https://electron-vite.org/) を使用して、新しい Electron アプリをスキャフォールドします。 **npm**: ```bash npm create @quick-start/electron@latest electron-chat -- --template react-ts --skip ``` **pnpm**: ```bash pnpm create @quick-start/electron electron-chat --template react-ts --skip ``` **Yarn**: ```bash yarn create @quick-start/electron electron-chat --template react-ts --skip ``` **Bun**: ```bash bunx @quick-start/create-electron@latest electron-chat --template react-ts --skip ``` これにより、React と TypeScript を使用する `electron-chat` という新しい Electron アプリが作成されます。プロジェクトディレクトリに移動します。 ```bash cd electron-chat ``` ### CSP 設定を編集する Electron アプリから Mastra サーバーを呼び出せるように、Content Security Policy(CSP)の設定を調整する必要があります。 `src/renderer/index.html` を開き、`` タグの `connect-src` ディレクティブに `http://localhost:4111` を追加します。 ```html ``` > **情報:** 本番環境にデプロイする際は、実際のサーバー URL に合わせてこの設定を調整する必要があります。 ### `main.css` を編集する `src/renderer/src/assets/main.css` を開き、内容を次に変更します。 ```css @import './base.css'; body { background: var(--ev-c-white); color: var(--ev-c-black); } ``` ## Mastra を初期化する [`mastra init`](https://mastra.zisheng.pro/ja/reference/cli/mastra) を実行します。プロンプトが表示されたら、Provider(OpenAI など)を選択してキーを入力します。 **npm**: ```bash npx mastra@latest init ``` **pnpm**: ```bash pnpm dlx mastra@latest init ``` **Yarn**: ```bash yarn dlx mastra@latest init ``` **Bun**: ```bash bun x mastra@latest init ``` これにより、天気 Agent のサンプルと次のファイルを含む `src/mastra` フォルダーが作成されます。 - `index.ts` - Memory を含む Mastra の設定 - `tools/weather-tool.ts` - 指定した場所の天気を取得する Tool - `agents/weather-agent.ts`- Tool を使用するプロンプトを備えた天気 Agent 次の手順では、チャット UI から `weather-agent.ts` を呼び出します。 ## AI SDK UI と AI Elements をインストールする AI SDK UI と Mastra アダプターをインストールします。 **npm**: ```bash npm install @mastra/ai-sdk@latest @ai-sdk/react ai ``` **pnpm**: ```bash pnpm add @mastra/ai-sdk@latest @ai-sdk/react ai ``` **Yarn**: ```bash yarn add @mastra/ai-sdk@latest @ai-sdk/react ai ``` **Bun**: ```bash bun add @mastra/ai-sdk@latest @ai-sdk/react ai ``` ## チャットルートを作成する `src/mastra/index.ts` を開き、設定に [`chatRoute()`](https://mastra.zisheng.pro/ja/reference/ai-sdk/chat-route) を追加します。これにより、Electron フロントエンドから AI SDK 互換のチャットレスポンスを取得できる API ルートが作成され、次の手順で `useChat()` と組み合わせて使用できます。 ```ts import { Mastra } from '@mastra/core/mastra' // Existing imports... import { chatRoute } from '@mastra/ai-sdk' export const mastra = new Mastra({ // Existing config... server: { cors: { origin: '*', // Restrict this to your app's origin in production allowMethods: ['*'], allowHeaders: ['*'], }, apiRoutes: [ chatRoute({ path: '/chat/:agentId', }), ], }, }) ``` > **情報:** Electron のレンダラーは Mastra サーバーとは異なるオリジンから読み込まれるため、CORS が必要です。本番環境にデプロイする際は、オリジンをアプリケーションの実際のオリジンに制限してください。 ## チャット UI を追加する `src/renderer/src/App.tsx` を開き、内容をチャットコンポーネントに置き換えます。 ```tsx import { useState } from 'react' import { useChat } from '@ai-sdk/react' import { DefaultChatTransport, type ToolUIPart } from 'ai' const STATE_TO_LABEL_MAP: Record = { 'input-streaming': 'Streaming input...', 'input-available': 'Input ready', 'approval-requested': 'Approval requested', 'approval-responded': 'Approval responded', 'output-available': 'Complete', 'output-error': 'Error', } export default function App(): React.JSX.Element { const [input, setInput] = useState('') const { messages, sendMessage } = useChat({ transport: new DefaultChatTransport({ api: `http://localhost:4111/chat/weather-agent`, }), }) const handleSubmit = (e: React.FormEvent): void => { e.preventDefault() if (!input.trim()) return sendMessage({ text: input }) setInput('') } return (
{messages.map((message, messageIndex) => (
{message.parts.map((part, partIndex) => { if (part.type === 'text') { return (
{part.text}
) } if (part.type.startsWith('tool-')) { const toolPart = part as unknown as ToolUIPart return (
{toolPart.type.split('-').slice(1).join('-')} -{' '} {STATE_TO_LABEL_MAP[toolPart.state ?? 'output-available']}
Parameters
                                {JSON.stringify(toolPart.input, null, 2)}
                              
{toolPart.errorText ? 'Error' : 'Result'}
                                {JSON.stringify(toolPart.output, null, 2)}
                              
{toolPart.errorText && (
{toolPart.errorText}
)}
) } return null })}
))}
setInput(e.target.value)} />
) } ``` このコンポーネントは [`useChat()`](https://ai-sdk.dev/docs/reference/ai-sdk-ui/use-chat) を `/chat/weather-agent` エンドポイントに接続し、そこへプロンプトを送信して、レスポンスをチャンク単位でストリーミングします。 ## Agent をテストする チャットインターフェースで Agent をテストするには、Mastra サーバーと Electron アプリの両方を実行します。 1. Mastra 開発サーバーを起動します。 **npm**: ```bash npx mastra dev ``` **pnpm**: ```bash pnpm dlx mastra dev ``` **Yarn**: ```bash yarn dlx mastra dev ``` **Bun**: ```bash bun x mastra dev ``` 2. 別のターミナルで Electron アプリを起動します。 **npm**: ```bash npm run dev ``` **pnpm**: ```bash pnpm run dev ``` **Yarn**: ```bash yarn dev ``` **Bun**: ```bash bun run dev ``` 3. チャットインターフェースを表示する Electron ウィンドウが開きます 4. 天気について質問してみます。API キーが正しく設定されていれば、レスポンスが返されます ## 次のステップ Electron で Mastra Agent を構築できました!🎉 ここから、独自の Tool やロジックを追加してプロジェクトを拡張できます。 - [Agent](https://mastra.zisheng.pro/ja/docs/agents/overview) について詳しく学ぶ - Agent に独自の [Tool](https://mastra.zisheng.pro/ja/docs/agents/using-tools) を追加する - Agent に人間のような [Memory](https://mastra.zisheng.pro/ja/docs/memory/overview) を追加する 準備ができたら、Mastra と AI SDK UI および React の統合方法や、Agent を任意の場所へデプロイする方法について詳しく学びましょう。 - Mastra を [AI SDK UI](https://mastra.zisheng.pro/ja/guides/build-your-ui/ai-sdk-ui) と統合する - Agent を[任意の場所](https://mastra.zisheng.pro/ja/docs/deployment/overview)にデプロイする