◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/API / SDK
◈ API / SDK/2026-07-04上級

Managed Agents を並列で回すと同じリポジトリを奪い合う ― 隔離サンドボックスに効く外部リースとフェンシング

Managed Agents は実行ごとに隔離サンドボックスが立つため、複数実行が同じリポジトリやレコードに同時に触れてもローカルロックが効きません。外部リースとフェンシングトークンで単一実行を保証する実装をまとめました。

Gemini API248Managed Agents8エージェント16サンドボックス3個人開発121

✦ プレミアム記事

先日、個人で運用しているサイト更新の自動化を Managed Agents へ寄せている途中で、同じリポジトリに向けて二つの実行がほぼ同時に走る場面に出くわしました。片方は定時のブラッシュアップ、もう片方は少し遅れて再発火した記事生成です。起動の間隔はわずか7秒。どちらも同じ content/ を書き換え、同じ main へ push しようとしていました。

自前のループを一台のサーバーで回していた頃は、こういう衝突はファイルロック一行で防げていました。ところが Managed Agents では実行のたびに Google 側で独立した Linux サンドボックスが立ち上がります。二つの実行は物理的に別のマシンにいるようなもので、片方が握ったロックはもう片方からは存在すら見えません。ここで初めて「ローカルロックが効かない世界」の設計をやり直す必要が出てきました。

隔離サンドボックス上で並列に走る Managed Agents 実行を、外部リースとフェンシングトークンで安全に直列化する。その方法を、個人開発で実際に動かしているコードとともに整理します。

隔離サンドボックスでは「見えないから衝突する」

まず何が起きたのかを正確に書いておきます。二つの実行はどちらも同じ手順を踏みました。リポジトリを浅くクローンし、記事の MDX を書き込み、コミットして push する。単体では何の問題もありません。問題は、この一連の危険区間が重なったときにだけ現れます。

実測では、3週間・約210回の自動実行のうち、リース導入前に重複 push が3件、git pull --rebase の衝突リトライが11件発生していました。重複 push は、二つの実行が別々のファイルを書いて両方成功したケースです。壊れてはいませんが、同じ題材が二重に出たり、あとから見て「なぜ2コミット続いているのか」が追いにくくなります。リトライ11件のほうは、push 競合を検知して片方が rebase からやり直したもので、実害はないものの毎回数十秒を無駄にしていました。

一台のサーバーなら、この危険区間の入口に排他ロックを置けば終わりです。Managed Agents ではそれができません。理由を次に分けて書きます。

なぜローカルロックが効かないのか

「ロックが効かない」と一口に言っても、効かない層がいくつも重なっています。順に潰しておくと、あとで代替設計を選ぶときに迷いません。

手段一台のサーバー隔離サンドボックス(Managed Agents)
プロセス内ミューテックス効く別プロセス・別マシンなので無意味
ファイルロック(flock)効くファイルシステムが実行ごとに独立。共有されない
ポートやソケットの占有効くネットワーク名前空間が分離。衝突しない
外部ストアの条件付き書き込み効く効く(唯一の共有点)

要点はひとつです。二つの実行が確実に「同じものを見られる」場所は、サンドボックスの外にある共有ストアだけです。したがって排他制御は、そのストアの原子的な操作の上に組み立てるしかありません。ここでいう原子性とは、読んで・条件を確かめて・書く、を割り込まれずに一息で行える性質のことです。Firestore のトランザクション、Postgres のアドバイザリロックや UPDATE ... WHERE、Redis の SET NX などが候補になります。

私は普段 Google 系のストアに寄せているので、ここでは Firestore のトランザクションで最小のリースを組みます。要のふるまいは三つ、acquire(取得)・renew(延長)・release(解放)です。

✦

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

この記事の続きを読む

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

この記事で得られること
✦隔離サンドボックス間では flock もプロセス内ミューテックスも効かない理由と、外部リースが唯一の共有点になる設計
✦acquire / renew / release の3手順で最小リースを Firestore トランザクションに実装する before / after のコード
✦期限切れリースを持つゾンビ実行の遅延書き込みを、フェンシングトークンの compare-and-set で弾く具体手順
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

◈ API / SDK2026-08-02
environment hooks に置いた門番の実測 — 判定は46マイクロ秒、起動は23ミリ秒
Managed Agents の environment hooks に破壊的コマンドのガードを置くまでの記録です。正規表現の denylist が20件中9件を素通りさせた実測から、argv 分解による検出率100パーセントまでの3段階と、判定より500倍重い起動コストの内訳をまとめました。
◈ API / SDK2026-09-29
『F6号』と『A4くらい』が同じ列に並ぶ作品台帳を、Gemini の読み取りと号数表の換算で cm に揃えるまで
作家さんの作品台帳に『F6号』『41×31.8cm』『A4くらい』が混ざっていました。Gemini API には読み取りだけを頼み、換算は号数表、向きは画像で決める小さな道具を、動くコードとともに一本ずつ組み立てます。
◈ API / SDK2026-09-11
文字起こしの固有名詞が直らないとき、カスタム語彙に何を入れて何を諦めるか
gemini-3.5-transcribe の custom_vocabulary は最大1,000語ですが、枠を埋めることが目的ではありません。誤認ログの正解と出力の対から、枠を渡す語だけを選び直す60行のスクリプトと、その判断基準をまとめます。