テストでエンジンが重要な理由
Testcontainersのテストスイートは、テストクラス用に実際のPostgres、Kafka、Redisを起動し、終わると破棄します。Dev Containerはプロジェクトのツールチェーン全体を再ビルド・再起動します。どちらも、作成、起動、停止、削除というコンテナのライフサイクル呼び出しを何度も繰り返すために時間を使います。これらはOxcartが最速の処理です。
| 操作 | Oxcart 0.1.2 | 次点との比較 |
|---|---|---|
| API による作成(CLI なし) | 2.5 ms | 7× |
| API による起動 | 18.5 ms | 2.1× |
| API による停止 | 4.0 ms | 21× |
| 20個のコンテナを作成・起動 | 0.69 s | 2.5× |
| 20個のコンテナを停止・削除 | 77 ms | 8.9× |
docker run --rm … true | 42 ms | 3.4× |
Oxcart 0.1.2は2026-10-10に同梱のdocker 29.9クライアントで測定しました。他のランタイムは同日のそれ以前に、同じMacと測定ハーネスでdocker 29.4を使って測定しました。Apple M5 Max、各8 CPU・12 GiB、ランタイムを1つずつ実行、5回測定の中央値です。全データは比較ページをご覧ください。
Dev ContainersとTestcontainersをOxcartに接続する
- Oxcartをインストールして開きます。 セットアップは
oxcartというDockerコンテキストを作ります。ほかのものが使われていない場合にだけ現在のコンテキストにするので、docker context showで確認してください。 - dockerコマンドの接続先をOxcartにします。
docker context use oxcartを実行するか、Settings › Command line toolsのUse Oxcart for the docker commandをオンにします。オフにすると以前のコンテキストに戻ります。 - テストフレームワークにソケットを渡します。 Dockerコンテキストではなく
DOCKER_HOSTを読むツールには、コンテキストから値をエクスポートします:export DOCKER_HOST=$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}')。 - テストを実行します。 いつもどおりテストスイートを実行します。TestcontainersはDocker Engine APIを使ってコンテナを作成、起動、削除します。
- Dev Containerを開きます。 プロジェクトをそのDev Containerで開くか、Dev Containers CLIで
devcontainer up --workspace-folder .を実行します。
Testcontainers
Testcontainersライブラリ(Java、Go、Node、Python、.NETなど)は、docker CLIではなくDocker Engine APIと直接通信します。OxcartはAPIバージョン1.54をネゴシエートし、1.40〜1.54を受け付けるため、現在のTestcontainersリリースはソケットを見つけられれば特別な設定なしで接続できます。
ソケットを見つける
Testcontainersは最初にDOCKER_HOSTを確認します。Oxcartのソケットはプライベートな状態フォルダー内にあり、モードは0600、パスはoxcart Dockerコンテキストに保存されています。シェルごとに1回エクスポートするか、IDEのテスト設定で指定します。
export DOCKER_HOST=$(docker context inspect oxcart --format '{{.Endpoints.docker.Host}}')
./gradlew test # or: mvn verify, go test ./..., pytest, npm test ヘルパーコンテナとコンテナ内のソケット
Testcontainersは、テストがクラッシュした後の片付けを行う小さなヘルパーコンテナを起動します。また、構成によってはテスト自体をコンテナ内で実行します。どちらもDockerソケットをマウントします。Oxcartでは-v /var/run/docker.sock:/var/run/docker.sockにより、コンテナがLinux側の内部から同じDocker APIを使えるので、ヘルパーコンテナ、docker-outside-of-docker、Portainer、Traefikが期待どおりに動きます。ツールがMac側のDOCKER_HOSTパスをコンテナにマウントしようとする場合は、Testcontainers標準のTESTCONTAINERS_DOCKER_SOCKET_OVERRIDEで/var/run/docker.sockをマウントするよう指定します。
Dockerfileからビルドするイメージ
Testcontainersはテスト内のDockerfileからイメージをビルドできます(ImageFromDockerfileや各言語の相当機能)。これにはEngine APIのビルドエンドポイントを使います。OxcartはBuildKitで処理し、tarコンテキスト(非圧縮・gzip)、ビルド引数、ラベル、複数のタグに対応します。
Dev Containers
Dev Containerはプロジェクトのツールチェーンをコンテナで定義します。Dev Containersのツール(VS Code拡張機能、devcontainer CLI、それを使うエディタ)はdocker CLIでビルド・実行します。現在のコンテキストがoxcartなら、接続先はOxcartです。
ツールチェーンと関連サービスを揃えてプロジェクトを開きます。Dev Containers CLIは、PostgresやRedisなどのサービスとともにワークスペースを起動します。rootではないnodeユーザーでワークスペースを編集でき、プロジェクトの作成後スクリプトが依存関係を準備します。チームメンバーも同じ設定から同じ環境を得られます。
npm install -g @devcontainers/cli
devcontainer up --workspace-folder .
devcontainer exec --workspace-folder . bash AppleシリコンでDev Containersを使うヒント
- アーキテクチャ:多くのDev Containerベースイメージにarm64版があります。amd64専用イメージはOxcartがRosettaで実行します。AppleシリコンでDocker Composeを使うをご覧ください。
- 依存関係はボリュームへ:
node_modules、パッケージキャッシュ、データベースのデータは名前付きボリュームに置き、ソースはバインドマウントされたワークスペースに残します。 - ファイル監視:Macでの編集はコンテナ内でinotifyイベントを発生させないため、コンテナ内の監視ツールではポーリングを使います。
- コーディングエージェント:Dev Container内で動くエージェントのシェルはプロジェクトのコンテナ内に留まります。Mac上のエージェントは、OxcartのMCPサーバーからDev Containerのサービスを確認できます(AIコーディングエージェント向けDocker)。
意図せず切り替わらないDockerコンテキスト
Oxcartはセットアップ時にoxcartコンテキストを作成し、既存の利用に影響しない場合にだけ切り替えます。具体的には、現在のコンテキストがdefaultで、そのソケットが応答しない場合です。それ以外は現在のコンテキストを維持します。Settings › Command line toolsのUse Oxcart for the docker commandを使うとoxcartに切り替え、以前のコンテキストを記憶します。オフにすると元に戻ります。OxcartはMac上の/var/run/docker.sockを作成・置換せず、APIをTCPで公開することもありません。
よくある質問
AppleシリコンMacのOxcartでTestcontainersは使えますか?
はい。Testcontainersは、Oxcartが実装するDocker Engine API(バージョン1.40〜1.54)と通信します。Dockerfileからのイメージ作成に使うビルドエンドポイントも含まれます。また、Testcontainersのヘルパーコンテナが想定する/var/run/docker.sockにDockerソケットをマウントできます。
Testcontainers用のDOCKER_HOSTを設定するには?
oxcart Dockerコンテキストから取得します。docker context inspect oxcart --format '{{.Endpoints.docker.Host}}'がunix://パスを出力するので、シェルやIDEのテスト実行設定でDOCKER_HOSTとしてエクスポートしてください。
Oxcartで統合テストが速くなるのはなぜですか?
テストスイートは、コンテナの作成、起動、停止、削除に多くの時間を使います。同じMacでOxcartは、API経由の作成が1回2.5 ms、起動が18.5 ms、停止が4.0 ms、20コンテナの停止・削除が77 msでした。すべての項目で、テストした3つのランタイムの中で最速でした。
VS Code Dev ContainersはOxcartで使えますか?
Dev Containers CLI 0.89.0は、Oxcart上で実際の複数サービス構成をビルド・起動し、PostgresとRedisは正常、ワークスペースはコンテナユーザーが書き込み可能でした。Dev Containersのツールはdocker CLIを操作するので、oxcartコンテキストでCLIの接続先をOxcartにしてください。
Dev Containerでdocker-outside-of-dockerは使えますか?
はい。/var/run/docker.sockをコンテナにマウントすると、その中のdocker CLIが同じエンジンと通信します。このソケットからOxcartのプライベートエンドポイントへのアクセスは拒否されるため、コンテナはほかのコンテナを管理できますが、Oxcart自体の内部にはアクセスできません。
OxcartはMacの/var/run/docker.sockを置き換えますか?
いいえ。OxcartはMac上の/var/run/docker.sockを作成・置換しません。クライアントはoxcart Dockerコンテキスト、またはそのコンテキストが示すソケットパスを使って接続します。
出典と測定方法
- 互換性:Oxcartで検証済みの連携(docker-pyとTestcontainersが使うEngine APIビルド、Dev Containers CLI 0.89.0、コンテナ内Dockerソケット)とAPIバージョン範囲。
- Dockerコンテキストの選択とコマンドラインの設定:出荷版Oxcartに基づきます。
- 速度の数値:Oxcart 0.1.2、2026-10-10、Apple M5 Max、8 CPU・12 GiB。他のランタイムは同日のそれ以前に、同じMacと測定ハーネスでdocker 29.4クライアントを使って測定しました。