サクッとできる「自分専用AIエージェント」 — Mastra実践ガイド

AIエージェントを作りたい!
昨今、 仕事でもプライベートでもなくてはならないものになりつつある生成AIやAIエージェント。
ChatGPTやClaudeのようにブラウザで気軽に使えるものから、GitHub CopilotやCursorのように開発環境に統合されているものまで様々なものが存在しています。
上手にプロンプトを組んでそれらを活用すれば、もっと自分用にカスタマイズしたいなと思うこともありますし、ちゃんと制御したいなと思うこともあると思います。
そんな時にMastra
Mastra(https://mastra.ai)はTypeScriptで構築できるAIエージェントフレームワークで、AIエージェント、ワークフロー、MCPサーバーなど様々な機能を構築できる多機能なフレームワークです。
多機能さも含め、推しポイントはいくつもありますがなんと言ってもありがたいのがサポート。
ドキュメントは日本語対応していますし、構築に便利な公式のMCPサーバーも存在しています。
これを活用すれば、簡単にAIを組み込んだツールを作成できるというわけです。
ただ今回は、バイブコーディングだとブレが出るのと、使わなくても意外と簡単じゃん!と思ってもらえるように、公式のMCPサーバーを使用せずにハンズオン的な感じで構築をしていきます。
順を追って解説していくので、安心して始めてください!
早速MastraでAIエージェントを作ってみよう
今回実装するのはライティングを行うAIエージェント
最終的に実装したいのはライティングを行うAIエージェントとワークフロー。
ですが、さすがに大ボリュームな記事になってしまうので今回はAIエージェントとMCPサーバーの構築までを行います。
ざっくりとステップは以下の2つ。
これらを通して、AIエージェントの構築の概観は掴んでもらえるかなと思います。
- 環境構築
- AIエージェントの構築
では、早速構築していきましょう!
STEP1:環境構築
公式ドキュメントのインストールのページ(https://mastra.ai/ja/docs/getting-started/installation)にある以下のコマンドを実行します(パッケージマネージャーはお好みで)。
プロジェクト作成
pnpm create mastra@latestコマンドを実行すると色々聞かれるので設定していきます。
自分は以下を設定しました。
- What dou you want to name your project(プロジェクト名):mastra-app
- Where should we create the Mastra files(ソースを置く場所):デフォルト
- Select default provider(LLMは何を使うか):Google(今回はGeminiを使用します)
- Enter your google API key?(APIキーの入力):後から設定
- Make your AI IDE into a Mastra expert?(使用するエディタ):VSCode
後からでも設定できますが、使用するエディタの設定は先にしておくことをおすすめします!

ここまで終わると次のようなファイルたちが作成されます。
├── node_modules/
├── package.json
├── pnpm-lock.yaml
├── .env
├── src
│ └── mastra
│ ├── agents
│ │ └── weather-agent.ts
│ ├── index.ts
│ ├── tools
│ │ └── weather-tool.ts
│ └── workflows
│ └── weather-workflow.ts
└── tsconfig.jsonGeminiのAPIキーを設定する
APIキーは以下の手順で取得可能です!
- Google Cloud Console(https://console.cloud.google.com/)にアクセスし、新しいプロジェクトを作成
- Google AI Studio(https://aistudio.google.com/app/apikey)にアクセスして、「APIキーを作成」ボタンをクリックして作成したプロジェクトに紐づける
APIキーの取得が完了したら、作成したMastraのプロジェクトに戻り.envの「your-api-key」を書き換えます。
GOOGLE_GENERATIVE_AI_API_KEY=your-api-key使用するモデルの調整
作成されたweather-anget.tsを開き、モデルを書き換えます。
(記事作成時点では初期設定されている「gemini-2.5-pro-exp-03-25」は使用できませんでした)
import { google } from '@ai-sdk/google';
import { Agent } from '@mastra/core/agent';
import { Memory } from '@mastra/memory';
import { LibSQLStore } from '@mastra/libsql';
import { weatherTool } from '../tools/weather-tool';
export const weatherAgent = new Agent({
name: 'Weather Agent',
instructions: `
You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
Your primary function is to help users get weather details for specific locations. When responding:
- Always ask for a location if none is provided
- If the location name isn't in English, please translate it
- If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
- Include relevant details like humidity, wind conditions, and precipitation
- Keep responses concise but informative
- If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
- If the user asks for activities, respond in the format they request.
Use the weatherTool to fetch current weather data.
`,
// ↓↓↓ 変更箇所 ↓↓↓
model: google("gemini-2.5-pro"),
// ↑↑↑ 変更箇所 ↑↑↑
tools: { weatherTool },
memory: new Memory({
storage: new LibSQLStore({
url: 'file:../mastra.db', // path is relative to the .mastra/output directory
}),
}),
});
「google()」の中にクォーテーション(”” または ”)を入力すると使用できるモデルの候補が表示されるので好きなものを使用してください。

記事作成時点では以下のようなモデルが使用できるようでした。
type GoogleGenerativeAIModelId = 'gemini-1.5-flash' | 'gemini-1.5-flash-latest' | 'gemini-1.5-flash-001' | 'gemini-1.5-flash-002' | 'gemini-1.5-flash-8b' | 'gemini-1.5-flash-8b-latest' | 'gemini-1.5-flash-8b-001' | 'gemini-1.5-pro' | 'gemini-1.5-pro-latest' | 'gemini-1.5-pro-001' | 'gemini-1.5-pro-002' | 'gemini-2.0-flash' | 'gemini-2.0-flash-001' | 'gemini-2.0-flash-live-001' | 'gemini-2.0-flash-lite' | 'gemini-2.0-pro-exp-02-05' | 'gemini-2.0-flash-thinking-exp-01-21' | 'gemini-2.0-flash-exp' | 'gemini-2.5-pro' | 'gemini-2.5-flash' | 'gemini-2.5-pro-exp-03-25' | 'gemini-2.5-pro-preview-05-06' | 'gemini-2.5-flash-preview-04-17' | 'gemini-exp-1206' | 'gemma-3-27b-it' | 'learnlm-1.5-pro-experimental' | (string & {});ここまでできたらSTEP1の環境構築は完了です!
STEP2:AIエージェントの構築
次に、エージェントの構築をしていきます。
早速ライティング用のAIエージェントの構築を試してみたいところですが、まずはAPIキーの設定とモデルの設定が正常であることを確認するために既存のAIエージェントを動かしてみましょう!
Mastraのプレイグラウンドを起動してみる
では、開発コマンドを使用してMastraのプレイグラウンドを表示してみましょう!(コマンドはパッケージマネージャーにより異なります)
pnpm run devINFO [2025-07-31 17:12:07.787 +0900] (Mastra CLI): Starting watcher...
INFO [2025-07-31 17:12:08.146 +0900] (Mastra CLI): Bundling finished, starting server...
INFO [2025-07-31 17:12:08.170 +0900] (Mastra CLI): [Mastra Dev] - Starting server...
INFO [2025-07-31 17:12:08.745 +0900] (Mastra): Mastra API running on port http://localhost:4111/api
INFO [2025-07-31 17:12:08.747 +0900] (Mastra): 👨💻 Playground available at http://localhost:4111http://localhost:4111にアクセスすると次のような画面が表示されます。

では、次に「Weather Agent」を選択して一旦チャットしてみましょう!

weatherTool(今回は触れないMCPサーバーのツール)を使用して札幌の天気を返してくれました!👏
APIキーの設定とモデルの設定が正常なことが確認できたので、いよいよAIエージェントの設定をしていきます。
ライティング用のAIエージェントの設定
編集するのはまず、先ほどと同じweather-agent.tsです。まずはファイル名をwriting-aegent.tsに変更し中身を次のように書き換えます!
import { google } from '@ai-sdk/google';
import { Agent } from '@mastra/core/agent';
export const weatherAgent = new Agent({
name: 'Writing Agent',
instructions: `
# ライティングエージェント
あなたは専門的なライティングエージェントです。様々な形式の文章作成、編集、改善を行い、ユーザーの要求に応じて高品質なコンテンツを提供します。
## 主要な機能
### 文章作成
- ブログ記事、技術文書
### 文章編集・改善
- 文法・表現の修正
- 読みやすさの向上
- 論理構成の最適化
- トーンの調整
- 文字数の調整
## 品質基準
### 文章の質
- 明確で簡潔な表現を心がける
- 論理的な構成で情報を整理する
- 適切な語彙を選択する
- 読み手を意識した文体を使用する
- 誤字脱字のない正確性を保つ
### コンテンツの質
- 目的に応じた内容を提供する
- 信頼性のある情報を基にする
- 独創性のある視点を含める
- 価値のある情報を提供する
- 読み手のニーズに対応する
## 作業プロセス
1. **要件確認**: 文章の目的、ターゲット読者、文字数、トーン、締切を確認
2. **構成設計**: アウトライン作成、論理的な流れの設計
3. **執筆・編集**: 初稿作成、内容精査、表現改善
## 対応言語・文体
### 日本語対応
- 敬語(丁寧語・尊敬語・謙譲語)の適切な使用
- ビジネス文書からカジュアル文体まで対応
- 専門用語の適切な使用
### 文体バリエーション
- フォーマル、カジュアル、親しみやすい
- 専門的、説得力のある文体
## 特別な配慮事項
- 著作権の尊重と事実確認の重要性
- プライバシー保護と倫理的配慮
- 読み手の立場に立った文章作成
- アクセシビリティへの配慮
## 応答スタイル
- ユーザーの要求を正確に理解し、適切な文章を提供する
- 必要に応じて追加情報を求める
- 改善提案を積極的に行う
- 常に高品質なライティングサービスを提供する
このインストラクションに基づいて、常に高品質なライティングサービスを提供し、ユーザーの目的達成をサポートします。
`,
model: google("gemini-2.5-pro")
});
変更点は以下の通り
- instrunctions: AIエージェントの動作に関わる基底ルールとなります。今回は簡易的にClaudeに出してもらった設定を入れました。
- tools、memory:文章だけを一度出してもらえれば良いということで削除しています。
次にAIエージェントなどを呼び出しているindex.tsを編集します。
import { Mastra } from '@mastra/core/mastra';
import { PinoLogger } from '@mastra/loggers';
import { LibSQLStore } from '@mastra/libsql';
import { weatherWorkflow } from './workflows/weather-workflow';
import { writingAgent } from './agents/writing-agent';
export const mastra = new Mastra({
workflows: { weatherWorkflow },
agents: { writingAgent },
storage: new LibSQLStore({
// stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
url: ":memory:",
}),
logger: new PinoLogger({
name: 'Mastra',
level: 'info',
}),
});
こちらもストレージやロガーの設定は不要なのですが、今回作成したライティング用のAIエージェントの動作には関わらないので一旦そのままにしています。
簡易的ではありますが、これで設定は完了したのでプレイグラウンドで試してみましょう!

指示通りに「夏休みの過ごし方」に関してのブログ記事を書いてくれました!
今回はここまで!
簡単ではありましたが、MastraのAIエージェント構築の概観を知ってもらうことはできたでしょうか?
今回は執筆タスクのみなので、ChatGPTやClaudeでも実行できる内容ですがMCPサーバーやワークフローを組み合わせるとMastraで構築する価値が出てきます。
次回のMastraの記事ではMCPサーバーの設定やワークフローの構築を解説できればと思います!






















