◉ANTIGRAVITY LABEN
記事一覧/Agents & Manager
◈ Agents & Manager/2026-07-24上級

並列エージェントに実行環境をリースする — ポート帯・DBスキーマ・devサーバを1エージェント1環境で分離する設計

Antigravity 2.0 の真の並列実行で複数エージェントが同じポート・DB・devサーバに衝突する問題を、1エージェント1環境をリースする設計で解きます。ポート帯の決定的割り当てとスキーマ複製の実装、実測値つきです。

Antigravity396並列エージェント6環境分離設計パターン7PostgreSQL

✦ プレミアム記事

3つのエージェントに、同じ Next.js アプリの別々の機能を同時に任せた日のことです。

1つ目が UI コンポーネント、2つ目が API ルート、3つ目がスキーマ移行。Antigravity 2.0 のデスクトップで並列に走らせれば、単純計算で3倍は速くなるはずでした。

結果は逆でした。3つとも localhost:3000 を掴もうとして EADDRINUSE が連発し、移行が同じデータベースで競合してロック待ちになり、片方のエージェントのテストがもう片方のシードデータを消しました。壁時計で測ると、直列で回すより 約1.4倍遅い という数字でした。並列にしたのに遅くなる、という妙な光景です。

原因は計算資源ではありません。共有された状態の副作用です。ポート、devサーバ、データベース、移行、ファイル監視 — これらは1つしかないのに、3つのエージェントが同時に触ろうとします。真の並列実行は、この「1つしかない資源」を容赦なく表面化させます。

個人開発で複数のアプリを並行して回す中で、私自身がたどり着いた解が「1エージェントに1つの実行環境をリースする」という設計でした。以下、実装とともに整理します。

「速くならない並列」の正体

並列エージェントの失敗は、ほとんどが次の4層のどこかで起きます。

層衝突の中身症状
ネットワーク同じポートを複数のdevサーバが奪い合うEADDRINUSE :::3000
データベース同じテーブル・同じ行を書き換える/移行が競合するロック待ち・デッドロック・データ破壊
ファイルシステムlockfile・生成物・キャッシュの同時書き込み壊れた pnpm-lock.yaml・中途半端なビルド
OSリソースinotify 監視数・ファイルディスクリプタの枯渇ENOSPC(監視上限)・HMRの無反応

共通する構造は「1つしかない資源を、複数の主体が調停なしに触る」ことです。人間が1人で開発しているときは、そもそも同時に2つのdevサーバを立てないので表面化しません。エージェントを並列にした瞬間、隠れていた前提が崩れます。

だから対策は「エージェントを賢くする」ことではなく、環境の側を分けることに尽きます。1エージェントに1つ、他と重ならない実行環境を渡します。これがリースの発想です。

リースとは何を渡すことか

リース(lease)は、エージェントに一定期間貸し出す「重ならない資源の束」です。私は最小構成として次の5つを1つのリースにまとめています。

資源割り当て方分離される衝突
ポート帯エージェント番号から決定的にオフセットdevサーバ・API・DBプロキシの奪い合い
DBスキーマテンプレートから複製した専用スキーマ行の破壊・移行競合
作業ディレクトリgit worktree ごとに分離ファイル・lockfile・生成物の衝突
環境ファイルリース値を書き込んだ .env.agent設定の取り違え
リースID回収・掃除の起点になる一意な鍵クラッシュ後の資源リーク

肝は、これらを エージェント番号から決定的に導く ことです。ランダムに空きポートを取る方式は一見スマートですが、後述の理由で並列運用ではむしろ扱いにくくなります。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦エージェントごとに専用のポート帯・DBスキーマ・devサーバをリースする割り当て設計と、リース回収までの実装
✦database-per-agent より schema-per-agent が速い理由(複製は約80ms・新規DBは約900ms)と、移行を毎回走らせないテンプレート複製手法
✦ランダムな空きポートより決定的ポートが並列運用で優れる、直感に反する運用上の理由
✦同じ3タスクを直列・素朴な並列・リース並列で回した壁時計の実測比較(18分40秒 / 26分10秒 / 8分05秒)と、頭打ちになる地点の読み方
✦LIKE INCLUDING ALL が黙って落とすもの(外部キーは複製されず、serial の既定値はテンプレート側のシーケンスを指し続ける)と、複製直後に制約の本数で検証する SQL
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◈ Agents & Manager2026-10-22
引き継ぎ文書の古い参照は 17 件に見えて実際は 2 ファイルでした。本当に危なかったのは、別のサイトの手順書が混ざっていたことでした
エージェントに読ませるリポジトリ直下の .md を点検する Python スクリプトの全文です。素朴な版は壊れた参照を 17 件と数え、直すと 7 件、実体は 2 ファイル。別の問題が見つかるまでの過程を残します。
◈ Agents & Manager2026-10-16
エージェントに .zip を渡す前に、.git を除いて 29 MB を 15 MB にし、秘密情報の警告 28 件を見分けました
Antigravity アプリ v2.23.0 で .zip を添付できるようになりました。自分のリポジトリを実際に固めて .git の重さと秘密情報検査の誤検知を数え、除外・検査・マニフェストを一度に行う Python スクリプトの全文を残します。
◈ Agents & Manager2026-10-14
位置で読む API 応答を変えるとき、出荷済みの旧版を起動時に落とさないための門番を置きました
壁紙アプリのように、サーバーの一覧応答を「何番目の項目か」で読むクライアントは、出荷済みの旧版が長く残ります。項目の削除や並び替えで旧版を起動時に落とさないよう、末尾追加だけを通す検査と、出荷済みの版ディレクトリを凍結する台帳の作り方を、動かした出力つきで書き残します。