メインコンテンツへ移動

FilesSDKFilesystem

FilesSDK が対応する任意のストレージバックエンドにファイルを保存します。FilesSDK は S3、Cloudflare R2、Google Cloud Storage、Azure Blob、Vercel Blob、MinIO、ローカル Filesystem などを統一的に抽象化します。インターフェースの詳細は、WorkspaceFilesystem インターフェースを参照してください。

同じコードで複数のストレージバックエンドを扱う単一のアダプターが必要な場合は、FilesSDKFilesystem を使用します。Workspace の設定を変えずに、基盤となるドライバーを切り替えられます。対象が1つのバックエンドのみで、そのバックエンド専用のオプションが必要な場合は、専用 Provider(S3FilesystemGCSFilesystem など)を推奨します。

インストール
インストールへの直接リンク

npm install @mastra/files-sdk files-sdk

files-sdk は peer dependency であり、使用するアダプターとともに設定します。

使用方法
使用方法への直接リンク

任意のアダプターを指定して FilesSDK の Files インスタンスを作成し、FilesSDKFilesystem へ渡します。

import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { FilesSDKFilesystem } from '@mastra/files-sdk'
import { Files } from 'files-sdk'
import { s3 } from 'files-sdk/s3'

const files = new Files({
adapter: s3({
bucket: 'my-bucket',
region: 'us-east-1',
}),
})

const workspace = new Workspace({
filesystem: new FilesSDKFilesystem({ files }),
})

const agent = new Agent({
id: 'file-agent',
name: 'file-agent',
model: 'anthropic/claude-opus-4-7',
workspace,
})

アダプターを切り替える
アダプターを切り替えるへの直接リンク

同じ FilesSDKFilesystem を任意の FilesSDK アダプターで使用できます。バックエンドを切り替えるには、ドライバーファクトリーを置き換えます。

import { Files } from 'files-sdk'
import { r2 } from 'files-sdk/r2'
import { gcs } from 'files-sdk/gcs'
import { azure } from 'files-sdk/azure'
import { fs } from 'files-sdk/fs'

// Cloudflare R2
const r2Files = new Files({ adapter: r2({ accountId, bucket, accessKeyId, secretAccessKey }) })

// Google Cloud Storage
const gcsFiles = new Files({ adapter: gcs({ bucket, projectId }) })

// Azure Blob
const azureFiles = new Files({ adapter: azure({ container, connectionString }) })

// Local filesystem (useful for tests and development)
const localFiles = new Files({ adapter: fs({ root: './workspace' }) })

アダプターの完全なカタログと設定オプションは、FilesSDK ドキュメントを参照してください。

読み取り専用マウント
読み取り専用マウントへの直接リンク

const filesystem = new FilesSDKFilesystem({
files,
readOnly: true,
})

すべての書き込み操作(writeFileappendFiledeleteFilecopyFilemoveFilemkdirrmdir)は WorkspaceReadOnlyError をスローし、読み取り操作は成功します。

コンストラクターパラメーター
コンストラクターパラメーターへの直接リンク

files:

Files
使用するアダプターと認証情報に紐付けて事前設定した FilesSDK の Files インスタンス。

id?:

string
= Auto-generated
この Filesystem インスタンスの一意な識別子。

displayName?:

string
UI に表示するわかりやすい名前。

icon?:

FilesystemIcon
UI に表示するアイコンの識別子。

description?:

string
UI に表示する Filesystem の短い説明。

readOnly?:

boolean
= false
true の場合、すべての書き込み操作を禁止します。

プロパティ
プロパティへの直接リンク

id:

string
Filesystem インスタンスの識別子。

name:

string
Provider 名('FilesSDKFilesystem')。

provider:

string
Provider 識別子('files-sdk')。

readOnly:

boolean | undefined
Filesystem が読み取り専用モードかどうか。

メソッド
メソッドへの直接リンク

FilesSDKFilesystemWorkspaceFilesystem インターフェースを実装し、標準の Filesystem メソッドをすべて提供します。

  • readFile(path, options?) - ファイルの内容を読み取ります
  • writeFile(path, content, options?) - ファイルに内容を書き込みます
  • appendFile(path, content) - ファイルに内容を追記します
  • deleteFile(path, options?) - ファイルを削除します
  • copyFile(src, dest, options?) - ファイルをコピーします
  • moveFile(src, dest, options?) - ファイルを移動または名前変更します
  • mkdir(path, options?) - ディレクトリを作成(オブジェクトストアでは何もしません)
  • rmdir(path, options?) - ディレクトリを削除します
  • readdir(path, options?) - ディレクトリの内容を一覧表示します
  • exists(path) - パスが存在するか確認します
  • stat(path) - ファイルまたはディレクトリのメタデータを取得します

init()
initへの直接リンク

Filesystem を初期化します。指定された認証情報で、設定済みアダプターがキーを一覧表示できることを確認します。

await filesystem.init()

getInfo()
getinfoへの直接リンク

この Filesystem インスタンスのメタデータを返します。

const info = filesystem.getInfo()
// { id: '...', name: 'FilesSDKFilesystem', provider: 'files-sdk', status: 'ready' }

files
filesへの直接リンク

アダプター固有の API を直接呼び出せるよう、基盤となる FilesSDK の Files インスタンスが public プロパティとして公開されます。

const url = await filesystem.files.url('reports/q3.pdf')

オブジェクトストアのセマンティクス
オブジェクトストアのセマンティクスへの直接リンク

FilesSDKFilesystem は、基盤となるアダプターが階層型(fs など)でも、設定されたバックエンドをオブジェクトストアとして扱います。これにより、アダプター間で動作が統一されます。

  • mkdir は何もしません。その接頭辞を持つキーが存在すると、ディレクトリも暗黙的に存在します。
  • existstrue を返すのは、完全一致するキーがファイルとして存在する場合、またはパスが1つ以上の子キーを含む接頭辞である場合だけです。階層型アダプターに残った空のディレクトリは対象外です。
  • deleteFile は、{ force: true } を渡さない限り、キーが存在しない場合に FileNotFoundError をスローします。
  • ディレクトリに対する deleteFile は、S3Filesystem および GCSFilesystem と同様に、rmdir({ recursive: true }) へ処理を委譲します。
  • moveFilecopyFile の後に deleteFile を実行する形で実装されており、アトミックではありません。コピーの成功後にコピー元の削除が失敗すると、コピー先は残り、コピー元も削除されません。
  • appendFile は読み取り、変更、書き込みを行う操作です。同じキーへの同時追記は互いに上書きする可能性があります。これはオブジェクトストレージ固有の性質であり、FilesSDK に限ったものではありません。
  • readdir({ recursive: true }) は中間ディレクトリのエントリも返します(たとえば、a/b/c.txt とともに a/b も返します)。