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

Antigravity SDK で定期実行エージェントを冪等に組む — 二重起動と取りこぼしを防ぐ実装

Antigravity SDK のスケジュール実行は、cron 式を一行足すだけで動きます。難しいのはそこではなく、同じジョブが二重に走ったり、前回の続きを取りこぼしたりせず「何度動いても結果が一つ」になる実装です。個人開発の定期メンテナンスで踏んだ失敗をもとに、冪等な定期エージェントの組み方をまとめました。

agents67antigravity-sdkscheduled-execution3idempotency3automation24

プレミアム記事

定期実行のエージェントを初めて SDK で組んだとき、最初の一週間は順調でした。問題が見えたのは、デプロイの最中に手動でもう一度トリガーを引いた朝です。同じレポート集計のジョブが二つ同時に走り、片方が書き込んだファイルをもう片方が上書きして、その日の数値だけが前日のコピーになっていました。

cron 式を足してエージェントを定期起動させること自体は、Antigravity SDK ではほとんど一行で済みます。本当に難しいのは、起動が一回だろうと二回だろうと、結果が必ず一つに収束する状態をつくることです。

個人開発で複数のアプリを運用していると、依存更新・クラッシュレポートのトリアージ・AdMob のレポート集計といった作業を毎晩エージェントに任せたくなります。そのとき土台になるのが、この「冪等性」でした。

スケジュール実行を定義する最小構成

まず、SDK でスケジュール実行を宣言する最小の形を見ておきます。ポイントは、エージェント本体(何をするか)とスケジュール定義(いつ動かすか)を分けて書けることです。

# schedule_agent.py
from antigravity import Agent, Schedule, run
 
agent = Agent(
    name="daily-report-aggregator",
    model="gemini-3.5-flash",
    instructions="""
    指定された日付の AdMob レポートを集計し、
    output/report-<date>.json に書き出してください。
    既存ファイルがあれば上書きせず終了してください。
    """,
)
 
schedule = Schedule(
    agent=agent,
    # 毎日 JST 09:00(UTC 00:00)
    cron="0 0 * * *",
    timezone="Asia/Tokyo",
    # 1回の実行に上限を設け、暴走を物理的に止める
    max_duration_seconds=600,
)
 
if __name__ == "__main__":
    run(schedule)

crontimezone を指定すれば、スケジューラ側が時刻になるたびにエージェントを起動します。max_duration_seconds は地味ですが重要で、想定外のループに入ったジョブを時間で強制終了させる安全弁になります。

ここまでは公式の例にも近い形です。事故が起きるのは、この先の「起動のされ方」を誤解したときでした。

「毎回まっさらなセッション」という前提を取り違えない

Antigravity のスケジュール実行は、起動のたびに新しいセッションを作ります。前回の会話履歴も、メモリ上の変数も引き継ぎません。これは暴走の伝播を防ぐ良い設計なのですが、裏を返すと「前回どこまで終わったか」をエージェント自身は知らない、ということです。

最初に私が書いたコードは、暗黙にセッションが継続する前提になっていました。「昨日の続きから集計」といった指示を書いていたのですが、新規セッションには昨日の状態がないので、エージェントは毎回ゼロから全期間を集計し直していました。結果は合っていたものの、実行時間が日々伸びていきます。

正しくは、状態を外部に置き、起動のたびに読み直す設計にします。

import json, pathlib
 
STATE = pathlib.Path("state/last_processed.json")
 
def load_checkpoint() -> str | None:
    if STATE.exists():
        return json.loads(STATE.read_text())["last_date"]
    return None
 
def save_checkpoint(date: str) -> None:
    STATE.parent.mkdir(parents=True, exist_ok=True)
    STATE.write_text(json.dumps({"last_date": date}))

セッションは毎回まっさらでも、チェックポイントだけはディスク(や KV)に残ります。エージェントの指示文には「state/last_processed.json を読み、その翌日から処理する」と書いておけば、新規セッションでも続きから動けます。

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

この記事の続きを読む

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

この記事で得られること
Antigravity SDK でスケジュール実行エージェントを定義する最小コードと、cron 起動・新規セッション生成・状態の引き継ぎがどう噛み合うかを把握できる
二重起動・取りこぼし・途中失敗の3つの典型事故に対して、ロック・チェックポイント・構造化ログで冪等性を担保する実装をそのまま流用できる
ドライラン検証と pause/resume の運用フックを組み込み、定期ジョブを10分でレビューできる状態に持っていける
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

Agents & Manager2026-06-13
スケジュール実行のエージェントが二重に走る — 重複と再実行に耐える冪等設計
前回の実行が終わらないうちに次回がトリガーされ、スケジュール実行のエージェントが同じ作業を二重に行うことがあります。重なり防止のロックと、途中失敗からの再実行に耐える冪等化を、実運用で踏んだ二重投稿の事例とともに設計します。
Agents & Manager2026-06-13
スケジュール実行エージェントの指示書ドリフト — 定義・文書・実態の乖離を検知する三層整合の設計
スケジュール実行のエージェントは、指示書と実態が乖離しても成功ログを出し続けます。定義・文書・実態の三層で整合を検査するスクリプトと週次レビューの組み立てを、運用で踏んだ無音失敗の実例とともにまとめました。
Agents & Manager2026-04-20
Antigravity × Google Workspace API で構築するビジネス自動化エージェント — Gmail・Drive・Sheets・Docs 完全連携実装ガイド
Antigravity と Google Workspace API(Gmail・Drive・Sheets・Docs)を組み合わせ、ビジネス文書処理・メール自動応答・データ集計を完全自動化するAIエージェントの設計から本番運用までを解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →