mcpField
D
Dynoxide

Dynoxide

ローカル
dynoxide.devデータベース1025 日前に更新

Dynoxide について

Dynoxide は Rust で書かれ、SQLite をストレージとする DynamoDB エミュレーターです。HTTP サーバー、MCP サーバー、組み込みライブラリとして動作し、起動が速くメモリ使用量が少ないため、ローカル開発、テスト、CI を主な対象としています。

主な機能

  1. 01DynamoDB 互換の HTTP API サーバー
  2. 02Rust と iOS アプリに組み込めるライブラリモード
  3. 03MCP 経由で公開される 35 の DynamoDB ツール
  4. 04SQLite ストレージと WebAssembly ビルド
  5. 05GSI、LSI、トランザクション、PartiQL、Streams への対応

活用シーン

  1. 01統合テスト用の高速起動する DynamoDB 代替環境
  2. 02Rust のテストケースごとに分離したインメモリデータベース
  3. 03コーディングエージェントによるローカル DynamoDB の操作

MCP 対応

Dynoxide の MCP サーバーは 35 の DynamoDB ツールを MCP クライアントに公開し、コーディングエージェントがローカルデータベースを直接読み書きできるようにします。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"nubo-db-dynoxide": {
"command": "npx",
"args": [
"-y",
"dynoxide"
]
}
}
}
起動コマンドnpx -y dynoxide

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmdynoxide1.5.0
ocighcr.io/nubo-db/dynoxide:1.5.0

ツール

35

掲載時のツール一覧 · 5 日前に更新

パラメーター型必須説明
statementsanyはいPartiQL ステートメントの配列。各要素は {Statement: "...", Parameters?: [...], ConsistentRead?: true|false, ReturnValuesOnConditionCheckFailure?: "ALL_OLD"|"NONE"} です。ConsistentRead は要素ごとに設定し、その要素の読み取りに適用される課金レートを指定します。返される行には影響しません。ReturnValuesOnConditionCheckFailure が ALL_OLD の場合、条件に失敗した UPDATE または DELETE の対象項目が、その要素の Error に返されます。バッチ内の操作はすべて読み取り、またはすべて書き込みである必要があります。SELECT 要素ではテーブルの主キーを指定し、インデックスは指定できません。
return_consumed_capacityenumいいえ返す消費キャパシティ:TOTAL は操作全体の合計、INDEXES はテーブルとインデックス別の内訳、NONE(デフォルト)は返さないことを示します。数値は DynamoDB の課金ルールに従い、同じリクエストに対して DynamoDB API が返す値と一致します。INDEXES | TOTAL | NONE | null

詳細

Dynoxide

crates.io docs.rs CI conformance license

SQLite をバックエンドとする、Rust 製の DynamoDB エミュレーターです。HTTP サーバーまたはコーディングエージェント向けの MCP サーバーとして実行でき、Rust および iOS アプリケーションにライブラリとして組み込めます。また、ブラウザー向けに WebAssembly にコンパイルできます。

上の crates.io バッジに表示されるのは、Rust ライブラリのみを対象とする クレート のバージョンです。依存関係としてではなくインストールするものはすべて、バイナリ、npm パッケージ、コンテナーイメージ、ブラウザーエンジン、Action を含め、別の 製品 バージョンを持ちます。これは dynoxide --version が出力する番号であり、バグ報告に記載する番号です。2つのバージョンがある理由。

Dynoxide を選ぶ理由

Dynoxide を開発したのは、DynamoDB Local が遅く、重く、組み込みに対応していないためです。JVM が必要で、一般的な Docker ベースの構成では、有用な作業を始める前にコールドスタートに約3秒、アイドル時のメモリに約209 MB、Docker イメージに約225MB(ディスク上では約473 MB)が追加で必要です。統合テストを実行する場合、Docker の起動、JVM のウォームアップ、そしてパイプラインの待ち時間が発生します。

Dynoxide はネイティブバイナリです。数ミリ秒で起動し、アイドル時のメモリ使用量は約7.2 MB、ダウンロードサイズは約3 MB です。任意の DynamoDB SDK を接続すれば、テストをそのまま実行できます。

Rust プロジェクト向けには、HTTP レイヤーを介さず Database::memory() で API を直接呼び出す組み込みモードもあります。各テストは、起動コストなしで独立したインメモリデータベースを使用します。また、ランタイム依存関係のないネイティブライブラリにコンパイルされるため、iOS を含め、DynamoDB Local が動作しないプラットフォームでも実行できます。

パフォーマンス
ローカル開発(Apple Silicon)
指標Dynoxide(組み込み)Dynoxide(HTTP)DynamoDB Local
コールドスタート約0.2ms約15ms約2,287ms
GetItem(p50)9µs0.1ms0.8ms
PutItem スループット約51,613 ops/s約6,703 ops/s約945 ops/s
50テストのスイート(逐次)約484ms約569ms約2,407ms
50テストのスイート(4並列)約203ms約235ms約1,189ms
CI(GitHub Actions)

ubuntu-latest(4コア AMD EPYC 7763、16GB RAM)での数値です。コミット 17be96a。

指標Dynoxide(組み込み)Dynoxide(HTTP)DynamoDB LocalLocalStack(全サービス)FlociMiniStack
コールドスタート<1ms約2ms約2,605ms約12,217ms約228ms約2,636ms
GetItem(p50)16µs0.3ms0.8ms---
50テストの CI スイート828ms859ms2,628ms---
全ワークロード(10K アイテム)-3.2s12.2s---
バイナリ/イメージ(ダウンロード)約3 MB約3 MB225 MB1.1 GB--
バイナリ/イメージ(ディスク上)8 MB8 MB473 MB1.1 GB234 MB162 MB
アイドル時メモリ(RSS)約7.2 MB約8 MB約209 MB約387 MB約23 MB約47 MB

Apple Silicon では、CPU が高速なため、ネイティブコードと JVM のオーバーヘッドの差が拡大し、差はさらに大きくなります。どちらも同じベンチマークスイートで実測した値です。測定方法の詳細と操作ごとの内訳 →

適合性

Dynoxide は、AWS 本体と主要なすべての DynamoDB エミュレーターに対して同じテストマトリックスを実行する、DynamoDB 適合性スイートである Parity Suite によって、実際の DynamoDB との適合性を継続的に検証されています。スイートの拡充や各エンジンの変更に伴って合格率も変わるため、古くなるスナップショットを固定するのではなく、最新の結果をご覧ください。

開示事項:Dynoxide と Parity Suite は同じ人物がメンテナンスしています。このスイートでは、他のすべてのエンジンと同じ公開マトリックスで Dynoxide を評価しており、結果とテストコードはオープンです。

これはネイティブビルドを対象としています。WebAssembly ビルドは独立した行として評価されます。実装済みのテストにはすべて合格していますが、いくつかの操作がまだ未実装のため、スキップ数は他のどのターゲットよりも大幅に多くなっています。

比較
DynoxideDynamoDB LocalLocalStack(全サービス)FlociMiniStackdynalite
言語RustJavaPython + JavaJava(GraalVM ネイティブイメージ)PythonNode.js
ストレージSQLiteSQLiteSQLite(DDB Local 経由)独自(インメモリ、永続化または WAL)独自(インメモリ、任意でディスク上に状態を保存)LevelDB
実行時の依存関係-JVMDocker + LocalStack アカウント(認証トークン)DockerDocker または PythonNode.js
組み込み可能(Rust / iOS)✓-----
エージェント向け MCP サーバー✓-----

LocalStack は内部で DynamoDB エンジンとして DynamoDB Local を使用するため、起動時とメモリのオーバーヘッドには、DynamoDB Local の JVM と LocalStack 独自の Python ルーティングレイヤーが含まれます。2026 年 3 月以降、以前は無料だったサービスも含め、起動には LocalStack アカウントと LOCALSTACK_AUTH_TOKEN が必要です。Floci と MiniStack は LocalStack と同様の汎用 AWS エミュレーターであり、それぞれ DynamoDB Local ではなく独自の DynamoDB エンジンを備えています。

クイックスタート

何もインストールせずにローカルサーバーを実行します。

npx dynoxide --port 8000

または、プロジェクトにインストールしてバージョンを固定できます。その後は npx dynoxide でそのコピーが使用されます。

npm install --save-dev dynoxide

または、amazon/dynamodb-local のドロップイン代替として Docker で実行します。

docker run --rm -p 8000:8000 ghcr.io/nubo-db/dynoxide

任意の AWS SDK または DynamoDB クライアントから http://localhost:8000 を指定してください。Homebrew、Cargo、ビルド済みバイナリ、Rust ライブラリとしての組み込みについては、インストールガイドをご覧ください。

--log quiet を追加すると、起動時とシャットダウン時の情報メッセージが stderr に出力されなくなります(テストスイートで便利です)。serve、mcp、 import --serve、または --mcp で使用でき、警告とエラーは引き続き出力されます。 --log を指定しない場合、出力は変わりません。

ドキュメント

サポートする操作

Dynoxide は、テーブル、項目、クエリとスキャン、バッチ、トランザクション、PartiQL、ストリーム、TTL、タグにわたる DynamoDB API を実装しています。GSI と LSI、すべての式構文、DynamoDB 互換のページネーション、検証、エラーコードもサポートしています。操作ごとの詳細と比較については、互換性の概要をご覧ください。

制限事項

Dynoxide はローカル開発、テスト、CI 向けに作られており、本番環境で DynamoDB を置き換えるものではありません。そのため、意図的に実装していない機能が 2 種類あります。

ローカルで同等の機能を利用できないクラウド専用の操作は実装されていません。バックアップとポイントインタイムリストア、グローバルテーブル、Kinesis ストリーミング、リソースポリシー、キャパシティ管理が該当します。これらを呼び出すと、UnknownOperationException が返されます。

テスト時に把握しておくとよい動作上の違いもいくつかあります。

  • ConsistentRead は受け付けられますが、動作に影響しません。SQLite は強い一貫性を持つため、読み取りはすべて最初から強い一貫性を持ちます。そのため、結果整合性のある読み取りは再現できません。
  • ストリームが公開するシャードは 1 つだけです。DescribeStream は 1 つのシャードを返し、ページネーション用の ExclusiveStartShardId および Limit パラメーターは受け付けられますが、無視されます。
  • トランザクションの競合エラー(TransactionConflictException、TransactionInProgressException)はエミュレートされません。単一プロセス内では同時競合が発生しないためです。

機能ごとの対応状況については、最新の機能対応表をご覧ください。操作ごとの詳細は、互換性の概要に記載されています。

謝辞

Dynoxide の DynamoDB API のセマンティクスと検証ロジックは、Michael Hart が LevelDB を基盤に構築し、現在は Architect チームがメンテナンスしている優れた DynamoDB エミュレーター、dynaliteを参考にしています。

Dynoxide はクリーンルーム方式で実装された Rust プロジェクトです。コードを直接移植したものはありませんが、エッジケースやエラーメッセージも含め、実際の DynamoDB の動作に合わせるための dynaliteの綿密な取り組みは、非常に貴重な参考資料となりました。

Dynoxide はストレージレイヤーとして SQLite を使用しています。(AWS の DynamoDB Localも内部で SQLite を使用しています。)

ライセンス

MIT と Apache 2.0 のデュアルライセンスです。LICENSE-MITおよびLICENSE-APACHEをご覧ください。

商標

Amazon DynamoDB、DynamoDB、および AWS は、Amazon.com, Inc. またはその関連会社の商標です。Dynoxide は独立したプロジェクトであり、Amazon と提携、承認、または後援を受けていません。また、ここに記載されている内容は、これらの名称や商標を使用する権利を付与するものではありません。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。