Backlot について
Backlotは、企業向けSaaS APIをローカルで再現するエミュレーターです。統合の開発・テスト向けに、決定性のあるコーパスからベンダー形式の応答とアクセス制御を提供し、ベンダーアカウントやネットワークなしで公式SDKを実行できます。
主な機能
- 01複数の企業向けAPIをローカルで再現
- 02公式ベンダーSDKとHTTPクライアントに対応
- 03決定性SQLiteコーパスとJSONLインポート
- 04ユーザー、トークン、グループ、文書ACLをモデル化
- 05ページネーション、認証、エラーを再現
- 06データソースをMCPツールとして公開
活用シーン
- 01ベンダーアカウントや認証情報なしで統合をテスト
- 02ローカルとCIで再現可能な統合テストを実行
- 03RAGパイプラインとエージェントの動作を評価
- 04制御された文書データで不具合を再現
MCP 対応
`backlot mcp`は標準入出力経由でMCPサーバーを起動し、すべてのデータソースをツールとして公開します。コーディングエージェントはこれらのツールでBacklotが提供するデータを作成・確認できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
151掲載時のツール一覧 · 5 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| q | string | いいえ | Issue/PR の検索クエリ |
| page | any | いいえ | 取得する結果のページ番号です。詳細については、「[REST API でのページネーションの使用](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)」をご覧ください。 |
| per_page | any | いいえ | 1 ページあたりの結果数(最大 100 件)です。詳細については、「[REST API でのページネーションの使用](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)」をご覧ください。 |
詳細
Backlot
エンタープライズ SaaS API をローカルで実行できます。
Backlot は、Slack、Gmail、Google Drive、GitHub、Jira、Notion、S3 などのエンタープライズ API のローカルエミュレーターです。制御可能な決定論的コーパスを使って、連携に必要なレスポンス形式、ページネーション、認証、エラー、ドキュメントごとのアクセス制御を再現します。そのため、ベンダーアカウントも、OAuth の承認も、CI でのシークレット管理も、ネットワーク接続も不要で、公式ベンダー SDK を使って構築やテストができます。

60秒で試す
pip install backlot
backlot import --bundled # a corpus ships with the package; nothing to fetch or write
backlot serve # every supported API, at http://127.0.0.1:8000
ベース URL を1か所変更して、公式 SDK の接続先を切り替えます。
from slack_sdk import WebClient # pip install slack_sdk
slack = WebClient(token="admin-service-token", base_url="http://127.0.0.1:8000/slack/api/")
print(slack.conversations_list()["channels"])
同じ呼び出しで、本番環境では Slack を、開発環境では Backlot を対象にできます。Backlot がデータと認証情報を提供し、コードではベンダーのリクエストとレスポンスの契約をそのまま維持できます。
テストごとに専用サーバーを空いているポートで起動することもできます。起動や後片付けは不要です。
import backlot
from slack_sdk import WebClient
with backlot.serve() as s: # no arguments: a tiny hello-world corpus
slack = WebClient(token=s.token, base_url=f"{s.base_url}/slack/api/")
channels = slack.conversations_list()["channels"]
コーディングエージェントですぐに Backlot を実行
このリポジトリ自体がプラグインマーケットプレイスなので、エージェントスキルはリポジトリのクローンや事前の pip install なしでインストールできます。または、すべてのソースを MCP ツールとしてエージェントに渡せます。backlot mcp はサーバーが稼働していない場合に起動し、すべてのソースを stdio 経由で提供します。--user <email> を指定すると、そのユーザーとして応答します。
claude plugin marketplace add brekkylab/backlot && claude plugin install backlot@brekkylab
codex plugin marketplace add brekkylab/backlot && codex plugin add backlot@brekkylab
pip install "backlot[mcp]" && claude mcp add backlot -- backlot mcp # every source as MCP tools
次のようにプロンプトを入力します。
Slack ワークスペースに #incidents チャンネルを作ってメッセージを3件追加し、サーバーを起動してから、そのチャンネルに対する
conversations.historyの実際の戻り値を表示してください。
なぜモックを使わないのですか?
手書きのモックは、コードがすでに期待しているレスポンスを返します。Backlot は連携の相手側を実装するため、モックがそのまま再現してしまう前提を明らかにします。テストしたいのが単一のレスポンスの内容だけではなく、API の振る舞いである場合に役立ちます。
| ❌ 手書きのモック | ✅ Backlot |
|---|---|
| テスト固有のレスポンス辞書 | HTTP 経由で提供するベンダー形式のレスポンス |
| 通常は正常系のみをカバー | ページネーション、検証、認証、ベンダー形式のエラー |
| 独自のテストヘルパー | 公式ベンダー SDK と一般的な HTTP クライアント |
| ID モデルがほとんどない、または存在しない | 生成されたユーザー、トークン、グループ、ドキュメント ACL |
| テスト間でフィクスチャに差異が生じる | ローカルと CI で共有する単一の決定論的コーパス |
| API ごとに異なる方法でモック化 | すべての API を1つのプロセスから提供 |
提供する内容
すべてのソースを1つのローカルポートで提供します。それぞれのSDKが想定するパスプレフィックスを付け、すべてが1つのSQLiteコーパスを読み込みます。
コーパスが事実を定義します。メッセージ、ファイル、課題、作成者、タイムスタンプ、スレッド、コメント、ラベル、閲覧者です。Backlotはそこから安定したID、ユーザー、グループ、トークンを導出するため、実行するたびに同じレコード、同じACLでフィルタリングされたビュー、同じページが提供されます。
各APIについて、サポートするのはドキュメント化されたサブセットのエミュレーションであり、すべてのベンダーエンドポイントではありません。エンドポイントごとの対応表に対応状況が記載されています。実装済みのエンドポイントが実際のAPIと異なる動作をする場合は、バグです。

| サービス | ベースパス | 公式SDKを使った例 |
|---|---|---|
| Slack | /slack/api | slack.py |
| Microsoft Teams | /msgraph/v1.0 | msteams.py |
| Gmail | /gmail/v1 | gmail.py |
| Google Drive(Docs、Sheets、Slides) | /drive/v3 /docs/v1 /sheets/v4 /slides/v1 | gdrive.py |
| GitHub | /github | github.py |
| Jira | /atlassian/rest/api | jira.py |
| Confluence | /atlassian/wiki/rest/api | confluence.py |
| Notion | /notion/v1 | notion.py |
| Linear | /linear/graphql | linear/ |
| HubSpot | /hubspot | hubspot.py |
| Fireflies | /fireflies/graphql | fireflies.py |
| Amazon S3 | /s3 | s3.py |
ロードマップは追跡用イシューにあります。必要なソースがあれば、そちらでお知らせください。
こんなときに必要です
- 🔌 インテグレーションの構築やアップグレード。実際のAPIが返すカーソル、ページ形式、エラー本文を、アカウントなしで取得できます。
- 🧪 テストと、そのテストの継続的な維持。秘密情報が不要で、不安定な動作もないため、ノートPCとCIで同じフィクスチャを使えます。コーパス内のすべてのユーザーにトークンが発行されるので、ある呼び出し元のドキュメントが別の呼び出し元に届かないことも検証できます。
- 🤖 RAGパイプラインやエージェントの評価。毎回、同じコーパス、同じID、同じ回答を使えるため、スコアの変化はコードの変化を意味します。Slackは書き込みにも対応しているので、投稿、編集、リアクションを行うエージェントをここで実行し、実際の動作を評価できます。1つのエンドポイントで動作を報告し、別のエンドポイントで次回の実行に向けてコーパスを元に戻します(docs/write-overlay.md)。
- 🐛 見られないデータで発生するバグの再現。他のユーザーのワークスペースにあるドキュメントがパーサーの不具合を引き起こす場合、その形式に合わせたドキュメントを作成して提供し、失敗するテストとして保持できます。
独自のコーパスを用意する
同梱のコーパスはサポート対象のすべてのサービスを網羅していますが、主な使い方は、独自のテスト環境を提供することです。JSONLファイルに、ソースドキュメントを1行ずつ記述します。
{"source_type":"slack","channel":"incidents","author_email":"[email protected]","created":"2026-02-10T18:00:00Z","content":"Anyone seeing 502s from the gateway?","replies":[{"content":"Looking now.","author_email":"[email protected]","created":"2026-02-10T18:00:40Z"}]}
backlot import my-corpus.jsonl --dry-run # validate against each service's schema, touch nothing
backlot import my-corpus.jsonl && backlot serve
インポートされたすべてのIDには決定論的な認証情報が割り当てられ、GET /_meta/usersに一覧表示されます。別のユーザーのトークンで同じリクエストを送信し、その呼び出し元に表示が許可されている内容をテストできます。コーパスの準備ではスキーマ、ユーザー一覧、シャーディングされたコーパス、公開データセットを説明し、認証とトークンでは各サービスの認証方式を説明しています。
例
| 対象 | 実行可能な例 |
|---|---|
| 📦 サービスごとに1つのスクリプトで利用する、公式ベンダー SDK | examples/using-official-sdk/ |
🔗 エージェント向けの MCP ツール:backlot mcp、または Backlot を参照するベンダー独自の MCP サーバー | examples/using-mcp-with-agents/ |
| 🦙 公式の LlamaIndex リーダーを使って、ドキュメントとして読み込む | examples/using-llamaindex-readers/ |
🐍 fsspec ファイルシステムを通じて、pandas、pyarrow、または dask で読み込む | examples/using-fsspec/ |
🗂️ mirage の仮想ファイルシステムを通じて、ls、cat、grep で読み込む | examples/using-mirage/ |
| 📥 JSONL ファイルから独自のコーパスを読み込む | examples/bring-your-own-corpus/ |
ドキュメント
| Backlot が提供するすべてのソースと、それぞれのすべてのエンドポイント | docs/supported-sources.md |
| コーパスの構築とパブリックデータセット | docs/corpus.md |
| 認証方式とトークン | docs/auth.md |
| 実際の API に対する Backlot の忠実度の測定 | docs/fidelity.md |
| 書き込みと、その書き込み先 | docs/write-overlay.md |
すべての BACKLOT_* 設定と Docker | docs/configuration.md |
| 利用状況のテレメトリー:収集する理由、送信される内容、無効にする方法 | docs/telemetry.md |
| 通知と商標 | NOTICE.md |
コントリビューション
CONTRIBUTING.md をご覧ください。実際の API への忠実度が重要です。そのため、実際のサービスと異なる点はバグです。実際のサービスと照らし合わせて測定し、修正がなければ失敗するテストを追加してください。
Backlot は、コントリビューションしてくださる皆さんのおかげで成り立っています。
ライセンス
Apache-2.0。以前のリリースに適用されていた MIT License については、NOTICE.md をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。