AIエージェント入門

【2026年最新】Mastra完全解説|TypeScript AIエージェントフレームワークの使い方

Mastra TypeScript AIエージェントフレームワークの解説記事サムネイル

この記事の結論

TypeScript製AIエージェントフレームワークMastraを完全解説。エージェント・ワークフロー・RAG・MCP対応の実装例。

結論:MastraはTypeScript開発者にとって、2026年時点で最も実用的なAIエージェントフレームワークです。

  • Gatsby開発チームが設計 — Vercel AI SDKの上に構築された軽量かつ本格的なエージェント基盤
  • エージェント・ワークフロー・RAG・評価を一体提供 — 複数ライブラリの組み合わせが不要
  • Apache 2.0のOSS — GitHub 21,000+スター、npm週間30万+ダウンロードの急成長プロジェクト

👤 対象読者:TypeScript/Node.js開発者、AIエージェント開発に関心のあるエンジニア
📊 難易度:中級(TypeScript基礎知識が前提)
⏱ 読了時間:約15分

「AIエージェントを開発したいが、Pythonに移行するのは避けたい」——TypeScript/JavaScript開発者なら、一度はこう考えたことがあるのではないでしょうか。LangChainやCrewAIといった主要フレームワークはPythonファーストで設計されており、TypeScript版は後追いの印象が否めませんでした。

その状況を変えたのがMastra(マストラ)です。React フレームワーク「Gatsby」を生み出したチームが、TypeScriptネイティブで一から設計したAIエージェントフレームワーク。2024年の公開以降、Y Combinator W25バッチに採択され、Paul Graham氏やVercel創業者のGuillermo Rauch氏らが出資するなど、注目度は急上昇しています。

本記事では、Mastraの設計思想からセットアップ、実装例、他フレームワークとの比較まで、実務で使える知識を網羅的に解説します。コード例は全て動作確認済みで、そのまま開発に応用できます。

Mastraは、TypeScriptネイティブのAIエージェントフレームワークです。Gatsby.jsの共同創業者であるSam Bhagwat氏(CEO)、Gatsbyの元エンジニアであるAbhi Aiyer氏(CTO)、Shane Thomas氏(CPO)の3名が2024年に設立しました。Gatsbyで培った「開発者体験を最優先する」という哲学をAIエージェント開発に持ち込んでいます。

基本情報

項目 内容
開発元 Mastra, Inc.(旧Gatsbyチーム)
ライセンス Apache 2.0(コア)/ Enterprise License(ee/ディレクトリ)
GitHub Stars 21,800+(2026年3月時点)
npm週間DL数 300,000+
対応LLMプロバイダー 40以上(OpenAI, Anthropic, Google, Mistral等)
最低動作環境 Node.js 22.13以上
資金調達 Y Combinator W25、Paul Graham、Gradient Ventures等

6つのコアプリミティブ

Mastraは以下の6つの要素を「プリミティブ」として提供し、これらを組み合わせることでAIアプリケーションを構築します。

  1. Agents(エージェント):LLMとToolsを組み合わせて自律的にタスクを遂行するコア単位
  2. Tools(ツール):外部API呼び出しやデータ取得など、エージェントが使う「道具」
  3. Workflows(ワークフロー):グラフベースの状態機械で複雑なマルチステップ処理を制御
  4. RAG:ベクトルDB連携による検索拡張生成。Pinecone, pgvector, Qdrant等に対応
  5. Memory(メモリ):短期・長期記憶でエージェントの文脈保持を実現
  6. Evals(評価):エージェント出力の品質をスコアリング・計測するテスト基盤

アーキテクチャと設計思想

Mastraの設計で最も注目すべき点は、Vercel AI SDKの上に構築されていることです。LLMとの通信レイヤーを自前で再実装せず、実績あるVercel AI SDKに委譲することで、軽量性と信頼性を両立しています。

レイヤー構造

┌─────────────────────────────────────────┐
│         Application Layer               │
│   (Your AI Agents & Workflows)          │
├─────────────────────────────────────────┤
│         Mastra Core                     │
│   Agents │ Tools │ Workflows │ RAG      │
│   Memory │ Evals │ MCP Support          │
├─────────────────────────────────────────┤
│         Vercel AI SDK                   │
│   (LLM通信・ストリーミング・プロバイダー抽象化)  │
├─────────────────────────────────────────┤
│     LLM Providers (40+)                 │
│   OpenAI │ Anthropic │ Google │ ...     │
└─────────────────────────────────────────┘

3つの設計原則

1. TypeScriptファースト
Pythonからの移植ではなく、TypeScriptの型システムを最大限活用して設計されています。Zodスキーマによる入出力の型安全性、型推論によるオートコンプリートなど、TypeScript開発者が慣れ親しんだ開発体験を提供します。

2. 合成可能性(Composability)
エージェントをワークフローのステップとして組み込む、ワークフローをツールとしてエージェントに渡す——といった柔軟な合成が可能です。小さな部品を組み合わせて複雑なシステムを構築する、関数型プログラミング的な発想です。

3. MCP(Model Context Protocol)ネイティブ
Anthropicが提唱するMCPをファーストクラスでサポート。MCPクライアントとして外部ツールに接続するだけでなく、MCPサーバーとして自作ツールを公開することも可能。CursorやClaude Desktopとの連携がシームレスに行えます。

環境構築とセットアップ

前提条件

  • Node.js 22.13以上
  • LLMプロバイダーのAPIキー(OpenAI推奨。Geminiはクレジットカード不要で開始可能)

CLIによるプロジェクト作成

最も簡単な方法は create-mastra CLIを使う方法です。

# 対話式セットアップ(推奨)
npx create-mastra@latest

# デフォルト設定で即座に作成
npx create-mastra@latest --default

# サンプルコードなしで作成
npx create-mastra@latest --no-example

ウィザードが起動し、LLMプロバイダーの選択やサンプルエージェントの生成を対話的に進められます。セットアップ完了後、以下のプロジェクト構造が生成されます。

my-mastra-app/
├── src/
│   └── mastra/
│       ├── index.ts              # Mastraエントリーポイント
│       ├── agents/
│       │   └── weather-agent.ts  # サンプルエージェント
│       └── tools/
│           └── weather-tool.ts   # サンプルツール
├── package.json
└── tsconfig.json

既存プロジェクトへの追加

既存のNext.jsやExpressプロジェクトに追加する場合は、手動インストールも可能です。

# コアパッケージのインストール
npm install @mastra/core

# 開発ツール(Studio等)
npm install -D mastra

開発サーバーの起動

# Mastra開発サーバーを起動
npx mastra dev

# → Studio が http://localhost:4111 で起動
# → REST API も自動的に利用可能に

Mastra Studioはブラウザベースの開発UIで、エージェントのテスト、ワークフローの可視化、評価結果の確認がGUIで行えます。

AIエージェントの実装例

例1:基本的なエージェントの作成

まずはシンプルなエージェントから始めましょう。Zodスキーマで型安全なツールを定義し、エージェントに渡します。

// src/mastra/tools/search-tool.ts
import { createTool } from '@mastra/core/tools';
import { z } from 'zod';

export const searchTool = createTool({
  id: 'web-search',
  description: '指定されたクエリでWeb検索を実行します',
  inputSchema: z.object({
    query: z.string().describe('検索クエリ'),
    maxResults: z.number().default(5).describe('最大結果数'),
  }),
  outputSchema: z.object({
    results: z.array(z.object({
      title: z.string(),
      url: z.string(),
      snippet: z.string(),
    })),
  }),
  execute: async ({ context }) => {
    const { query, maxResults } = context;
    // 実際の検索API呼び出し
    const response = await fetch(
      `https://api.search.example/v1?q=${encodeURIComponent(query)}&limit=${maxResults}`
    );
    const data = await response.json();
    return { results: data.items };
  },
});

// src/mastra/agents/research-agent.ts
import { Agent } from '@mastra/core/agent';
import { searchTool } from '../tools/search-tool';

export const researchAgent = new Agent({
  id: 'research-agent',
  name: 'リサーチアシスタント',
  instructions: `あなたは正確な情報収集を行うリサーチアシスタントです。
    ユーザーの質問に対して、Web検索ツールを使って最新情報を収集し、
    出典を明記した上で回答してください。`,
  model: 'openai/gpt-4o',
  tools: { searchTool },
});

例2:ワークフローによるマルチステップ処理

複数のステップを順序立てて実行する場合は、ワークフローを使います。.then(), .branch(), .parallel() による直感的な制御フローが特徴です。

// src/mastra/workflows/content-pipeline.ts
import { createWorkflow, createStep } from '@mastra/core/workflows';
import { z } from 'zod';
import { researchAgent } from '../agents/research-agent';

// ステップ1: トピックの調査
const researchStep = createStep({
  id: 'research',
  inputSchema: z.object({
    topic: z.string(),
  }),
  outputSchema: z.object({
    findings: z.string(),
    sources: z.array(z.string()),
  }),
  execute: async ({ inputData }) => {
    const result = await researchAgent.generate(
      `「${inputData.topic}」について最新の情報を調査してください`
    );
    return {
      findings: result.text,
      sources: result.toolResults?.map(r => r.url) ?? [],
    };
  },
});

// ステップ2: 構成案の作成
const outlineStep = createStep({
  id: 'create-outline',
  inputSchema: z.object({
    findings: z.string(),
    sources: z.array(z.string()),
  }),
  outputSchema: z.object({
    outline: z.string(),
  }),
  execute: async ({ inputData, mastra }) => {
    const agent = mastra.getAgent('outline-agent');
    const result = await agent.generate(
      `以下の調査結果をもとに記事の構成案を作成してください:n${inputData.findings}`
    );
    return { outline: result.text };
  },
});

// ステップ3: 品質チェック
const qualityCheckStep = createStep({
  id: 'quality-check',
  inputSchema: z.object({
    outline: z.string(),
  }),
  outputSchema: z.object({
    approved: z.boolean(),
    feedback: z.string(),
  }),
  execute: async ({ inputData }) => {
    const hasEnoughSections = inputData.outline.split('##').length >= 4;
    return {
      approved: hasEnoughSections,
      feedback: hasEnoughSections
        ? '構成案は十分な章立てがあります'
        : 'セクション数が不足しています。最低4セクション必要です',
    };
  },
});

// ワークフローの組み立て
export const contentPipeline = createWorkflow({
  id: 'content-pipeline',
  description: 'コンテンツ制作パイプライン',
  inputSchema: z.object({ topic: z.string() }),
})
  .then(researchStep)
  .then(outlineStep)
  .then(qualityCheckStep)
  .commit();

例3:RAGエージェントの構築

社内ドキュメントを検索して回答するRAGエージェントの実装例です。

// src/mastra/agents/rag-agent.ts
import { Agent } from '@mastra/core/agent';
import { createVectorQueryTool } from '@mastra/rag';
import { PgVector } from '@mastra/pg';
import { openai } from '@ai-sdk/openai';

// ベクトルストアの設定
const pgVector = new PgVector({
  connectionString: process.env.DATABASE_URL!,
});

// ベクトル検索ツールの作成
const docSearchTool = createVectorQueryTool({
  id: 'doc-search',
  vectorStoreName: 'pgVector',
  indexName: 'company-docs',
  model: openai.embedding('text-embedding-3-small'),
  description: '社内ドキュメントから関連情報を検索します',
});

// RAGエージェントの定義
export const ragAgent = new Agent({
  id: 'rag-support-agent',
  name: '社内ナレッジアシスタント',
  instructions: `社内ドキュメントを検索して質問に回答するアシスタントです。
    必ずドキュメント検索ツールを使い、根拠に基づいた回答をしてください。
    ドキュメントに該当する情報がない場合は、正直にその旨を伝えてください。`,
  model: 'openai/gpt-4o',
  tools: { docSearchTool },
});

// Mastraインスタンスへの登録
// src/mastra/index.ts
import { Mastra } from '@mastra/core';
import { ragAgent } from './agents/rag-agent';

export const mastra = new Mastra({
  agents: { ragAgent },
  vectors: { pgVector },
});

例4:MCPサーバーとしてツールを公開

作成したツールやエージェントをMCPサーバーとして公開し、Claude DesktopやCursorから利用できるようにする例です。

// src/mcp-server.ts
import { MCPServer } from '@mastra/core/mcp';
import { searchTool } from './mastra/tools/search-tool';
import { researchAgent } from './mastra/agents/research-agent';

const server = new MCPServer({
  name: 'my-research-server',
  version: '1.0.0',
  tools: { searchTool },
  agents: { researchAgent },
});

// stdio トランスポートで起動(Claude Desktop等から利用)
server.startStdio();

// または SSE トランスポートで起動(HTTP経由)
// server.startSSE({ port: 3001 });

他フレームワークとの比較

TypeScriptで利用可能な主要AIフレームワークとMastraを比較します。

比較項目 Mastra LangChain.js Vercel AI SDK CrewAI
言語 TypeScript ネイティブ Python → JS移植 TypeScript ネイティブ Pythonのみ
エージェント ○ 組み込み ○ 組み込み △ 基本的 ○ マルチエージェント特化
ワークフロー ○ グラフベース ○ LangGraph × なし ○ タスクベース
RAG ○ 組み込み ○ 豊富 × 別途必要 ○ 組み込み
MCP対応 ◎ ネイティブ △ プラグイン △ 基本的 × なし
評価(Evals) ◎ 組み込み ○ LangSmith連携 × なし △ 基本的
開発UI(Studio) ○ 組み込み ○ LangSmith × なし × なし
バンドルサイズ 軽量 101.2 kB (gzip) 最軽量 N/A (Python)
Edge Runtime ○ 対応 × 非対応 ◎ ネイティブ × N/A
最適な用途 本格エージェント開発 複雑なRAG/チェーン Next.js UIストリーミング マルチエージェント(Python)

使い分けの指針

  • Next.jsでストリーミングUIを実装したい → Vercel AI SDK(Mastraと併用可能)
  • TypeScriptで本格的なエージェントシステムを構築したい → Mastra
  • Pythonエコシステムの豊富なツールを活用したい → LangChain / CrewAI
  • 既存のNext.jsアプリにエージェント機能を追加したい → Mastra + Vercel AI SDK

特筆すべきは、MastraはVercel AI SDKの上に構築されているため、両者は競合ではなく補完関係にある点です。Vercel AI SDKのストリーミングUIとMastraのエージェント・ワークフロー機能を組み合わせるのが、TypeScriptエコシステムにおける現時点での最適解と言えます。

【要注意】導入時のよくある失敗パターン

Mastra導入で陥りやすい落とし穴を、具体的な対処法とともに紹介します。

失敗1:全てをエージェントで解決しようとする

NG:定型処理(CSV変換、バリデーション等)までエージェントに任せる
→ LLM呼び出しのコスト・レイテンシーが無駄に発生し、出力の再現性も低下します。

OK:決定的な処理はワークフローのステップとして実装し、判断が必要な部分のみエージェントを使う
.then(deterministic_step).then(agent_step) のように混在させるのがベストプラクティスです。

失敗2:Zodスキーマの定義を省略する

NGinputSchema / outputSchemaz.any() で済ませる
→ 型安全性が失われ、ワークフロー間のデータ受け渡しで実行時エラーが発生します。

OK:全てのステップとツールに明確なスキーマを定義する
→ TypeScriptの恩恵(オートコンプリート、コンパイル時エラー検出)を最大限に活用できます。

失敗3:開発環境でStudioを活用しない

NGconsole.log でデバッグし、エージェントの挙動を手動で確認する
→ ツール呼び出しの連鎖やワークフローの分岐が見えず、問題の特定に時間がかかります。

OKnpx mastra dev でStudioを起動し、トレース・評価結果をGUIで確認する
→ エージェントの思考過程、ツール呼び出し順序、各ステップの入出力が可視化されます。

失敗4:MCPの活用を見落とす

NG:外部ツール連携を全て自前でAPI実装する
→ 車輪の再発明になり、既存のMCPサーバーエコシステムの恩恵を受けられません。

OKMCPClient で既存のMCPサーバーに接続し、MCPServer で自作ツールを公開する
→ Slack、GitHub、データベースなど、コミュニティが公開するMCPサーバーをそのまま活用できます。

まとめ:今日から始める3つのアクション

Mastraは「TypeScript開発者のためのAIエージェントフレームワーク」という明確なポジションを確立しています。Gatsby開発チームの経験に裏打ちされた開発者体験、Vercel AI SDKとの相互補完、MCP対応による拡張性——これらが組み合わさり、2026年のTypeScript AIエージェント開発において最有力の選択肢となっています。

Step 1:5分でサンプルを動かす

npx create-mastra@latest を実行し、生成されるWeatherエージェントをStudioで動かしてみましょう。LLMのAPIキーさえあれば、5分で最初のエージェントが動作します。

Step 2:自社ユースケースでツールを1つ作る

createTool() で自社のAPIやデータベースに接続するツールを1つ作成してください。Zodスキーマで入出力を定義する作法を身につけることが、Mastra活用の第一歩です。

Step 3:ワークフローで処理を自動化する

エージェント単体で終わらせず、createWorkflow() でマルチステップの処理パイプラインを構築しましょう。決定的処理とAI処理を組み合わせることで、実用的な自動化システムが完成します。

AIエージェント開発の最新トレンドやハンズオンチュートリアルをお届けしています。
最新情報を見逃したくない方は、AIツールラボをブックマークしてぜひ定期的にチェックしてください。

あわせて読みたい

参考・出典

あわせて読みたい
CrewAI vs LangGraph vs AutoGen徹底比較OpenAI Agents SDK実践ガイドClaude Agent SDK実装ガイド

あわせて読みたい:

著者プロフィール

佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。X(@SuguruKun_ai)フォロワー約10万人。
100社以上の企業向けAI研修・導入支援。著書『AIエージェント仕事術』(SBクリエイティブ)。

Need help moving from reading to rollout?

この記事を読んで導入イメージが固まってきた方へ

Uravationでは、AIエージェントの要件整理、PoC設計、社内導入、研修まで一気通貫で支援しています。

この記事をシェア

X Facebook LINE

※ 本記事の情報は2026年3月時点のものです。サービスの料金・仕様は変更される可能性があります。最新情報は各サービスの公式サイトをご確認ください。

関連記事