ANTIGRAVITY LABEN
記事一覧/Agents & Manager
Agents & Manager/2026-06-29上級

二重起動するバックグラウンドエージェント — リースとフェンシングトークンで止める設計

同じスケジュールジョブが2台のマシンから同時に走り、成果物を上書きし合う。Antigravity 2.0 のバックグラウンドエージェントで起きるこの事故を、リースとフェンシングトークンで根本から防ぐ設計をコード付きで整理します。

バックグラウンドエージェント3Antigravity351分散ロックフェンシングトークン運用設計24

プレミアム記事

ある朝、生成されたはずの成果物が半分だけ古い内容で上書きされていました。ログを追うと、同じスケジュールジョブが2台のマシンからほぼ同時刻に起動し、片方が書き終わる前にもう片方が書き始めていたのです。

私自身、個人開発で複数のブログ運用をバックグラウンドのエージェントに任せています。1台が眠っているあいだに別の1台が拾う、という二重化のつもりでした。ところが両方が起きていた瞬間に、両方が同じジョブを掴んでしまった。これは「ロックを取り忘れた」話ではありません。ロックを取っていても起こります。その理由と、止め方を順に書きます。

なぜ排他ロックだけでは二重起動が止まらないのか

直感的には「ジョブ開始時にロックを取り、終了時に解放すればよい」と思えます。しかしバックグラウンドエージェントの世界では、この前提が静かに崩れます。

ロックを保持したまま、プロセスが長時間停止することがあるからです。ガベージコレクションの長いポーズ、OSのスリープ復帰、重いモデル呼び出しの待ち。その間にロックのTTLが切れ、別のマシンが正当にロックを取得します。最初のマシンは「自分はまだロックを持っている」と思い込んだまま目を覚まし、書き込みを始めます。この瞬間、世界には2人のロック保持者がいます。

つまり問題は排他の取得ではなく、保持の継続を保証できないことにあります。ここを取り違えると、TTLを延ばす・ハートビートを足すといった対症療法を重ねても、確率を下げるだけで根絶できません。

リース(lease)という考え方

そこで「ロック」ではなく「リース(期限付きの貸与)」として捉え直します。リースは必ず失効する前提の所有権です。保持者は失効前に明示的に更新(renew)し続けなければなりません。更新が途切れた瞬間、所有権は自動的に手放されたものとみなされます。

重要なのは、リースが失効するたびに発行されるフェンシングトークン(fencing token)が単調増加することです。誰かがリースを取得するたびにトークンは必ず大きくなります。これにより「古い所有者」と「新しい所有者」を、書き込みの直前に数値の大小だけで判定できるようになります。

観点単純な排他ロックリース+フェンシングトークン
停止からの復帰古い保持者が書き込んでしまう古いトークンは書き込み側で拒否される
所有権の判定「持っているつもり」に依存数値の大小で機械的に判定
時計ずれの影響TTL判定が狂うと破綻順序はトークンで決まり時計に依存しない
必要な前提全員が誠実に振る舞うこと書き込み先がトークンを検証できること

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

この記事の続きを読む

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

この記事で得られること
「ロックを取れたから安全」が成り立たない理由(GC停止・スリープ復帰・時計ずれ)を具体例で理解し、単なる排他ロックでは二重起動を防げないことが腑に落ちる
リース+単調増加フェンシングトークンによる二重実行防止の完全な実装(取得・更新・失効・書き込み側の検証)。bash と Python のコードをそのまま流用できる
個人開発で2台のMacからスケジュール実行していて成果物が壊れた実体験から、検証ゲートをどこに置くべきかの判断基準が得られる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Agents & Manager2026-06-29
止まったまま生きているエージェントを見抜く — 進捗ハートビートとウォッチドッグの設計
プロセスは生きているのに6時間まったく進んでいない、という沈黙状態を見抜くために、進捗マーカーの外部化と無進捗タイムアウトによるウォッチドッグを設計しました。安全な止め方や導入の順序、夜間の記事生成エージェントで踏んだ落とし穴も共有します。
Agents & Manager2026-07-16
作業中のエージェントに、次の指示をいつ渡すか — 待つ・割り込む・積むを実運用で測りました
Antigravity v2.3.0 で入ったメッセージのキューイングと Send Now。待つ・割り込む・積むの三択を同じ物差しで測り、積んだ指示が古くなる問題と、前提スタンプで手戻りを22%から9%へ下げた記録をまとめました。
Agents & Manager2026-06-21
無人エージェントの実行ログを、ディスクを溢れさせずに後から追える形で残す
スケジュール実行のエージェントは、落ちた理由を後から追えなければ直せません。実行ログをディスクを溢れさせずに残すため、3層保持・スキーマ版付与・圧縮ジョブで設計する方法を、複数サイトを自動運用する個人開発の現場からまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →