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

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

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

agents100idempotency5scheduled-execution3lockingreliability6

✦ プレミアム記事

同じ記事が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-04-24
Antigravity エージェントの SRE を始める — SLO とエラーバジェットで『AIは気まぐれ』を本番運用に落とし込む
AI エージェントは確率的に動く以上、SRE の考え方なしに本番運用はできません。SLI/SLO/エラーバジェットを Antigravity エージェントに適用する実装コードと、緩い SLO ではバーンレート 14.4 倍のアラートが発火しない数式上の落とし穴まで、運用判断の基準を書き残します。
◈ Agents & Manager2026-10-13
「いつもの感覚」で決めている判断を、エージェントに渡せる文章に直す手順
頭の中だけにある判断基準を、Antigravity のエージェントが同じように使える文章へ直す手順です。過去の事例で試し、ずれた箇所だけ直す小さな検証つきです。
◈ Agents & Manager2026-09-04
エージェントの実効スコープを書き出しておくと、既定が変わった日に気づけます
Antigravity 1.1.25 で、Markdown 定義のカスタムエージェントが既定で周囲のスキル・ルール・サブエージェントを継承するようになりました。絞ったつもりのエージェントが更新後に広がっていないかを、実効スコープの JSON スナップショットと差分で確かめる手順を書き残します。