MastraStorage
MastraStorage
は、次の管理に共通のインターフェースを提供します:
- Suspended Workflows: 一時停止中のワークフローのシリアライズ済み状態(後で再開できるように)
- Memory: アプリケーション内の
resourceId
ごとのスレッドとメッセージ - Traces: Mastra のすべてのコンポーネントからの OpenTelemetry トレース
- Eval Datasets: 評価実行におけるスコアとその理由

Mastra には複数のストレージプロバイダがあり、相互に置き換えて利用できます。たとえば、開発では libsql、本番では postgres を使っても、どちらの場合でもコードは同じように動作します。
設定
Mastra はデフォルトのストレージオプションで構成できます:
import { Mastra } from "@mastra/core/mastra";
import { LibSQLStore } from "@mastra/libsql";
const mastra = new Mastra({
storage: new LibSQLStore({
url: "file:./mastra.db",
}),
});
storage
を指定しない場合、Mastra はアプリケーションの再起動やデプロイをまたいでデータを保持しません。ローカルでのテストを超えるあらゆるデプロイでは、Mastra
で、または new Memory()
内で直接、独自のストレージ設定を用意してください。
データスキーマ
Messages
会話メッセージとそのメタデータを格納します。各メッセージはスレッドに属し、送信者のロールやメッセージ種別に関するメタデータとともに実際の内容を含みます。
id
uuidv4
PRIMARYKEY
NOT NULL
メッセージの一意の識別子(形式:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
)thread_id
uuidv4
FK → threads.id
NOT NULL
親スレッドへの参照
resourceId
uuidv4
CAN BE NULL
このメッセージの所有元リソースのID
content
text
NOT NULL
V2形式のメッセージ内容のJSON。例:
{ format: 2, parts: [...] }
role
text
NOT NULL
user | assistant
の列挙型createdAt
timestamp
NOT NULL
スレッド内のメッセージの並び替えに使用
メッセージの content
列には、MastraMessageContentV2
型に準拠したJSONオブジェクトが格納されます。これは AI SDK の UIMessage
のメッセージ構造に近づけて設計されています。
format
integer
NOT NULL
メッセージフォーマットのバージョン(現在は 2)
parts
array (JSON)
NOT NULL
メッセージパーツの配列(text、tool-invocation、file、reasoning など)。この配列内の各項目の構造は
type
によって異なります。experimental_attachments
array (JSON)
CAN BE NULL
任意のファイル添付の配列
content
text
CAN BE NULL
メッセージのメインのテキスト内容(任意)
toolInvocations
array (JSON)
CAN BE NULL
ツール呼び出しと結果の要約(任意)の配列
reasoning
object (JSON)
CAN BE NULL
アシスタントの応答の背後にある推論プロセスに関する情報(任意)
annotations
object (JSON)
CAN BE NULL
追加のメタデータまたは注釈(任意)
メッセージの照会
メッセージは内部的に V2 形式で保存されており、概ね AI SDK の UIMessage
形式に相当します。getMessages
でメッセージを取得する際は、出力形式を指定でき、後方互換性のためデフォルトは v1
です。
// デフォルトの V1 形式でメッセージを取得(概ね AI SDK の CoreMessage 形式に相当)
const messagesV1 = await mastra.getStorage().getMessages({ threadId: 'your-thread-id' });
// V2 形式でメッセージを取得(概ね AI SDK の UIMessage 形式に相当)
const messagesV2 = await mastra.getStorage().getMessages({ threadId: 'your-thread-id', format: 'v2' });
メッセージ ID の配列を使ってメッセージを取得することも可能です。getMessages
と異なり、こちらはデフォルトで V2 形式になります。
const messagesV1 = await mastra.getStorage().getMessagesById({ messageIds: messageIdArr, format: 'v1' });
const messagesV2 = await mastra.getStorage().getMessagesById({ messageIds: messageIdArr });
ストレージプロバイダー
Mastra は次のプロバイダーをサポートしています:
- ローカル開発には LibSQL Storage をご覧ください
- 本番環境には PostgreSQL Storage をご覧ください
- サーバーレス環境には Upstash Storage をご覧ください