Claude Code の /loop で定期実行とリマインダーを設定する

Claude Code エンジニアリング 7分で読めます

デプロイが終わったか数分おきに確かめる、PR の CI とレビューコメントを見張る、45分後に結合テストの結果を見直す。Claude Code には、こうした「あとでもう一度やる」作業をセッションの中で自動化する スケジュール実行(scheduled tasks) の仕組みがあります。本記事は公式ドキュメント「Run prompts on a schedule」に基づき、/loop と cron ツールの使い方を日本語で解説します。

ここで扱うタスクはセッション単位です。現在の会話の中にだけ存在し、新しい会話を始めると消えます。ターミナルを閉じても動き続ける定期実行が必要な場合は、後述するクラウドの Routines やデスクトップアプリのスケジュールタスクを使います。

3つのスケジュール手段の違い

Claude Code で定期的な作業や一度きりの作業を予約する方法は3つあります。公式ドキュメントの比較表を要約すると次のとおりです。

クラウド(Routines)デスクトップ/loop
実行場所クラウド(既定は Anthropic 管理)自分のマシン自分のマシン
マシンの起動が必要不要必要必要
セッションを開いておく必要不要不要必要
再起動をまたいで残るか残る残る--resume で復元(例外あり)
ローカルファイルへのアクセスなし(毎回まっさらな clone)ありあり
権限の確認なし(自律実行)タスクごとに設定セッションの設定を引き継ぐ
最短間隔1時間1分1分

使い分けの目安は、マシンが止まっていても確実に回したい作業はクラウド、ローカルのファイルやツールが要る作業はデスクトップ、作業中にさっとポーリングしたいだけなら /loop です。本記事は3つ目の /loop と、その土台になっている cron ツールを扱います。

なお、ポーリングではなくイベントが起きた瞬間に反応させたい場合(CI の失敗をセッションに直接流し込むなど)は Channels、一定間隔ではなく条件を満たすまでターンを重ねて作業させたい場合は /goal という別の機能が用意されています。

/loop で繰り返し実行する

/loop は Claude Code に同梱されているスキル(bundled skill)で、セッションを開いている間プロンプトを繰り返し実行する最短の手段です。間隔もプロンプトも省略でき、何を渡したかで動き方が変わります。

渡すもの動き方
間隔とプロンプト/loop 5m check the deploy固定のスケジュールで実行
プロンプトだけ/loop check the deploy毎回 Claude が次の間隔を決める
間隔だけ、または何も渡さない/loop組み込みのメンテナンス用プロンプト(loop.md があればそちら)を実行

固定の間隔で回す

間隔を指定すると、Claude がそれを cron 式に変換してジョブを登録し、実行間隔とジョブ ID を返します。

# 5分ごとにデプロイの完了を確認する
/loop 5m check if the deployment finished and tell me what happened

間隔は 30m のようにプロンプトの前に置いても、every 2 hours のようにプロンプトの後ろに書いても構いません。単位は s(秒)・m(分)・h(時間)・d(日)です。cron の粒度は1分なので、秒は分に切り上げられます。7m90m のように cron のきれいな刻みにならない間隔は、近い刻みに丸められ、何に丸めたかを Claude が教えてくれます。

間隔を Claude に任せる

間隔を省くと、固定の cron ではなく Claude が毎回の結果を見て次の待ち時間を1分から1時間の範囲で決めます。ビルドの完了間際や PR が動いている間は短く、何も起きていなければ長く待ちます。選んだ待ち時間と理由は各回の最後に表示されます。

# CI の結果とレビューコメントを見張る。PR が静かになると間隔が延びる
/loop check whether CI passed and address any review comments

Monitor ツールが使えるセッションでは、Claude が間隔任せの /loop の代わりに Monitor を直接使うことがあります。Monitor はバックグラウンドでスクリプトを走らせて出力を1行ずつ流してくるので、ポーリング自体が不要になり、トークン効率と反応速度の面で有利なことが多いと公式は説明しています。

スキルを繰り返す

プロンプトの代わりにスキルを渡すこともできます。たとえば /loop 20m /review-pr 1234 は、20分ごとにそのスキルを実行し直します。ただし予約された実行で動くのは、Claude が自分で呼び出してよいスキルだけです。次のものは実行されず、ただのテキストとして Claude に渡ります。

プロンプトを省いたとき

プロンプトを渡さない /loop は、組み込みのメンテナンス用プロンプトを実行します。各回で上から順に、会話の中の未完了の作業を続ける、現在のブランチの PR の面倒を見る(レビューコメント・失敗した CI・マージコンフリクト)、ほかに何もなければバグ探しや簡素化などの整理を行う、という流れです。その範囲外の新しい取り組みは始めず、push や削除のような取り消せない操作は、会話の中ですでに許可されている作業の続きである場合にだけ行います。

# 間隔は Claude 任せでメンテナンス用プロンプトを回す
/loop

# 15分の固定間隔で回す
/loop 15m

loop.md とループの止め方

引数なしの /loop で使うプロンプトは、loop.md というファイルで自分用に差し替えられます。これは「引数なしの /loop の既定プロンプト」を1つ定義するファイルで、複数のタスクを並べる場所ではありません。コマンドラインでプロンプトを渡したときは無視されます。

探す場所は2つで、先に見つかったほうが使われます。

書式の決まりはなく、/loop に直接打ち込むつもりで Markdown を書きます。公式の例は、リリースブランチを健全に保つための指示です。

Check the `release/next` PR. If CI is red, pull the failing job log,
diagnose, and push a minimal fix. If new review comments have arrived,
address each one and resolve the thread. If everything is green and
quiet, say so in one line.

内容は「release/next の PR を確認し、CI が赤なら失敗ジョブのログを取って原因を調べ最小限の修正を push する。新しいレビューコメントがあれば1件ずつ対応してスレッドを resolve する。すべて緑で静かなら1行でそう言う」というものです。loop.md の変更は次の回から反映されるので、ループを回しながら指示を調整できます。25,000 バイトを超えた部分は切り捨てられるため、短く保ちます。

ループを止める

リマインダーとタスクの管理

一度きりのリマインダー

1回だけ実行したいときは /loop を使わず、自然文で頼みます。Claude は実行後に自動で消える単発タスクを登録し、いつ実行するかを確認として返します。

remind me at 3pm to push the release branch

in 45 minutes, check whether the integration tests passed

一覧とキャンセル

タスクの一覧やキャンセルも自然文で頼めます。

what scheduled tasks do I have?

cancel the deploy check job

裏で Claude が使っているのは次の3つのツールです。

ツール役割
CronCreate新しいタスクを登録する。5フィールドの cron 式、実行するプロンプト、繰り返しか1回きりかを受け取る
CronList登録済みのタスクを ID・スケジュール・プロンプト付きで一覧する
CronDeleteID を指定してタスクをキャンセルする

タスクには8文字の ID が振られ、CronDelete に渡して使います。1つのセッションで同時に持てるタスクは50件までです。

cron 式の書き方

CronCreate は標準的な5フィールドの cron 式(分 時 日 月 曜日)を受け付けます。どのフィールドでもワイルドカード *、単一の値 5、刻み */15、範囲 1-5、カンマ区切りのリスト 1,15,30 が使えます。

意味
*/5 * * * *5分ごと
0 * * * *毎時0分
7 * * * *毎時7分
0 9 * * *毎日9時(ローカル時刻)
0 9 * * 1-5平日の9時
30 14 15 3 *3月15日14時30分

曜日は日曜が 0 または 7、土曜が 6 です。LW? のような拡張構文や、MONJAN のような名前での指定には対応していません。日と曜日の両方を指定した場合は、vixie-cron と同じくどちらか一方に一致すれば実行されます。

実行タイミングと制約

いつ実行されるか

スケジューラは1秒ごとに実行時刻が来たタスクを確認し、低い優先度でキューに入れます。予約されたプロンプトはターンとターンの間に実行され、Claude が応答している最中に割り込むことはありません。実行時刻に Claude が作業中なら、そのターンが終わるまで待ちます。

時刻はすべてローカルのタイムゾーンで解釈されます。0 9 * * * は UTC ではなく、Claude Code を動かしている場所の9時です。

ジッター(実行時刻のずれ)

すべてのセッションが同じ時刻に一斉に API を呼ばないよう、スケジューラは実行時刻に決まったずれを加えます。

ずれの量はタスク ID から決まるので、同じタスクなら毎回同じだけずれます。時刻を正確に合わせたい場合は、0 9 * * * ではなく 3 9 * * * のように 0分・30分以外を選ぶと、単発タスクのずれはかかりません。なお、間隔を Claude に任せたループにはジッターは適用されません。

7日間の期限

繰り返しタスクは作成から7日で自動的に期限切れになり、最後に1回実行してから自分自身を削除します。忘れたループが延々と回り続けないための上限です。間隔任せのループにもこの期限は適用されます。7日を超えて続けたい場合は期限前にキャンセルして作り直すか、Routines やデスクトップのスケジュールタスクを使います。

セッション単位であることによる制約

スケジューラを無効にする

環境変数 CLAUDE_CODE_DISABLE_CRON=1 を設定すると、スケジューラ全体が無効になります。cron ツールと /loop が使えなくなり、登録済みのタスクも実行されなくなります。

# スケジュール実行を無効にして起動する
CLAUDE_CODE_DISABLE_CRON=1 claude

無人で確実に回す必要がある cron 的な自動化には、クラウドで動く Routines、CI の schedule トリガーを使う GitHub Actions、ローカルで動くデスクトップのスケジュールタスクが公式に案内されています。

関連記事: バックグラウンドセッションと agent view / Claude Code GitHub Actions

本記事は Anthropic 公式ドキュメント「Run prompts on a schedule」に基づく非公式の日本語解説です(確認日 2026-09-16)。コマンド一覧・ツール一覧・環境変数のページとも照合しています。仕様は更新される場合があるため、利用前に公式ドキュメントをご確認ください。