Claude Code でプロンプトを定期実行!/loop コマンドとスケジュールタスクの使い方
目次
デプロイを走らせたあと、ターミナルに張り付いて完了を待つ。CI が通るまで何度もブラウザをリロードする。PR にレビューコメントがついたか気になって集中が途切れる…。開発中、こういう「ちょっと気になるけど手を止めるほどでもない確認作業」って地味にストレスですよね。
Claude Code の /loop コマンドとスケジュールタスク機能を使うと、こうした確認作業を Claude に任せておけます。週末に Boris Cherry さんの告知 でも紹介されていたこの機能、公式ドキュメントの内容をベースに、実際に使う上で知っておきたいポイントを整理してみます。
まずは動かしてみる
使い方はとてもシンプルです。/loop のあとにインターバルとプロンプトを書くだけ。
/loop 5m デプロイが完了したか確認して、結果を教えて
これで「5分ごとにデプロイの完了を確認して報告する」タスクが動き始めます。Claude が内部的に cron ジョブとして登録し、ジョブ ID と実行間隔を返してくれます。
インターバルは先頭でも末尾でもOKですし、省略するとデフォルトの10分になります。
/loop 30m ビルドの状態を確認して
/loop ビルドの状態を確認して every 2 hours
/loop ビルドの状態を確認して
単位は s(秒)、m(分)、h(時間)、d(日)。内部的に cron 式に変換されるので、秒は最も近い分に繰り上げ、7m のように割り切れない値は近いキリの良い間隔に丸められます。実際に何分間隔で設定されたかは Claude が教えてくれるので、細かいことは気にしなくて大丈夫です。
すでにスキルやコマンドとしてまとめているワークフローがあれば、それをループに載せることもできます。
/loop 20m /review-pr 1234
20分おきに PR レビューを走らせて、新しいコミットが追加されるたびにフィードバックを受け取る、なんて使い方も可能です。
「あとで思い出して」もいける
繰り返しではなく一回限りのリマインダーなら、/loop を使わずに自然言語でそのまま頼めます。
3時になったらリリースブランチを push するのをリマインドして
45分後にインテグレーションテストが通ったか確認して
Claude が時刻を cron 式に変換して単発タスクとして登録し、実行後は自動で削除してくれます。開発に没頭していると忘れがちなタスクを、さらっと仕掛けておけるのは地味に助かります。
タスクの確認とキャンセル
「今どんなタスクが動いてるんだっけ?」と思ったら、これも自然言語で聞けます。
スケジュールされているタスクを一覧表示して
デプロイチェックのジョブをキャンセルして
裏側では CronCreate(登録)、CronList(一覧)、CronDelete(削除)という3つのツールが動いています。各タスクには8文字の ID が振られていて、1セッションにつき最大50個まで登録可能です。とはいえ、普段使いで50個に達することはまずないでしょう。
使う前に知っておきたいクセ
便利な機能ですが、思った通りに動かないケースもあり得ます。仕組みを少し知っておくと「あれ?」と思ったときに落ち着いて対処できます。
タスクは「Claude の手が空いたとき」に動く
スケジュールタスクは、ユーザーとのやりとりの合間に実行されます。Claude がレスポンスを生成している最中には割り込みません。長い処理の途中で予定時刻が来ても、その処理が終わるまで待ってから実行されます。
つまり「ぴったり5分おき」ではなく「だいたい5分おき」くらいの温度感です。秒単位の精度が求められる用途には向きません。
実行タイミングに微妙なズレがある
API への同時アクセスを避けるため、実行時刻には小さなオフセット(ジッター)が自動で加わります。
- 繰り返しタスク:周期の最大10%(上限15分)の遅延
- 単発タスク:毎時0分や30分にスケジュールした場合、最大90秒早く実行されることがある
1時間ごとのジョブなら :00 から :06 のどこかで実行される、というイメージです。オフセットはタスク ID から決まるので、同じタスクなら毎回同じズレになります。
繰り返しタスクは3日で自動消滅する
設定したまま忘れたループが延々と走り続けないよう、繰り返しタスクには 3日間の有効期限 があります。最後にもう1回実行されてから自動削除される仕組みです。
3日以上走らせたいなら、期限切れ前にキャンセル→再作成するか、後述する別の方法を使う必要があります。
通知先はセッション内だけ
ここは要注意です。リマインダーやタスクの結果は、Claude Code のセッション内にメッセージとして表示されるだけです。Slack やメール、LINE などの外部サービスには通知されません。
「リマインドして」と頼んでも、Claude Code のウィンドウを見ていなければ気づけないということです。外部に通知を飛ばしたい場合は、プロンプト内でシェルコマンドや API 呼び出しを組み合わせるなど、自分で仕組みを用意する必要があります。
スケジュールタスクの限界
セッションスコープの仕組みなので、構造的な制約があります。
- セッション終了で消える — Claude Code を再起動すると、タスクはすべてクリアされます。ターミナルを閉じたりセッションが終了したりしても同様です
- 取りこぼしの補完はない — Claude が長時間処理中にタスクの予定時刻が過ぎた場合、アイドルになった時に1回だけ実行されます。過ぎた分がすべて実行されるわけではありません
つまり「Claude Code を開いて作業している間の、ちょっとした自動化」が守備範囲です。無人で動き続ける必要がある場合は、GitHub Actions の schedule トリガーや Desktop scheduled tasks を使うのが適切です。
逆に言えば、セッションスコープだからこそ「気軽に試せる」というメリットもあります。設定を間違えても、セッションを終了すれば綺麗に消えるので、cron を直接触るときのような「消し忘れが怖い」というプレッシャーがありません。
環境変数で無効化もできる
チームで使っていてセキュリティポリシー上 cron を許可したくない場合は、環境変数 CLAUDE_CODE_DISABLE_CRON=1 を設定するとスケジューラー全体を無効にできます。
実際に使えそうな場面
ここまでの内容を踏まえて、開発で活用できそうなパターンをいくつか挙げてみます。
デプロイ後のヘルスチェック
/loop 5m ステージング環境のデプロイが正常か確認して、エラーがあれば報告して
デプロイしたあと別の作業に移りつつ、問題があれば知らせてもらえます。
CI の完了待ち
30分後に CI パイプラインが通ったか確認して、結果をまとめて
CI が長いプロジェクトでは、完了見込み時刻あたりにワンショットで仕掛けておくのが便利です。
リリース前の忘れ物防止
5時になったらリリース前に changelog を更新するのをリマインドして
集中していると飛ばしがちなルーチンワークのリマインダーとして。
まとめ
Claude Code のスケジュールタスクは、「定期的に何かを確認する」「あとで思い出す」という、開発中の小さな煩わしさを手軽に解消してくれる機能です。
/loopでプロンプトを繰り返しスケジュール- 自然言語でワンショットリマインダーも設定可能
- セッションスコープなので気軽に使えて、終了時に自動クリーン
- 繰り返しタスクは3日で自動期限切れ
- 通知はセッション内のみ。外部通知には別途仕組みが必要
- 永続的なスケジューリングが必要なら GitHub Actions や Desktop scheduled tasks を
cron 式の詳細な書き方や内部ツールの仕様については公式ドキュメントが充実しているので、より深く知りたい方はそちらも参照してみてください。
まずは /loop 10m ビルドの状態を確認して のような軽いものから試してみると、この機能の手軽さが実感できると思います。