ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-05-01上級

並列で動く Antigravity エージェントが「同じファイル」を奪い合うとき — 競合を予防する設計とレース条件の現実的な対処

並列に走らせた Antigravity エージェント同士の書き込み競合・ブランチ衝突・キャッシュ破壊を、リソースロックとレース条件の観点から整理し、再現可能な失敗とその修復パターンを実装レベルで紹介します。

antigravity435agents90concurrencyparallel-execution5conflict-resolution2

プレミアム記事

エージェントを並列で走らせ始めた最初の週、私は深夜にビルドを壊しました。3 つの Antigravity エージェントを同時に走らせ、それぞれに別々の機能追加を任せたところ、package.json を 3 つが同時に書き換えて、最後の書き込みが他の 2 つを上書きしました。git の履歴上は 3 つの PR が綺麗に並んでいるのに、実際の package.json には依存関係が一つしか追加されていなかったのです。

並列エージェント運用の難しさは、どれが「いつ」何を触ったかが、人間の目では追えなくなる ところにあります。本記事は、Antigravity を本気で並列運用しようとして私が踏んだ落とし穴を、競合の種類ごとに整理し、再現可能な最小例と現実的な対処を一緒に書き出したものです。「並列にすると速くなる」という素朴な期待を抱いている時期にこそ読んでおいてほしい内容です。

並列エージェントが衝突する 5 つのリソース

並列実行を一週間ほど運用してみると、競合が起きる場所はだいたい次の 5 つに収れんします。

  1. 同じファイルへの書き込みpackage.jsontsconfig.json、ロックファイル、共有 schema。
  2. 同じブランチでのコミット — 同じ親コミットから 2 つ以上のエージェントが分岐すると、後発が rebase の地獄に巻き込まれる。
  3. 共有キャッシュ/ビルド成果物.next/node_modules/.cache/dist/ など、片方が読んでいる最中にもう片方が書く。
  4. 外部 API のレートリミット — 同じ API キーで 3 つのエージェントが同時に Gemini や Stripe を叩くと、429 が連鎖します。
  5. 作業用ディレクトリ/一時ファイル/tmp/ の同名ファイル、ログファイルへの追記、SQLite ファイルの WAL 競合。

最初に大事なのは、競合が「起きるかも」ではなく 「起きる」前提で設計する ことです。エージェントの数が増えれば確率は時間に比例して上がります。1 % の確率の競合でも、毎日 100 回走らせれば必ず 1 回は失敗します。

失敗を再現できる最小例 — package.json レース

並列エージェントが起こす最も典型的な競合を、まずは手元で再現できる形で書いてみます。Node でわざと「読んで書く」操作を 2 並列にすると、最後の書き込みが先の書き込みを消すレースが容易に起きます。

// reproduce/package-race.ts
import { readFile, writeFile } from "node:fs/promises";
 
async function addDep(name: string, version: string) {
  const pkg = JSON.parse(await readFile("package.json", "utf8"));
  pkg.dependencies = pkg.dependencies ?? {};
  pkg.dependencies[name] = version;
  // 「考えている時間」をエージェントに見立てる
  await new Promise((r) => setTimeout(r, 200));
  await writeFile("package.json", JSON.stringify(pkg, null, 2) + "\n");
}
 
await Promise.all([
  addDep("zod", "^3.23.0"),
  addDep("date-fns", "^3.6.0"),
  addDep("nanoid", "^5.0.0"),
]);

このスクリプトを実行すると、3 つの dependencies のうち最後に書き込んだものだけが残ります。読み込みのタイミングが重なるからです。

エージェントの並列実行は、本質的にこのコードと同じ構造です。違いは「考えている時間」が 200ms ではなく数十秒〜数分であることだけ。タイムウィンドウが長い分、衝突は より起きやすく なります。

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

この記事の続きを読む

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

この記事で得られること
並列エージェントが衝突する5つのリソースと、悲観ロック・楽観ロック・キューをどの資源に当てるかの判断基準
書き込みスコープを宣言して push 前に機械検証する worktree ベースの分割設計(検証スクリプト付き)
v2.3.0 のメッセージキューイングと v2.2.1 の統一パーミッションを、競合の予防としてどこまで使えるか
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Agents & Manager2026-07-15
ls には見えるのに、エージェントが開けない — 日本語ファイル名が macOS と Linux で別物になるとき
エージェントが「そのファイルは存在しません」と言い、ターミナルの ls には確かに写っている。三日かけて同期を疑った末に辿り着いたのは、濁点が一文字ではなかったという事実でした。検出スクリプトと三層ゲートまで残します。
Agents & Manager2026-07-08
エージェントに任せた仕事の「やり直し率」を測る — 委譲境界を勘ではなく数字で引く
どこまでをエージェントに任せるか。この線引きを私は長らく勘で引いていました。タスク種別ごとの「やり直し率」を git 履歴から算出し、委譲境界を数字で引き直す実践を、動くコードとともに整理します。
Agents & Manager2026-07-05
エージェント開発スタックの『既知の正常』を1枚のロックファイルで守る — 可動部が同時に動く時代の変更予算設計
IDEビルド・CLI・モデル・依存が同時に動くと、回帰の原因が特定できなくなります。既知の正常を1枚のロックファイルに固定し、一度に動かす軸を絞る変更予算の設計を、実装コードと運用ログで整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →