{"id":35933,"date":"2025-06-23T07:01:00","date_gmt":"2025-06-22T22:01:00","guid":{"rendered":"https:\/\/miralab.co.jp\/media\/?p=35933"},"modified":"2025-10-10T07:43:50","modified_gmt":"2025-10-09T22:43:50","slug":"mastra","status":"publish","type":"post","link":"https:\/\/miralab.co.jp\/media\/mastra\/","title":{"rendered":"Mastra\u3068\u306f\uff1f\u4f7f\u3044\u65b9\u3068\u6599\u91d1\uff01TypeScript\u88fd\u306eAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1200\" height=\"630\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/509.png\" alt=\"\" class=\"wp-image-37325\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/509.png 1200w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/509-300x158.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/509-1024x538.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/509-768x403.png 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p>AI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u7c21\u5358\u306b\u69cb\u7bc9\u3057\u305f\u3044\u5834\u5408\u306f\u3001<strong>Mastra<\/strong>\u304c\u304a\u3059\u3059\u3081\u3067\u3059\u3002<\/p>\n\n\n\n<p>Mastra\u3068\u306fTypeScript\u3067\u52d5\u4f5c\u3059\u308bAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u958b\u767a\u3059\u308b\u305f\u3081\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308a\u3001API\u3092\u4f7f\u7528\u3057\u3066\u8907\u96d1\u306a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u69cb\u7bc9\u3092\u7c21\u5358\u306b\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001Mastra\u306e\u4f7f\u3044\u65b9\u3084\u6599\u91d1\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001LangChain\u3084LlamaIndex\u3068\u3044\u3063\u305f\u7af6\u5408\u30c4\u30fc\u30eb\u3068\u306e\u9055\u3044\u3082\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mastra\u3068\u306f\uff1fTypeScript\u88fdAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6982\u8981<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/2f35bce34c328188b93b7544741fd204.png\" alt=\"\" class=\"wp-image-37184\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/2f35bce34c328188b93b7544741fd204.png 1536w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/2f35bce34c328188b93b7544741fd204-300x200.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/2f35bce34c328188b93b7544741fd204-1024x683.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/2f35bce34c328188b93b7544741fd204-768x512.png 768w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<p>Mastra\u306f\u3001<span class=\"swl-marker mark_yellow\"><strong>TypeScript\u3067AI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u958b\u767a\u3059\u308b\u305f\u3081\u306e\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p><span class=\"swl-inline-color has-swl-deep-01-color\"><strong>LLM\uff08\u5927\u898f\u6a21\u8a00\u8a9e\u30e2\u30c7\u30eb\uff09<\/strong><\/span>\u3092\u6d3b\u7528\u3057\u3001\u5bfe\u8a71\u578b\u3067\u81ea\u5f8b\u7684\u306aAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u69cb\u7bc9\u3092\u5bb9\u6613\u306b\u3059\u308b\u3053\u3068\u3092\u76ee\u7684\u3068\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u958b\u767a\u306b\u5fc5\u8981\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3001RAG\u3001\u8a55\u4fa1\u306a\u3069\u306e\u6a5f\u80fd\u304c\u5305\u62ec\u7684\u306b\u63d0\u4f9b\u3055\u308c\u3066\u304a\u308a\u3001Web\u6280\u8853\u3068\u306e\u89aa\u548c\u6027\u304c\u9ad8\u3044\u70b9\u304c\u7279\u9577\u3067\u3059\u3002<\/p>\n\n\n\n<p>Mastra\u306fVercel\u793e\u306eAI SDK\u3092\u5185\u90e8\u3067\u5229\u7528\u3057\u3066\u304a\u308a\u3001OpenAI\u306eGPT\u3084Google\u306eGemini\u306a\u3069\u3001\u8907\u6570\u306eLLM\u3092\u5207\u308a\u66ff\u3048\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001\u30c8\u30ec\u30fc\u30b7\u30f3\u30b0\u3084\u81ea\u52d5\u8a55\u4fa1\u3068\u3044\u3063\u305f\u30c7\u30d0\u30c3\u30b0\u652f\u63f4\u6a5f\u80fd\u3082\u5145\u5b9f\u3057\u3066\u304a\u308a\u3001\u9ad8\u54c1\u8cea\u306a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u52b9\u7387\u7684\u306b\u958b\u767a\u30fb\u691c\u8a3c\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u958b\u767a\u8005\u306f\u8907\u96d1\u306aAI\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u7c21\u7d20\u5316\u3057\u3001\u3088\u308a\u8fc5\u901f\u306b\u30b5\u30fc\u30d3\u30b9\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mastra\u306e\u6a5f\u80fd<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/3e37a9aa8fb49cd04e2668b40e5fec59.png\" alt=\"\" class=\"wp-image-37187\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/3e37a9aa8fb49cd04e2668b40e5fec59.png 1536w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/3e37a9aa8fb49cd04e2668b40e5fec59-300x200.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/3e37a9aa8fb49cd04e2668b40e5fec59-1024x683.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/3e37a9aa8fb49cd04e2668b40e5fec59-768x512.png 768w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<p>\u307e\u305a\u306fMastra\u306e\u4e3b\u306a\u6a5f\u80fd\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Agents<\/h3>\n\n\n\n<p>Mastra\u306b\u304a\u3051\u308b<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>Agents<\/strong><\/span>\u3068\u306f\u3001\u5927\u898f\u6a21\u8a00\u8a9e\u30e2\u30c7\u30eb\u304c\u30bf\u30b9\u30af\u3092\u9054\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u5b9f\u884c\u3059\u308b\u4e00\u9023\u306e\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u81ea\u5f8b\u7684\u306b\u6c7a\u5b9a\u3067\u304d\u308b\u30b7\u30b9\u30c6\u30e0\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306f\u3001<span class=\"swl-marker mark_yellow\"><strong>\u30c4\u30fc\u30eb\u3084\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3001\u540c\u671f\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3078\u30a2\u30af\u30bb\u30b9\u3059\u308b\u80fd\u529b\u3092\u6301\u3061\u3001\u3053\u308c\u3089\u3092\u6d3b\u7528\u3057\u3066\u5916\u90e8\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u5bfe\u8a71\u3084\u8907\u96d1\u306a\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3057\u307e\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>\u5fc5\u8981\u306b\u5fdc\u3058\u3066\u95a2\u6570\u3084\u5916\u90e8API\u3092\u547c\u3073\u51fa\u3057\u3066\u60c5\u5831\u3092\u53d6\u5f97\u30fb\u51e6\u7406\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b\u969b\u306f\u3001<code>Agent<\/code>\u30af\u30e9\u30b9\u3092\u7528\u3044\u3066\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { Agent } from \"@mastra\/core\/agent\";\nimport { openai } from \"@ai-sdk\/openai\";\n \nexport const myAgent = new Agent({\n  name: \"My Agent\",\n  instructions: \"You are a helpful assistant.\",\n  model: openai(\"gpt-4o-mini\"),\n});<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Tools<\/h3>\n\n\n\n<p>Tools\u306f\u3001<span class=\"swl-marker mark_yellow\"><strong>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u7279\u5b9a\u306e\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3057\u305f\u308a\u3001\u5916\u90e8\u60c5\u5831\u306b\u30a2\u30af\u30bb\u30b9\u3057\u305f\u308a\u3059\u308b\u969b\u306b\u5b9f\u884c\u53ef\u80fd\u306a\u95a2\u6570\u3067\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>Tools\u306b\u306f\u7d71\u5408\u30a2\u30af\u30bb\u30b9\u3068\u30d1\u30e9\u30e1\u30fc\u30bf\u691c\u8a3c\u6a5f\u80fd\u304c\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5358\u7d14\u306a\u30c6\u30ad\u30b9\u30c8\u751f\u6210\u3060\u3051\u3067\u306f\u306a\u304f\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u80fd\u529b\u3092\u62e1\u5f35\u3059\u308b\u3053\u3068\u3067\u3001API\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3001\u305d\u306e\u4ed6\u306e\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u5bfe\u8a71\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30c4\u30fc\u30eb\u3092\u4f5c\u6210\u3059\u308b\u306b\u306f\u3001<code>createTool<\/code>\u95a2\u6570\u3092\u7528\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { createTool } from \"@mastra\/core\/tools\";\nimport { z } from \"zod\";\n \nconst getWeatherInfo = async (city: string) =&gt; {\n  \/\/ Replace with an actual API call to a weather service\n  console.log(`Fetching weather for ${city}...`);\n  \/\/ Example data structure\n  return { temperature: 20, conditions: \"Sunny\" };\n};\n \nexport const weatherTool = createTool({\n  id: \"Get Weather Information\",\n  description: `Fetches the current weather information for a given city`,\n  inputSchema: z.object({\n    city: z.string().describe(\"City name\"),\n  }),\n  outputSchema: z.object({\n    temperature: z.number(),\n    conditions: z.string(),\n  }),\n  execute: async ({ context: { city } }) =&gt; {\n    console.log(\"Using tool to fetch weather information for\", city);\n    return await getWeatherInfo(city);\n  },\n});<\/code><\/pre>\n\n\n\n<p>\u4f5c\u6210\u3057\u305f\u30c4\u30fc\u30eb\u306f\u3001Agents\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u3057\u3066\u53d6\u308a\u8fbc\u3081\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { weatherTool } from '..\/tools\/weather-tool';<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Workflows<\/h3>\n\n\n\n<p>Workflows\u306f\u3001<span class=\"swl-marker mark_yellow\"><strong>\u8010\u4e45\u6027\u306e\u3042\u308b\u30b0\u30e9\u30d5\u30d9\u30fc\u30b9\u306e\u72b6\u614b\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u3067\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>\u8907\u6570\u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3084\u30c4\u30fc\u30eb\u3092\u7d44\u307f\u5408\u308f\u305b\u3001\u4e00\u9023\u306e\u30bf\u30b9\u30af\u51e6\u7406\u306e\u6d41\u308c\u3092\u5b9a\u7fa9\u3057\u3001\u81ea\u52d5\u3067\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u5358\u4e00\u306e\u547c\u3073\u51fa\u3057\u3067\u306f\u5b8c\u7d50\u3057\u306a\u3044\u3001\u3088\u308a\u8907\u96d1\u3067\u4f53\u7cfb\u7684\u306a\u30d7\u30ed\u30bb\u30b9\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5ba3\u8a00\u7684\u306a\u69cb\u6587\u3067\u51e6\u7406\u30d5\u30ed\u30fc\u3092\u8a18\u8ff0\u3059\u308b\u305f\u3081\u3001<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u53ef\u8aad\u6027\u304c\u9ad8\u304f<\/strong><\/span>\u3001\u7ba1\u7406\u3084\u30c7\u30d0\u30c3\u30b0\u304c\u5bb9\u6613\u306b\u306a\u308b\u70b9\u3082\u7279\u9577\u3067\u3059\u3002<\/p>\n\n\n\n<p><span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u9806\u6b21\u5b9f\u884c<\/strong><\/span>\u3059\u308b\u969b\u306f<code>.then()<\/code>\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { createWorkflow, createStep } from \"@mastra\/core\/workflows\";\nimport { z } from \"zod\";\n \nconst step1 = createStep({...});\nconst step2 = createStep({...});\n \nexport const testWorkflow = createWorkflow({...})\n  .then(step1)\n  .then(step2)\n  .commit();<\/code><\/pre>\n\n\n\n<p>\u30b9\u30c6\u30c3\u30d7\u3092<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u4e26\u5217\u306b\u5b9f\u884c<\/strong><\/span>\u3059\u308b\u5834\u5408\u306f<code>.parallel()<\/code>\u3092\u7528\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { createWorkflow, createStep } from \"@mastra\/core\/workflows\";\nimport { z } from \"zod\";\n \nconst step1 = createStep({...});\nconst step2 = createStep({...});\n \nexport const testWorkflow = createWorkflow({...})\n  .parallel(&#91;step1, step2])\n  .commit();<\/code><\/pre>\n\n\n\n<p><span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u6761\u4ef6\u5206\u5c90<\/strong><\/span>\u3092\u4f5c\u6210\u3059\u308b\u306b\u306f<code>.branch()<\/code>\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { createWorkflow, createStep } from \"@mastra\/core\/workflows\";\nimport { z } from \"zod\";\n \nconst lessThanStep = createStep({...});\nconst greaterThanStep = createStep({...});\n \nexport const testWorkflow = createWorkflow({...})\n  .branch(&#91;\n    &#91;async ({ inputData: { some_value } }) =&gt; some_value &lt;= 9, lessThanStep],\n    &#91;async ({ inputData: { some_value } }) =&gt; some_value &gt;= 10, greaterThanStep]\n  ])\n  .commit();<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">RAG<\/h3>\n\n\n\n<p><span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u691c\u7d22\u62e1\u5f35\u751f\u6210\uff08RAG\uff09<\/strong><\/span>\u3068\u306f\u3001\u5916\u90e8\u306e\u77e5\u8b58\u30d9\u30fc\u30b9\u304b\u3089\u95a2\u9023\u60c5\u5831\u3092\u691c\u7d22\u3057\u3001\u305d\u306e\u60c5\u5831\u3092\u57fa\u306bLLM\u304c\u56de\u7b54\u3092\u751f\u6210\u3059\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u72ec\u81ea\u306e\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001 AI \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u56de\u7b54\u3092\u3088\u308a\u6b63\u78ba\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001LLM\u304c\u5143\u3005\u6301\u305f\u306a\u3044\u5c02\u9580\u77e5\u8b58\u3084\u6700\u65b0\u60c5\u5831\u306b\u3082\u5bfe\u5fdc\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>Mastra\u306eRAG\u30b7\u30b9\u30c6\u30e0\u3067\u306f\u3001<span class=\"swl-marker mark_yellow\"><strong>\u6587\u66f8\u3092\u51e6\u7406\u3057\u57cb\u3081\u8fbc\u3080\u305f\u3081\u306e\u6a19\u6e96\u5316\u3055\u308c\u305fAPI\u3084\u3001\u57cb\u3081\u8fbc\u307f\u3068\u691c\u7d22\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8ffd\u8de1\u3059\u308b\u305f\u3081\u306e\u53ef\u89b3\u6e2c\u6027\u306a\u3069\u3092\u63d0\u4f9b\u3057\u307e\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Integrations<\/h3>\n\n\n\n<p>Integrations\u306f\u3001<span class=\"swl-marker mark_yellow\"><strong>Mastra\u3092\u3055\u307e\u3056\u307e\u306a\u5916\u90e8\u30b5\u30fc\u30d3\u30b9\u3084\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u63a5\u7d9a\u3059\u308b\u305f\u3081\u306e\u6a5f\u80fd\u3067\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u30b5\u30fc\u30d3\u30b9\u7528\u306e\u81ea\u52d5\u751f\u6210\u3055\u308c\u305fAPI\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3067\u3042\u308a\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u30c4\u30fc\u30eb\u3084\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u30b9\u30c6\u30c3\u30d7\u3068\u3057\u3066\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u8a2d\u5b9a\u753b\u9762\u304c\u5206\u304b\u308a\u3084\u3059\u3044\u305f\u3081\u3001\u96e3\u3057\u3044\u77e5\u8b58\u304c\u306a\u304f\u3066\u3082\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Evals<\/h3>\n\n\n\n<p>Evals\u306f\u3001<span class=\"swl-marker mark_yellow\"><strong>\u958b\u767a\u3057\u305fAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3084\u54c1\u8cea\u3092\u4f53\u7cfb\u7684\u306b\u30c6\u30b9\u30c8\u30fb\u8a55\u4fa1\u3059\u308b\u305f\u3081\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>AI\u306e\u51fa\u529b\u306b\u306f\u30e9\u30f3\u30c0\u30e0\u6027\u304c\u3042\u308a\u3001\u540c\u3058\u5165\u529b\u3067\u3042\u3063\u3066\u3082\u7d50\u679c\u304c\u5909\u308f\u3063\u3066\u3057\u307e\u3046\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u305d\u3053\u3067\u3001Evals\u306b\u3088\u3063\u3066\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u54c1\u8cea\u3092\u6e2c\u5b9a\u3059\u308b\u305f\u3081\u306e<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u5b9a\u91cf\u5316\u53ef\u80fd\u306a\u57fa\u6e96<\/strong><\/span>\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u5404\u8a55\u4fa1\u306f0\uff5e1\u306e\u6b63\u898f\u5316\u3055\u308c\u305f\u30b9\u30b3\u30a2\u3092\u8fd4\u3057\u3001\u30ed\u30b0\u306b\u8a18\u9332\u3057\u3066\u6bd4\u8f03\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001\u8a55\u4fa1\u306f\u72ec\u81ea\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u3084\u30b9\u30b3\u30a2\u30ea\u30f3\u30b0\u95a2\u6570\u3067\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Memory<\/h3>\n\n\n\n<p>Memory\u306f\u3001<span class=\"swl-marker mark_yellow\"><strong>AI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u904e\u53bb\u306e\u5bfe\u8a71\u5185\u5bb9\u3084\u60c5\u5831\u3092\u8a18\u61b6\u3057\u3001\u6587\u8108\u3092\u7dad\u6301\u3059\u308b\u305f\u3081\u306e\u6a5f\u80fd\u3067\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u901a\u5e38\u306f\u76f4\u8fd1\u306e\u3084\u308a\u53d6\u308a\u3057\u304b\u899a\u3048\u3089\u308c\u306a\u3044LLM\u304c\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u307e\u305f\u3044\u3067\u60c5\u5831\u3092\u4fdd\u6301\u3057\u3001\u3088\u308a\u81ea\u7136\u3067\u9023\u7d9a\u6027\u306e\u3042\u308b\u5bfe\u8a71\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>Mastra\u306f\u3001\u73fe\u5728\u306e\u6587\u8108\u3092\u6271\u3046\u30ef\u30fc\u30ad\u30f3\u30b0\u30e1\u30e2\u30ea\u3068\u3001\u904e\u53bb\u306e\u5bfe\u8a71\u5c65\u6b74\u3092\u30d9\u30af\u30c8\u30eb\u691c\u7d22\u3067\u52d5\u7684\u306b\u601d\u3044\u51fa\u3059\u30bb\u30de\u30f3\u30c6\u30a3\u30c3\u30af\u30e1\u30e2\u30ea\u3068\u3044\u3046\u968e\u5c64\u7684\u306a\u30b7\u30b9\u30c6\u30e0\u3092\u63a1\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u8a18\u61b6\u3057\u305f\u5185\u5bb9\u306fLibSQL\u3092\u7528\u3044\u3066\u6c38\u7d9a\u5316\u3059\u308b\u3053\u3068\u3082\u53ef\u80fd\u3067\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306f\u30e6\u30fc\u30b6\u30fc\u3068\u306e\u95a2\u4fc2\u6027\u3092\u9577\u671f\u306b\u308f\u305f\u3063\u3066\u5b66\u7fd2\u30fb\u7dad\u6301\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mastra\u306e\u6599\u91d1\u30d7\u30e9\u30f3<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/5768137fba1badb294655faa4be7198d.png\" alt=\"\" class=\"wp-image-37188\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/5768137fba1badb294655faa4be7198d.png 1536w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/5768137fba1badb294655faa4be7198d-300x200.png 300w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<p>Mastra\u81ea\u4f53\u306f<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9<\/strong><\/span>\u3067\u3042\u308a\u3001\u7121\u6599\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u305f\u3060\u3057\u3001Mastra\u3092\u5229\u7528\u3059\u308b\u305f\u3081\u306eLLM\u306b\u3064\u3044\u3066\u306f\u5404\u30b5\u30fc\u30d3\u30b9\u306eAPI\u6599\u91d1\u304c\u304b\u304b\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>Mastra\u3067\u5229\u7528\u3067\u304d\u308b\u4e3b\u8981\u306aAI\u30e2\u30c7\u30eb\u3068\u3001\u305d\u306e<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>100\u4e07\u30c8\u30fc\u30af\u30f3\u3042\u305f\u308a<\/strong><\/span>\u306e\u6599\u91d1\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table is-thead-centered\"><table><thead><tr><th>\u30e2\u30c7\u30eb<\/th><th>\u5165\u529b<\/th><th>\u30ad\u30e3\u30c3\u30b7\u30e5\u3055\u308c\u305f\u5165\u529b<\/th><th>\u51fa\u529b<\/th><\/tr><\/thead><tbody><tr><th>gpt-4.1\uff08OpenAI\uff09<\/th><td>2.00\u30c9\u30eb<\/td><td>0.50\u30c9\u30eb<\/td><td>8.00\u30c9\u30eb<\/td><\/tr><tr><th>Gemini 2.5 Flash\uff08Google\uff09<\/th><td>0.30\u30c9\u30eb<\/td><td>0.075\u30c9\u30eb<\/td><td>2.50\u30c9\u30eb<\/td><\/tr><tr><th>Claude Sonnet 4\uff08Anthropic\uff09<\/th><td>3.00\u30c9\u30eb<\/td><td>3.75\u30c9\u30eb<\/td><td>15\u30c9\u30eb<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>OpenAI\u306eGPT\u3084Google\u306eGemini\u3001Anthropic\u306eClaude\u306a\u3069\u3001\u4e3b\u8981\u306aAI\u30e2\u30c7\u30eb\u306f\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u4ed6\u306b\u3082\u3001Groq\u3084Cerebras\u306eAPI\u30ad\u30fc\u3082\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30b3\u30b9\u30c8\u304c\u6c17\u306b\u306a\u308b\u5834\u5408\u3001<span class=\"swl-marker mark_yellow\"><strong>gpt-4.1 mini\u306a\u3069\u3001\u5c0f\u578b\u30e2\u30c7\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067API\u6599\u91d1\u3092\u7bc0\u7d04\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001API\u6599\u91d1\u306f\u5165\u529b\u30c8\u30fc\u30af\u30f3\u6570\u306b\u3088\u308b\u305f\u3081\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5206\u304b\u308a\u3084\u3059\u304f\u7c21\u6f54\u306b\u3059\u308b\u3053\u3068\u3082\u7bc0\u7d04\u306b\u3064\u306a\u304c\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mastra\u306e\u4f7f\u3044\u65b9\uff5c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304b\u3089\u8d77\u52d5\u307e\u3067<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e2055d597972f188964a0927c7bcb60f.png\" alt=\"\" class=\"wp-image-37190\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e2055d597972f188964a0927c7bcb60f.png 1536w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e2055d597972f188964a0927c7bcb60f-300x200.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e2055d597972f188964a0927c7bcb60f-1024x683.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e2055d597972f188964a0927c7bcb60f-768x512.png 768w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<p>\u7d9a\u3044\u3066\u3001Mastra\u306e\u4f7f\u3044\u65b9\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>Mastra\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u624b\u9806\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n\n\n\n<div class=\"swell-block-step\" data-num-style=\"circle\">\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">Node.js\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/div><div class=\"swell-block-step__body\">\n<p><span class=\"swl-marker mark_yellow\"><strong>Mastra\u3092\u52d5\u304b\u3059\u306b\u306f\u30d0\u30fc\u30b8\u30e7\u30f320.0\u4ee5\u4e0a\u306eNode.js\u304c\u5fc5\u8981\u3067\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>\u307e\u305a\u306f<a href=\"https:\/\/nodejs.org\/ja\" target=\"_blank\" rel=\"noreferrer noopener\">\u516c\u5f0f\u30b5\u30a4\u30c8<\/a>\u304b\u3089Node.js\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2048\" height=\"1048\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d17e73482d6fd08464db102f78280736-scaled.png\" alt=\"\" class=\"wp-image-36845\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d17e73482d6fd08464db102f78280736-scaled.png 2048w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d17e73482d6fd08464db102f78280736-300x154.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d17e73482d6fd08464db102f78280736-1024x524.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d17e73482d6fd08464db102f78280736-768x393.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d17e73482d6fd08464db102f78280736-1536x786.png 1536w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/figure>\n\n\n\n<p>\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u305f\u30a4\u30f3\u30b9\u30c8\u30fc\u30e9\u3092\u8d77\u52d5\u3057\u3066Node.js\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"974\" height=\"745\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/5770198c6111f909eb1472975bb6f2d6.png\" alt=\"\" class=\"wp-image-36847\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/5770198c6111f909eb1472975bb6f2d6.png 974w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/5770198c6111f909eb1472975bb6f2d6-300x229.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/5770198c6111f909eb1472975bb6f2d6-768x587.png 768w\" sizes=\"(max-width: 974px) 100vw, 974px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"965\" height=\"756\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/66bf1c49391cf5ec818121f184e685d7.png\" alt=\"\" class=\"wp-image-36848\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/66bf1c49391cf5ec818121f184e685d7.png 965w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/66bf1c49391cf5ec818121f184e685d7-300x235.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/66bf1c49391cf5ec818121f184e685d7-768x602.png 768w\" sizes=\"(max-width: 965px) 100vw, 965px\" \/><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">API\u30ad\u30fc\u3092\u53d6\u5f97<\/div><div class=\"swell-block-step__body\">\n<p>\u597d\u307f\u306e\u5404AI\u30b5\u30fc\u30d3\u30b9\u306eAPI\u30ad\u30fc\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>OpenAI\u3092API\u30ad\u30fc<\/strong><\/span>\u3092\u53d6\u5f97\u3057\u3066\u9032\u3081\u307e\u3059\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/platform.openai.com\/api-keys\" target=\"_blank\" rel=\"noreferrer noopener\">\u516c\u5f0f\u30b5\u30a4\u30c8<\/a>\u304b\u3089API\u30ad\u30fc\u3092\u4f5c\u6210\u3057\u3001\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2048\" height=\"1039\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/799f96f9d5f2ca1d707884a2084bf156-scaled.png\" alt=\"\" class=\"wp-image-36851\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/799f96f9d5f2ca1d707884a2084bf156-scaled.png 2048w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/799f96f9d5f2ca1d707884a2084bf156-300x152.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/799f96f9d5f2ca1d707884a2084bf156-1024x520.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/799f96f9d5f2ca1d707884a2084bf156-768x390.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/799f96f9d5f2ca1d707884a2084bf156-1536x780.png 1536w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/figure>\n\n\n\n<p>\u53d6\u5f97\u3057\u305fAPI\u30ad\u30fc\u306f\u30b3\u30d4\u30fc\u3057\u3066\u5b89\u5168\u306a\u5834\u6240\u306b\u4fdd\u7ba1\u3057\u3001\u4ed6\u306e\u4eba\u306b\u77e5\u3089\u308c\u306a\u3044\u3088\u3046\u306b\u6c17\u3092\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">Mastra\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210<\/div><div class=\"swell-block-step__body\">\n<p>\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066Mastra\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npx create-mastra@latest<\/code><\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001<span class=\"swl-marker mark_yellow\"><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\u3084\u4f7f\u7528\u3059\u308bAI\u30e2\u30c7\u30eb\u306a\u3069\u304c\u805e\u304b\u308c\u308b\u305f\u3081\u3001\u7b54\u3048\u3066\u3044\u304f\u3053\u3068\u3067Mastra\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u304c\u5b8c\u4e86\u3057\u307e\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2040\" height=\"1049\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/fe1e3f63664d1814173a4a83152d093e.png\" alt=\"\" class=\"wp-image-36996\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/fe1e3f63664d1814173a4a83152d093e.png 2040w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/fe1e3f63664d1814173a4a83152d093e-300x154.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/fe1e3f63664d1814173a4a83152d093e-1024x527.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/fe1e3f63664d1814173a4a83152d093e-768x395.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/fe1e3f63664d1814173a4a83152d093e-1536x790.png 1536w\" sizes=\"(max-width: 2040px) 100vw, 2040px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1965\" height=\"1053\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d1a261991f40b831ec5f9abcf05ce547.png\" alt=\"\" class=\"wp-image-36997\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d1a261991f40b831ec5f9abcf05ce547.png 1965w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d1a261991f40b831ec5f9abcf05ce547-300x161.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d1a261991f40b831ec5f9abcf05ce547-1024x549.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d1a261991f40b831ec5f9abcf05ce547-768x412.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/d1a261991f40b831ec5f9abcf05ce547-1536x823.png 1536w\" sizes=\"(max-width: 1965px) 100vw, 1965px\" \/><\/figure>\n\n\n\n<p>\u4ee5\u4e0b\u306e\u8868\u793a\u304c\u51fa\u308b\u3068\u3001\u6e96\u5099\u5b8c\u4e86\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1728\" height=\"924\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/133e91ca10f63832b81be5676121ac0b.png\" alt=\"\" class=\"wp-image-36998\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/133e91ca10f63832b81be5676121ac0b.png 1728w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/133e91ca10f63832b81be5676121ac0b-300x160.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/133e91ca10f63832b81be5676121ac0b-1024x548.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/133e91ca10f63832b81be5676121ac0b-768x411.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/133e91ca10f63832b81be5676121ac0b-1536x821.png 1536w\" sizes=\"(max-width: 1728px) 100vw, 1728px\" \/><\/figure>\n\n\n\n<p>\u4f5c\u6210\u3055\u308c\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a1\u30a4\u30eb\u306e\u69cb\u6210\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table is-thead-centered\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">\u30d5\u30a9\u30eb\u30c0<\/th><th>\u5185\u5bb9<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>src\/mastra<\/code><\/td><td>\u30b3\u30a2\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30a9\u30eb\u30c0<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>src\/mastra\/agents<\/code><\/td><td>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u8a2d\u5b9a\u3068\u5b9a\u7fa9<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>src\/mastra\/tools<\/code><\/td><td>\u30ab\u30b9\u30bf\u30e0\u30c4\u30fc\u30eb\u306e\u5b9a\u7fa9<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>src\/mastra\/workflows<\/code><\/td><td>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u5b9a\u7fa9<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>src\/mastra\/index.ts<\/code><\/td><td>Mastra\u306e\u30e1\u30a4\u30f3\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>.env<\/code><\/td><td>\u74b0\u5883\u5909\u6570<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>package.json<\/code><\/td><td>Node.js\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u30fb\u30b9\u30af\u30ea\u30d7\u30c8\u30fb\u4f9d\u5b58\u95a2\u4fc2<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>tsconfig.json<\/code><\/td><td>TypeScript\u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u8a2d\u5b9a<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">API\u30ad\u30fc\u306e\u8ffd\u52a0<\/div><div class=\"swell-block-step__body\">\n<p>\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6642\u306bAPI\u30ad\u30fc\u3092\u6307\u5b9a\u3057\u306a\u304b\u3063\u305f\u5834\u5408\u306f<code>.env<\/code>\u30d5\u30a1\u30a4\u30eb\u306bAPI\u30ad\u30fc\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OPENAI_API_KEY=&lt;your-api-key&gt;<\/code><\/pre>\n\n\n\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306fOpenAI\u306eAPI\u30ad\u30fc\u3092\u4f7f\u3063\u3066\u3044\u307e\u3059\u304c\u3001Anthropic\u306eAPI\u30ad\u30fc\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f<code>ANTHROPIC_API_KEY<\/code>\u3001Gemini\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f<code>GOOGLE_GENERATIVE_AI_API_KEY<\/code>\u306a\u3069\u3001\u4f7f\u7528\u3059\u308bAPI\u306b\u5408\u3063\u305f\u3082\u306e\u3092\u8a18\u8ff0\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">\u958b\u767a\u7528\u30b5\u30fc\u30d0\u30fc\u306e\u8d77\u52d5<\/div><div class=\"swell-block-step__body\">\n<p><code>cd<\/code>\u30b3\u30de\u30f3\u30c9\u3067\u4f5c\u6210\u3057\u305f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u79fb\u52d5\u3057\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066Mastra\u306e\u958b\u767a\u7528\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm run dev<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2048\" height=\"1099\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e33c02eb6595ba4524989c811c841aa4-1.png\" alt=\"\" class=\"wp-image-37003\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e33c02eb6595ba4524989c811c841aa4-1.png 2048w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e33c02eb6595ba4524989c811c841aa4-1-300x161.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e33c02eb6595ba4524989c811c841aa4-1-1024x549.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e33c02eb6595ba4524989c811c841aa4-1-768x412.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/e33c02eb6595ba4524989c811c841aa4-1-1536x824.png 1536w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/figure>\n\n\n\n<p>\u8d77\u52d5\u3059\u308b\u3068\u3001<code>http:\/\/localhost:4111<\/code>\u3067\u30b5\u30fc\u30d0\u30fc\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2048\" height=\"930\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/8b0fc5eb9aecf170810971f12c043cbe-scaled.png\" alt=\"\" class=\"wp-image-37020\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/8b0fc5eb9aecf170810971f12c043cbe-scaled.png 2048w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/8b0fc5eb9aecf170810971f12c043cbe-300x136.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/8b0fc5eb9aecf170810971f12c043cbe-1024x465.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/8b0fc5eb9aecf170810971f12c043cbe-768x349.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/8b0fc5eb9aecf170810971f12c043cbe-1536x697.png 1536w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/figure>\n<\/div><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Mastra\u306eAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5b9f\u8df5\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/a813f67851ce8ba8cfd2add4cf7d0e7c.png\" alt=\"\" class=\"wp-image-37191\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/a813f67851ce8ba8cfd2add4cf7d0e7c.png 1536w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/a813f67851ce8ba8cfd2add4cf7d0e7c-300x200.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/a813f67851ce8ba8cfd2add4cf7d0e7c-1024x683.png 1024w\" sizes=\"(max-width: 1536px) 100vw, 1536px\" \/><\/figure>\n\n\n\n<p>\u3053\u3053\u3067\u306f\u3001Mastra\u3092\u4f7f\u3063\u3066\u5b9f\u969b\u306bAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30b3\u30fc\u30c9\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5929\u6c17\u60c5\u5831\u3092\u63d0\u4f9b\u3059\u308b\u6c17\u8c61\u30a2\u30b7\u30b9\u30bf\u30f3\u30c8\u3092\u4f8b\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<div class=\"swell-block-step\" data-num-style=\"circle\">\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">\u30c4\u30fc\u30eb\u306e\u4f5c\u6210<\/div><div class=\"swell-block-step__body\">\n<p>\u307e\u305a\u306f\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u304c\u5916\u90e8\u304b\u3089\u5929\u6c17\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306e\u30c4\u30fc\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4eca\u56de\u306f\u5929\u6c17\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>Open-Meteo<\/strong><\/span>\u3068\u3044\u3046\u7121\u6599\u306eAPI\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const getWeather = async (location: string) =&gt; {\n  const geocodingUrl = `https:\/\/geocoding-api.open-meteo.com\/v1\/search?name=${encodeURIComponent(location)}&amp;count=1`;\n  const geocodingResponse = await fetch(geocodingUrl);\n  const geocodingData = (await geocodingResponse.json()) as GeocodingResponse;\n\n  if (!geocodingData.results?.&#91;0]) {\n    throw new Error(`Location '${location}' not found`);\n  }\n\n  const { latitude, longitude, name } = geocodingData.results&#91;0];\n\n  const weatherUrl = `https:\/\/api.open-meteo.com\/v1\/forecast?latitude=${latitude}&amp;longitude=${longitude}&amp;current=temperature_2m,apparent_temperature,relative_humidity_2m,wind_speed_10m,wind_gusts_10m,weather_code`;\n\n  const response = await fetch(weatherUrl);\n  const data = (await response.json()) as WeatherResponse;\n\n  return {\n    temperature: data.current.temperature_2m,\n    feelsLike: data.current.apparent_temperature,\n    humidity: data.current.relative_humidity_2m,\n    windSpeed: data.current.wind_speed_10m,\n    windGust: data.current.wind_gusts_10m,\n    conditions: getWeatherCondition(data.current.weather_code),\n    location: name,\n  };\n};<\/code><\/pre>\n\n\n\n<p>\u307e\u305f\u3001<span class=\"swl-marker mark_yellow\"><strong>Mastra \u306e\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306fJSON\u30b9\u30ad\u30fc\u30de\u307e\u305f\u306fZod\u30b9\u30ad\u30fc\u30de\u3092\u4f7f\u7528\u3057\u3066\u578b\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3067\u3001\u69cb\u9020\u5316\u3055\u308c\u305f\u30c7\u30fc\u30bf\u3092\u8fd4\u3059\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>\u3053\u3053\u3067\u306f\u3001Zod\u30b9\u30ad\u30fc\u30de\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { z } from 'zod';\n\nexport const weatherTool = createTool({\n  id: 'get-weather',\n  description: 'Get current weather for a location',\n  inputSchema: z.object({\n    location: z.string().describe('City name'),\n  }),\n  outputSchema: z.object({\n    temperature: z.number(),\n    feelsLike: z.number(),\n    humidity: z.number(),\n    windSpeed: z.number(),\n    windGust: z.number(),\n    conditions: z.string(),\n    location: z.string(),\n  }),\n  execute: async ({ context }) =&gt; {\n    return await getWeather(context.location);\n  },\n});<\/code><\/pre>\n\n\n\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001<code>createTool<\/code>\u95a2\u6570\u3092\u7528\u3044\u3066\u3001\u5165\u529b\u3055\u308c\u305f\u90fd\u5e02\u540d\u306b\u3064\u3044\u3066\u73fe\u5728\u306e\u6c17\u6e29\u3084\u98a8\u901f\u306a\u3069\u3092\u8fd4\u3059\u30c4\u30fc\u30eb\u3092\u5b9f\u88c5\u3057\u3001<code>weatherTool<\/code>\u3068\u3057\u3066\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u5b9a\u7fa9<\/div><div class=\"swell-block-step__body\">\n<p>\u7d9a\u3044\u3066\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>Mastra \u3067\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u5b9a\u7fa9\u3059\u308b\u306b\u306f\u3001<code>Agent<\/code>\u30af\u30e9\u30b9\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u307e\u305f\u3001\u3053\u3053\u3067\u5148\u307b\u3069\u4f5c\u6210\u3057\u305f\u30c4\u30fc\u30eb\u3082\u6e21\u3059\u3053\u3068\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { openai } from '@ai-sdk\/openai';\nimport { Agent } from '@mastra\/core\/agent';\nimport { Memory } from '@mastra\/memory';\nimport { LibSQLStore } from '@mastra\/libsql';\nimport { weatherTool } from '..\/tools\/weather-tool';\n\nexport const weatherAgent = new Agent({\n  name: 'Weather Agent',\n  instructions: `\n      You are a helpful weather assistant that provides accurate weather information.\n\n      Your primary function is to help users get weather details for specific locations. When responding:\n      - Always ask for a location if none is provided\n      - If the location name isn\u2019t in English, please translate it\n      - If giving a location with multiple parts (e.g. \"New York, NY\"), use the most relevant part (e.g. \"New York\")\n      - Include relevant details like humidity, wind conditions, and precipitation\n      - Keep responses concise but informative\n\n      Use the weatherTool to fetch current weather data.\n`,\n  model: openai('gpt-4o-mini'),\n  tools: { weatherTool },\n  memory: new Memory({\n    storage: new LibSQLStore({\n      url: 'file:..\/mastra.db', \/\/ path is relative to the .mastra\/output directory\n    }),\n  }),\n});<\/code><\/pre>\n\n\n\n<p>\u306a\u304a\u3001\u4e3b\u306a\u8a2d\u5b9a\u9805\u76ee\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table is-thead-centered\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">\u8a2d\u5b9a\u9805\u76ee<\/th><th>\u5185\u5bb9<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>name<\/code><\/td><td>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u540d<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>instructions<\/code><\/td><td>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306b\u4e0e\u3048\u308b\u30b7\u30b9\u30c6\u30e0\u30e1\u30c3\u30bb\u30fc\u30b8<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>model<\/code><\/td><td>\u4f7f\u7528\u3059\u308b\u30e2\u30c7\u30eb<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><code>tools<\/code><\/td><td>\u4f7f\u7528\u3059\u308b\u30c4\u30fc\u30eb<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u307e\u305f\u3001<code>memory<\/code>\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u4f1a\u8a71\u5c65\u6b74\u306e\u4fdd\u5b58<\/strong><\/span>\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u69cb\u7bc9<\/div><div class=\"swell-block-step__body\">\n<p>\u6b21\u306b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u69cb\u7bc9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u306f\u3001<code>createStep<\/code>\u95a2\u6570\u3067\u30b9\u30c6\u30c3\u30d7\u3092\u5b9a\u7fa9\u3057\u3001\u5165\u529b\u30fb\u51fa\u529b\u30b9\u30ad\u30fc\u30de\u3068\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fetchWeather = createStep({\n  id: 'fetch-weather',\n  description: 'Fetches weather forecast for a given city',\n  inputSchema: z.object({\n    city: z.string().describe('The city to get the weather for'),\n  }),\n  outputSchema: forecastSchema,\n  execute: async ({ inputData }) =&gt; {\n    if (!inputData) {\n      throw new Error('Input data not found');\n    }\n\n    const geocodingUrl = `https:\/\/geocoding-api.open-meteo.com\/v1\/search?name=${encodeURIComponent(inputData.city)}&amp;count=1`;\n    const geocodingResponse = await fetch(geocodingUrl);\n    const geocodingData = (await geocodingResponse.json()) as {\n      results: { latitude: number; longitude: number; name: string }&#91;];\n    };\n\n    if (!geocodingData.results?.&#91;0]) {\n      throw new Error(`Location '${inputData.city}' not found`);\n    }\n\n    const { latitude, longitude, name } = geocodingData.results&#91;0];\n\n    const weatherUrl = `https:\/\/api.open-meteo.com\/v1\/forecast?latitude=${latitude}&amp;longitude=${longitude}&amp;current=precipitation,weathercode&amp;timezone=auto,&amp;hourly=precipitation_probability,temperature_2m`;\n    const response = await fetch(weatherUrl);\n    const data = (await response.json()) as {\n      current: {\n        time: string;\n        precipitation: number;\n        weathercode: number;\n      };\n      hourly: {\n        precipitation_probability: number&#91;];\n        temperature_2m: number&#91;];\n      };\n    };<\/code><\/pre>\n\n\n\n<p>\u305d\u3057\u3066<code>createWorkflow<\/code>\u3067\u30b9\u30c6\u30c3\u30d7\u3092\u69cb\u6210\u3057\u3001\u5b9f\u884c\u30d5\u30ed\u30fc\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const weatherWorkflow = createWorkflow({\n  id: 'weather-workflow',\n  inputSchema: z.object({\n    city: z.string().describe('The city to get the weather for'),\n  }),\n  outputSchema: z.object({\n    activities: z.string(),\n  }),\n})\n  .then(fetchWeather)\n  .then(planActivities);<\/code><\/pre>\n\n\n\n<p>\u6700\u5f8c\u306b<code>.commit()<\/code>\u3067\u5b8c\u4e86\u3057\u3001\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>weatherWorkflow.commit();\nexport { weatherWorkflow };<\/code><\/pre>\n<\/div><\/div>\n\n\n\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3068\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u767b\u9332<\/div><div class=\"swell-block-step__body\">\n<p>\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u5b9a\u7fa9\u53ca\u3073\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u69cb\u7bc9\u304c\u5b8c\u4e86\u3057\u305f\u3089\u3001<code>src\/mastra\/index.ts<\/code>\u306b\u305d\u308c\u3089\u3092\u767b\u9332\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import { Mastra } from '@mastra\/core\/mastra';\nimport { PinoLogger } from '@mastra\/loggers';\nimport { LibSQLStore } from '@mastra\/libsql';\nimport { weatherWorkflow } from '.\/workflows\/weather-workflow';\nimport { weatherAgent } from '.\/agents\/weather-agent';\n\nexport const mastra = new Mastra({\n  workflows: { weatherWorkflow },\n  agents: { weatherAgent },\n  storage: new LibSQLStore({\n    \/\/ stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:..\/mastra.db\n    url: \":memory:\",\n  }),\n  logger: new PinoLogger({\n    name: 'Mastra',\n    level: 'info',\n  }),\n});<\/code><\/pre>\n<\/div><\/div>\n\n\n\n<div class=\"swell-block-step__item\"><div class=\"swell-block-step__number u-bg-main\"><span class=\"__label\">STEP<\/span><\/div><div class=\"swell-block-step__title u-fz-l\">\u5b9f\u884c<\/div><div class=\"swell-block-step__body\">\n<p>\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5165\u529b\u3057\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm run dev<\/code><\/pre>\n\n\n\n<p>\u5b9f\u884c\u3059\u308b\u3068\u3001\u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u3067\u30b5\u30fc\u30d0\u30fc\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2048\" height=\"816\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/204a4e5dde2521f4bdd4700110c9f010.png\" alt=\"\" class=\"wp-image-37074\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/204a4e5dde2521f4bdd4700110c9f010.png 2048w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/204a4e5dde2521f4bdd4700110c9f010-300x120.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/204a4e5dde2521f4bdd4700110c9f010-1024x408.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/204a4e5dde2521f4bdd4700110c9f010-768x306.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/204a4e5dde2521f4bdd4700110c9f010-1536x612.png 1536w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/figure>\n\n\n\n<p>\u8868\u793a\u3055\u308c\u305fURL\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3053\u3068\u3067\u3001\u30b5\u30fc\u30d0\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2048\" height=\"1053\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/95657bde2f5650e6f292f23ed228b7c2-scaled.png\" alt=\"\" class=\"wp-image-37075\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/95657bde2f5650e6f292f23ed228b7c2-scaled.png 2048w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/95657bde2f5650e6f292f23ed228b7c2-300x154.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/95657bde2f5650e6f292f23ed228b7c2-1024x526.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/95657bde2f5650e6f292f23ed228b7c2-768x395.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/95657bde2f5650e6f292f23ed228b7c2-1536x789.png 1536w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/figure>\n\n\n\n<p>\u5b9f\u969b\u306b\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u5165\u529b\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>\u4ee5\u4e0b\u306f\u3001\u6771\u4eac\u306e\u5929\u6c17\u3092\u8cea\u554f\u3057\u305f\u969b\u306e\u89e3\u7b54\u3067\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2048\" height=\"1043\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/aa99c8004079e2a3b7abfa48f6834a3a-scaled.png\" alt=\"\" class=\"wp-image-37076\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/aa99c8004079e2a3b7abfa48f6834a3a-scaled.png 2048w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/aa99c8004079e2a3b7abfa48f6834a3a-300x153.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/aa99c8004079e2a3b7abfa48f6834a3a-1024x522.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/aa99c8004079e2a3b7abfa48f6834a3a-768x391.png 768w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/aa99c8004079e2a3b7abfa48f6834a3a-1536x783.png 1536w\" sizes=\"(max-width: 2048px) 100vw, 2048px\" \/><\/figure>\n\n\n\n<p>\u73fe\u5728\u306e\u6771\u4eac\u306e\u5929\u6c17\u3084\u98a8\u901f\u306a\u3069\u3092\u6559\u3048\u3066\u304f\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u5206\u304b\u308a\u307e\u3059\u3002<\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Mastra\u3068\u7af6\u5408\u30c4\u30fc\u30eb\u3068\u306e\u9055\u3044<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1024\" height=\"677\" src=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/Gemini_Generated_Image_vc6xt6vc6xt6vc6x.png\" alt=\"\" class=\"wp-image-37195\" srcset=\"https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/Gemini_Generated_Image_vc6xt6vc6xt6vc6x.png 1024w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/Gemini_Generated_Image_vc6xt6vc6xt6vc6x-300x198.png 300w, https:\/\/miralab.co.jp\/media\/wp-content\/uploads\/2025\/06\/Gemini_Generated_Image_vc6xt6vc6xt6vc6x-768x508.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Mastra\u3068\u4f3c\u305f\u30c4\u30fc\u30eb\u3068\u3057\u3066\u3001LangChain\u3084LlamaIndex\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6700\u5f8c\u306b\u3001Mastra\u3068\u305d\u308c\u3089\u306e\u7af6\u5408\u30c4\u30fc\u30eb\u3068\u306e\u9055\u3044\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mastra\u3068LangChain\u306e\u9055\u3044<\/h3>\n\n\n\n<p>Mastra\u3068LangChain\u306e\u6700\u3082\u5927\u304d\u306a\u9055\u3044\u306f\u3001\u8a2d\u8a08\u601d\u60f3\u3068\u4e3b\u8981\u306a\u958b\u767a\u8a00\u8a9e\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>LangChain\u306f\u958b\u767a\u8a00\u8a9e\u304cPython\u4e2d\u5fc3\u3067\u3042\u308a\u3001\u975e\u5e38\u306b\u591a\u6a5f\u80fd\u3067\u81ea\u7531\u5ea6\u304c\u9ad8\u3044\u4e00\u65b9\u3001\u30b3\u30fc\u30c9\u304c\u8907\u96d1\u5316\u3057\u3084\u3059\u3044\u5074\u9762\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-wp-embed is-provider-miralabai wp-block-embed-miralabai\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/miralab.co.jp\/media\/langchain\/\n<\/div><\/figure>\n\n\n\n<p>\u5bfe\u7167\u7684\u306bMastra\u306f<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>TypeScript<\/strong><\/span>\u3067\u52d5\u4f5c\u3057\u3001Web\u958b\u767a\u3068\u306e\u89aa\u548c\u6027\u3092\u6700\u5927\u9650\u306b\u9ad8\u3081\u3066\u3044\u308b\u306e\u304c\u7279\u9577\u3067\u3059\u3002<\/p>\n\n\n\n<p>Mastra\u306f\u5ba3\u8a00\u7684\u306a\u69cb\u6587\u3092\u7528\u3044\u3066\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3084\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u30b7\u30f3\u30d7\u30eb\u304b\u3064\u69cb\u9020\u7684\u306b\u8a18\u8ff0\u3067\u304d\u308b\u305f\u3081\u3001\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u6bd4\u8f03\u7684\u4f4e\u304f\u3001\u76f4\u611f\u7684\u306a\u958b\u767a\u304c\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u4e00\u65b9LangChain\u306f\u3001\u3088\u308a\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3067\u67d4\u8edf\u306a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u7d44\u307f\u5408\u308f\u305b\u3092\u91cd\u8996\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u305d\u306e\u305f\u3081\u3001<span class=\"swl-marker mark_yellow\"><strong>Web\u958b\u767a\u8005\u304c\u8fc5\u901f\u306bAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u69cb\u7bc9\u3057\u305f\u3044\u5834\u5408\u306fMastra\u304c\u3001Python\u74b0\u5883\u3067\u8c4a\u5bcc\u306a\u6a5f\u80fd\u3092\u7d30\u304b\u304f\u5236\u5fa1\u3057\u305f\u3044\u5834\u5408\u306fLangChain\u304c\u9069\u3057\u3066\u3044\u308b\u3068\u8a00\u3048\u308b\u3067\u3057\u3087\u3046<\/strong><\/span>\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mastra\u3068LlamaIndex\u306e\u9055\u3044<\/h3>\n\n\n\n<p>Mastra\u3068LlamaIndex\u306f\u3001\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u4e3b\u773c\u3092\u7f6e\u304f\u9818\u57df\u304c\u7570\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>LlamaIndex\u306fRAG\u306b\u7279\u5316\u3057\u305f<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u30c7\u30fc\u30bf\u4e2d\u5fc3<\/strong><\/span>\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308a\u3001\u5916\u90e8\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u53d6\u308a\u8fbc\u307f\u3001\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u4f5c\u6210\u3001\u60c5\u5831\u306e\u53d6\u5f97\u3068\u3044\u3063\u305f\u6a5f\u80fd\u306b\u512a\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u4e00\u65b9\u3067Mastra\u306f\u3001RAG\u3092\u91cd\u8981\u306a\u6a5f\u80fd\u306e\u4e00\u3064\u3068\u3057\u3066\u5185\u5305\u3057\u3064\u3064\u3082\u3001\u3088\u308a<span class=\"swl-inline-color has-swl-deep-01-color\"><strong>\u6c4e\u7528\u7684\u306aAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8<\/strong><\/span>\u306e\u69cb\u7bc9\u3092\u76ee\u6307\u3059\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002<\/p>\n\n\n\n<p>Mastra\u306e\u6838\u5fc3\u306f\u3001RAG\u3092\u542b\u3080\u69d8\u3005\u306a\u30c4\u30fc\u30eb\u3092\u99c6\u4f7f\u3057\u3066\u81ea\u5f8b\u7684\u306b\u30bf\u30b9\u30af\u3092\u8a08\u753b\u30fb\u5b9f\u884c\u3059\u308b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u305d\u306e\u3082\u306e\u306b\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3057\u305f\u304c\u3063\u3066\u3001<span class=\"swl-marker mark_yellow\"><strong>RAG\u3092\u7528\u3044\u305f\u7c21\u5358\u306aAI\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u304c\u76ee\u7684\u306a\u3089LlamaIndex\u3001RAG\u3092\u6a5f\u80fd\u306e\u4e00\u90e8\u3068\u3057\u3066\u5229\u7528\u3059\u308b\u81ea\u5f8b\u578b\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u958b\u767a\u304c\u76ee\u7684\u306a\u3089Mastra\u304c\u9069\u3057\u3066\u3044\u307e\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u307e\u3068\u3081<\/h2>\n\n\n\n<p>Mastra\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001<span class=\"swl-marker mark_yellow\"><strong>API\u9023\u643a\u3092\u3057\u3066\u7c21\u5358\u306bAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u4f5c\u6210\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059<\/strong><\/span>\u3002<\/p>\n\n\n\n<p>Mastra\u81ea\u4f53\u306f\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u3067\u3042\u308a\u3001\u7121\u6599\u3067\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u305f\u3060\u3057\u3001\u5404\u7a2e\u30b5\u30fc\u30d3\u30b9\u306eAPI\u6599\u91d1\u306f\u304b\u304b\u308b\u305f\u3081\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306b\u3088\u3063\u3066\u306f\u5c0f\u578b\u30e2\u30c7\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u6599\u91d1\u3092\u7bc0\u7d04\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3067\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p>LLM\u3092\u7528\u3044\u305fAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u77ed\u671f\u9593\u3067\u4f5c\u6210\u3057\u305f\u3044\u3068\u3044\u3046\u65b9\u306f\u3001Mastra\u306e\u4f7f\u7528\u3092\u691c\u8a0e\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u7c21\u5358\u306b\u69cb\u7bc9\u3057\u305f\u3044\u5834\u5408\u306f\u3001Mastra\u306e\u4f7f\u7528\u3092\u304a\u3059\u3059\u3081\u3057\u307e\u3059\u3002<\/p>\n<p>Mastra\u3068\u306fTypeScript\u3067\u52d5\u4f5c\u3059\u308bAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u958b\u767a\u3059\u308b\u305f\u3081\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308a\u3001API\u3092\u4f7f\u7528\u3057\u3066\u8907\u96d1\u306a\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u69cb\u7bc9\u3092\u7c21\u5358\u306b\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001Mastra\u306e\u4f7f\u3044\u65b9\u3084\u6599\u91d1\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n<p>\u307e\u305f\u3001LangChain\u3084LlamaIndex\u3068\u3044\u3063\u305f\u7af6\u5408\u30c4\u30fc\u30eb\u3068\u306e\u9055\u3044\u3082\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n","protected":false},"author":30,"featured_media":37325,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"swell_btn_cv_data":"","_spnote":"mastra \u3068\u306f\r\nmastra \u4f7f\u3044\u65b9\r\nmastra ai\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\r\nmastra \u6599\u91d1\r\nmastra typescript","_custom_second_post_notes":"## 1. \u30da\u30eb\u30bd\u30ca\r\n- **\u8077\u7a2e**: \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\uff0f\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u7cfb Web \u30a8\u30f3\u30b8\u30cb\u30a2  \r\n- **\u7d4c\u9a13**: Next.js\u30fbNode.js \u3092\u5e38\u7528\u3001\u751f\u6210 AI OSS\uff08LangChain \u306a\u3069\uff09\u3092\u4e00\u901a\u308a\u8a66\u3057\u305f\u30ec\u30d9\u30eb  \r\n- **\u8ab2\u984c**:  \r\n  1. LLM \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u3092\u77ed\u671f\u9593\u3067\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u3057\u305f\u3044  \r\n  2. TypeScript \u3067\u578b\u5b89\u5168\u306b\u62e1\u5f35\u3057\u305f\u3044  \r\n  3. \u30e9\u30f3\u30cb\u30f3\u30b0\u30b3\u30b9\u30c8\u3092\u4e8b\u524d\u306b\u628a\u63e1\u3057\u305f\u3044  \r\n\r\n## 2. \u8a18\u4e8b\u306e\u76ee\u7684\r\n- **Mastra \u306e\u4f4d\u7f6e\u4ed8\u3051\u3068\u7279\u5fb4**\u3092\u660e\u78ba\u5316\u3057\u3001\u7af6\u5408\uff08LangChain, LlamaIndex \u7b49\uff09\u3068\u306e\u5dee\u5225\u5316\u30dd\u30a4\u30f3\u30c8\u3092\u63d0\u793a  \r\n- **\u5c0e\u5165\u301c\u57fa\u672c\u4f7f\u7528\u6cd5\u301c\u5fdc\u7528\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb**\u3092 1 \u8a18\u4e8b\u3067\u5b8c\u7d50\u3055\u305b\u3001\u8aad\u8005\u304c \u201cHello\u202fAgent\u201d \u307e\u3067 30\u202f\u5206\u3067\u5230\u9054\u3067\u304d\u308b\u69cb\u6210\u306b\u3059\u308b  \r\n- **\u6599\u91d1\u8a66\u7b97 & \u7bc0\u7d04\u8853**\u3092\u76db\u308a\u8fbc\u307f\u3001\u5c0e\u5165\u5224\u65ad\u3092\u5f8c\u62bc\u3057\u3059\u308b  \r\n\r\n## \u53c2\u8003\u8a18\u4e8b\u69cb\u6210\u4f8b\uff08H2\u301cH3\u30fb\u2605\uff1d\u91cd\u8981\u898b\u51fa\u3057\uff09\r\n\u203b\u3042\u304f\u307e\u3067\u3082\u53c2\u8003\u306e\u305f\u3081\u30de\u30cb\u30e5\u30a2\u30eb\u3092\u53c2\u7167\u306e\u4e0a\u3001\u9069\u5207\u306a\u898b\u51fa\u3057\u69cb\u6210\u3092\u8003\u3048\u3066\u304f\u3060\u3055\u3044\u3002\r\n- **H2 \/ \u2605\uff1d\u91cd\u8981\u898b\u51fa\u3057\uff08\u7af6\u5408\u8a18\u4e8b\u3067\u983b\u51fa\uff09**  \r\n  1. \u2605 **mastra \u3068\u306f\uff5cTypeScript\u88fdAI\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u6982\u8981**\uff08\u5bfe\u7b56KW: *mastra \u3068\u306f*\uff09  \r\n     - **H3\u00a0mastra\u202fAgents \u2014 \u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u5f79\u5272\u3068\u57fa\u672c API**  \r\n     - **H3\u00a0mastra\u202fTools \u2014 \u5916\u90e8\u6a5f\u80fd\u3092\u547c\u3073\u51fa\u3059\u30d7\u30e9\u30b0\u30a4\u30f3\u6a5f\u69cb**  \r\n     - **H3\u00a0mastra\u202fWorkflows \u2014 \u30bf\u30b9\u30af\u3092\u81ea\u52d5\u5316\u3059\u308b\u30d5\u30ed\u30fc\u8a2d\u8a08**  \r\n     - **H3\u00a0mastra\u202fMemory \u2014 \u4f1a\u8a71\uff0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u4fdd\u6301\u3059\u308b\u4ed5\u7d44\u307f**  \r\n  2. \u2605 **mastra \u6599\u91d1\u30d7\u30e9\u30f3\u3068\u30b3\u30b9\u30c8\u6700\u9069\u5316**\uff08\u5bfe\u7b56KW: *mastra \u6599\u91d1*\uff09  \r\n  3. \u2605 **mastra \u4f7f\u3044\u65b9\uff5c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304b\u3089\u57fa\u672c\u64cd\u4f5c\u307e\u3067**\uff08\u5bfe\u7b56KW: *mastra \u4f7f\u3044\u65b9*\uff09  \r\n  4. **mastra ai\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u5b9f\u8df5\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb**\uff08\u5bfe\u7b56KW: *mastra ai\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8*\uff09  \r\n\r\n## 4. \u57f7\u7b46\u30dd\u30a4\u30f3\u30c8\r\n**\u30b3\u30fc\u30c9\u4f8b\u306f\u6700\u5c0f\u5b9f\u884c\u5358\u4f4d\u3067**\uff1a`npm create mastra-app@latest` \u2192 `helloAgent.ts` \u30b5\u30f3\u30d7\u30eb \u2192 \u5b9f\u884c\u7d50\u679c\u30ad\u30e3\u30d7\u30c1\u30e3  \r\n**\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8(H3) \u306b\u5b9f\u7528 Tips**\uff1a  \r\n   - *Agents*\u00a0\u2026 \u5916\u90e8 API \u547c\u3073\u51fa\u3057\u3092\u884c\u3046 `tool` \u6ce8\u5165\u4f8b  \r\n   - *Tools*\u00a0\u2026 Zod \u30b9\u30ad\u30fc\u30de\u3067\u578b\u5b9a\u7fa9 \u2192 LLM \u547c\u3073\u51fa\u3057\u4f8b  \r\n   - *Workflows*\u00a0\u2026 \u4e26\u5217\u5b9f\u884c & \u6761\u4ef6\u5206\u5c90\u30b5\u30f3\u30d7\u30eb  \r\n   - *Memory*\u00a0\u2026 Redis \u4fdd\u5b58\u3068 RAG \u9023\u643a  \r\n**\u6599\u91d1\u7ae0\u3067\u8868\u3092\u633f\u5165**\uff1aOpenAI\uff0fAnthropic\uff0flocal GPU \u63a8\u8ad6\u306e\u30b3\u30b9\u30c8\u6bd4\u8f03\u3001\u6708\u6b21 10\u202fk \u30ea\u30af\u30a8\u30b9\u30c8\u60f3\u5b9a","_dp_original":0,"footnotes":""},"categories":[184,34],"tags":[],"ppma_author":[70,46],"class_list":["post-35933","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-generative_ai","category-development_ai"],"pp_statuses_selecting_workflow":false,"pp_workflow_action":"current","pp_status_selection":"publish","authors":[{"term_id":70,"user_id":30,"is_guest":0,"slug":"piska","display_name":"piska","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bc784962d41990132dbea69bd8f8aaa6c7417d7b37c76e2f19d86a51b5663322?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""},{"term_id":46,"user_id":24,"is_guest":0,"slug":"hiraoka_miralab","display_name":"\u5e73\u5ca1\u5c06\u548c","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/3c579256963d4691dbbea834bac4ac5c1e3d7f752b756a9b0873d53a68b5ccf8?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/posts\/35933","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/users\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/comments?post=35933"}],"version-history":[{"count":19,"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/posts\/35933\/revisions"}],"predecessor-version":[{"id":37328,"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/posts\/35933\/revisions\/37328"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/media\/37325"}],"wp:attachment":[{"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/media?parent=35933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/categories?post=35933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/tags?post=35933"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/miralab.co.jp\/media\/wp-json\/wp\/v2\/ppma_author?post=35933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}