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

スケジュール実行のエージェントが二重に走る — 重複と再実行に耐える冪等設計

前回の実行が終わらないうちに次回がトリガーされ、スケジュール実行のエージェントが同じ作業を二重に行うことがあります。重なり防止のロックと、途中失敗からの再実行に耐える冪等化を、実運用で踏んだ二重投稿の事例とともに設計します。

agents67idempotency3scheduled-execution3lockingreliability3

プレミアム記事

同じ記事が2本、ほぼ同じ時刻に公開されているのを見つけたことがあります。

個人開発で複数のサイトを自動運用しているため、コンテンツ生成やレポート集計をスケジュール実行のエージェントに任せています。あるとき生成が普段より重く、1回分の実行が想定の枠を超えて長引きました。終わらないうちに次回のトリガーが来て、2本目のエージェントが起動し、同じトピックでもう1本作って push してしまったのです。

スケジュール実行は「決まった時刻に1回走る」と思いがちですが、実際には「前回が終わっていなくても時刻が来れば走る」ことがあります。私自身、この思い込みのまま組んでいて二重投稿に至りました。重なりと再実行に耐えるエージェントの冪等設計を、運用で踏んだ事故をたどりながら順に組み立てていきます。

二重実行はなぜ起きるのか

原因は大きく2つに分かれます。切り分けないと対策がずれます。

ひとつ目はオーバーラップ(重なり)です。前回の実行が長引き、終わる前に次回のトリガー時刻が来ると、2つの実行が並走します。生成系のエージェントは入力データやモデルの応答時間によって所要時間が大きく振れるため、普段は5分で終わる処理が、たまに20分かかることがあります。固定間隔のスケジュールは、この揺らぎを吸収してくれません。

ふたつ目はリトライによる再実行です。多くの自動実行環境は、失敗したタスクを自動でやり直します。問題は「どこまで進んでから失敗したか」です。記事ファイルを書き終えて push する直前にネットワークで落ちた場合、ファイルは残っているのに「失敗」と判定され、再実行で同じ作業をもう一度やると、成果物が二重になります。

この2つは性質が違います。オーバーラップは「同時に2つ走る」問題で、ロックで防ぎます。リトライは「時間をおいて2回走る」問題で、成果物の冪等化で吸収します。両方が必要です。

オーバーラップは flock で防ぐ

重なりを防ぐ最も確実な方法は、実行の入り口で排他ロックを取ることです。Linux の flock は、ファイルディスクリプタに対するアドバイザリーロックを提供し、ロックが取れなければ即座に諦める、という挙動を簡単に書けます。

#!/usr/bin/env bash
# run_agent_guarded.sh
# 同じタスクの実行が既に走っていたら、今回はスキップする
set -euo pipefail
 
LOCK="/tmp/agent-content-antigravity.lock"
 
exec 9>"$LOCK"
if ! flock -n 9; then
  echo "⏭ 前回の実行がまだ走っています。今回はスキップします($(date '+%F %T'))"
  exit 0
fi
 
# ここから先は単一実行が保証される
echo "▶ 実行開始 $(date '+%F %T')"
 
# --- 実際のエージェント作業 ---
generate_and_push_article
 
echo "■ 実行終了 $(date '+%F %T')"
# 9 番ディスクリプタはプロセス終了時に自動で閉じ、ロックも解放される

flock -n-n(non-blocking)が肝です。ロックが取れなければ待たずに終了コードを返すので、重なったときは黙って次回に譲ります。待ち行列を作らないことで、実行が雪だるま式に積み上がるのを防げます。ロックファイルは /tmp のようにプロセス間で共有される場所に置き、ディスクリプタはプロセス終了で自動解放されるため、明示的な解放処理は不要です。

これでオーバーラップは止まります。しかしリトライによる二重化は、ロックだけでは防げません。時間をおいて走る2回は、どちらもロックを取れてしまうからです。

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

この記事の続きを読む

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

この記事で得られること
スケジュール実行が二重に走る2つの原因(前回実行の長期化による重なり・失敗後の自動リトライ)を切り分けて理解できる
flock によるオーバーラップ防止と、作業キーで成果物の重複を弾く冪等ガードを、bash でそのまま導入できる
「少なくとも1回」実行を前提に、二重実行が起きても成果物が1つに収束する設計の組み立て方が分かる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Agents & Manager2026-06-13
Antigravity SDK で定期実行エージェントを冪等に組む — 二重起動と取りこぼしを防ぐ実装
Antigravity SDK のスケジュール実行は、cron 式を一行足すだけで動きます。難しいのはそこではなく、同じジョブが二重に走ったり、前回の続きを取りこぼしたりせず「何度動いても結果が一つ」になる実装です。個人開発の定期メンテナンスで踏んだ失敗をもとに、冪等な定期エージェントの組み方をまとめました。
Agents & Manager2026-06-13
スケジュール実行エージェントの指示書ドリフト — 定義・文書・実態の乖離を検知する三層整合の設計
スケジュール実行のエージェントは、指示書と実態が乖離しても成功ログを出し続けます。定義・文書・実態の三層で整合を検査するスクリプトと週次レビューの組み立てを、運用で踏んだ無音失敗の実例とともにまとめました。
Agents & Manager2026-04-24
Antigravity エージェントの SRE を始める — SLO とエラーバジェットで『AIは気まぐれ』を本番運用に落とし込む
AI エージェントは確率的に動く以上、SRE の考え方なしに本番運用はできません。SLI/SLO/エラーバジェットを Antigravity エージェントにどう適用するか、実装コードと運用判断基準まで踏み込んで解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →