GEMINI LABEN
MODEL — Gemini 3.5 FlashがGA(正式版)となり、gemini-flash-latestの実体になりましたAGENT — Managed AgentsがGemini APIで公開プレビュー入り。分離されたGoogleホストのLinuxサンドボックスで自律エージェントを動かせますSEARCH — File Searchがマルチモーダル検索に対応し、gemini-embedding-2で画像も直接埋め込み・検索できますWEBHOOK — Batch APIや長時間処理向けにイベント駆動のWebhookが追加され、ポーリングを置き換えられますEMBED — gemini-embedding-2がGAとなり、埋め込みの本番利用が安定しましたDEPRECATION — 一部の画像生成モデルが8月17日に提供終了となるため、移行の準備が必要ですMODEL — Gemini 3.5 FlashがGA(正式版)となり、gemini-flash-latestの実体になりましたAGENT — Managed AgentsがGemini APIで公開プレビュー入り。分離されたGoogleホストのLinuxサンドボックスで自律エージェントを動かせますSEARCH — File Searchがマルチモーダル検索に対応し、gemini-embedding-2で画像も直接埋め込み・検索できますWEBHOOK — Batch APIや長時間処理向けにイベント駆動のWebhookが追加され、ポーリングを置き換えられますEMBED — gemini-embedding-2がGAとなり、埋め込みの本番利用が安定しましたDEPRECATION — 一部の画像生成モデルが8月17日に提供終了となるため、移行の準備が必要です
記事一覧/API / SDK
API / SDK/2026-07-04上級

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

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

Gemini API167Managed Agents4エージェント13サンドボックス2個人開発74

プレミアム記事

先日、個人で運用しているサイト更新の自動化を 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-06-16
Gemini Managed Agents を自動化に組み込む ― 会話状態と環境状態を分けて扱う実装メモ
Managed Agents は1回の API 呼び出しで Linux サンドボックスを立て、エージェントを走らせて結果を返します。自前ループから移すとき最初につまずく「会話状態と環境状態は別物」という設計を、実際に動かしながら整理しました。
高度な活用2026-07-01
Managed Agents の隔離サンドボックスから成果物を安全に持ち出す — スコープ限定クレデンシャルと egress の設計
Gemini API の Managed Agents はGoogleホストの隔離サンドボックスで動きます。生成した成果物をそこから自分のリポジトリへ安全に戻すための、短命・最小権限クレデンシャルとegress境界の実装をまとめました。
API / SDK2026-06-28
Gemini API で動画を「時刻つき」で読む — 該当シーンだけを引き出す
画面録画やアプリのデモ動画から「あの操作はどこ?」を探すのは骨が折れます。Gemini API の動画理解を使い、タイムスタンプ付きで該当箇所だけを引き出す方法と、FPS・解像度でトークンを抑える設計をまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →