
こんにちは。よっしーです(^^)
背景
この連載では、Claude Codeの公式ドキュメントを1ページずつ読み解いていきます。公式ドキュメントは情報が網羅されている分、「結局どの機能を、どんな場面で使えばいいのか」は自分で考える必要があり、読むのに意外と時間がかかります。そこで、私が実務で使うために読み込んだ内容を「使う場面→実例コード」の順に整理して残していくことにしました。専門家の解説というより、一次情報を読んだ記録です。推測や動作を確認していない部分には、その都度そう書きます。
一言でいうと何か
Claude Code のセッション内で、プロンプトを一定間隔で自動的に再実行したり、1回限りのリマインダーを仕込んだりする仕組みです。デプロイのポーリング、PR の監視、長時間ビルドのチェックバック、後で何かを実行するリマインダーなどに使います。中心は /loop コマンドと cron スケジューリングツールです。重要な前提として、これらのタスクは「セッションスコープ」で、現在の会話に紐づき、新しい会話を始めると消えます(--resume/--continue での再開時に、有効期限内なら復元されます)。
どういう場面で役立つか
セッション中に、状態が変わるものを繰り返しチェックしたいとき。「デプロイが終わったか」「CI が通ったか」「PR に新しいレビューコメントが来ていないか」を一定間隔で見に行かせられます。
未完了作業やメンテナンスを回し続けたいとき。裸の /loop は、会話の未完了作業の継続・現在ブランチの PR 処理(レビューコメント/失敗した CI/マージコンフリクト)・他に無ければバグハントや簡素化のクリーンアップ、を組み込みプロンプトとして実行します。
セッション内で「後で1回だけ」やらせたいとき。自然文でリマインダーを頼めば、実行後に自分を削除する単発タスクが作られます。
不要・向かないケース:セッションスコープなので、ターミナルを閉じたりセッションを終えたりするとタスクは止まります。マシンやセッションに依存せず確実に回したいなら、クラウドの Routines、Desktop スケジュール済みタスク、GitHub Actions を使います。見落とした実行の間隔ごとのキャッチアップは無く、ビジー中に時刻が過ぎたらアイドル時に1回だけ実行されます。定期ポーリングではなくイベント発生に反応したいなら Channels、条件を満たすまで間隔ではなくターンごとに動き続けさせたいなら /goal が向きます。
/loop・リマインダー・管理の実例
/loop の3つの形
/loop はバンドルスキルで、渡す内容によって挙動が決まります。間隔もプロンプトも任意で、両方渡せば固定スケジュール、プロンプトだけなら Claude が毎回間隔を選ぶ動的スケジュール、間隔だけ/何も無しなら組み込みメンテナンスプロンプト(または存在すれば loop.md)が走ります。スキルをプロンプトとして渡すこともでき、/loop 20m /review-pr 1234 は各反復でそのスキルを再実行します(v2.1.196 以降、スケジュール実行は Claude が自分で呼べるスキルのみを実行し、組み込みコマンドや保留されたスキル・MCP プロンプトはプレーンテキストとして届き実行されません)。
固定間隔は、間隔を指定すると Claude がそれを cron 式に変換してスケジュールします。
/loop 5m check if the deployment finished and tell me what happened
間隔は 30m のように裸のトークンでプロンプト前に置くか、every 2 hours のように句でプロンプト後に置きます。単位は秒 s・分 m・時 h・日 d で、cron は1分粒度のため秒は最も近い分に切り上げられ、7m や 90m のようにきれいな cron ステップに載らない間隔は最も近い間隔に丸められて Claude が通知します。
間隔を省くと、Claude が動的に間隔を選びます。
/loop check whether CI passed and address any review comments
各反復のあと、観察内容に基づいて1分〜1時間の遅延を選び(ビルド進行中や PR が動いている間は短く、保留が無ければ長く)、選んだ遅延と理由を反復の最後に出力します。動的スケジュールでは、Claude が Monitor ツール(バックグラウンドスクリプトを実行し各出力行をストリーミングする)を直接使うことがあり、ポーリング自体を避けられてトークン効率・応答性が高くなる場合があります。
プロンプトを省くと組み込みメンテナンスプロンプトが使われます。
/loop
裸の /loop はこのプロンプトを動的間隔で実行し(/loop 15m のように間隔を足すと固定スケジュール)、その範囲外の新規イニシアチブは始めず、プッシュや削除など取り消せないアクションはトランスクリプトが既に承認済みのものの継続時のみ進めます。
loop.md で既定プロンプトを差し替える
loop.md は組み込みメンテナンスプロンプトを独自指示に置き換えるファイルで、裸の /loop の単一デフォルトを定義します(コマンドラインでプロンプトを指定したときは無視されます)。.claude/loop.md(プロジェクト、優先)か ~/.claude/loop.md(ユーザー)に置き、最初に見つかったものが使われます。構造の決まりは無く、/loop のプロンプトを直接書く感覚で書きます。
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.
編集は次の反復で有効になるため実行中に指示を改善でき、どちらにも無ければ組み込みプロンプトにフォールバックします。25,000 バイトを超える内容は切り詰められます。
ループの停止
次の反復を待っている間に止めるには Esc を押します(保留中のウェイクアップがクリアされる)。ただし Claude に直接頼んでスケジュールしたタスクは Esc の影響を受けず、削除するまで残ります。動的(自分のペース)モードでは、Claude がタスク完了時に ScheduleWakeup を stop: true で呼んで自分でループを終えることもあり、反復が再スケジュールも停止もせず終わった場合は約20分後のフォールバックウェイクアップで終了します。固定間隔のループは、停止するか7日経過するまで走り続けます。
1回限りのリマインダー
単発なら /loop ではなく自然文で頼みます。Claude が実行後に自身を削除する単発タスクをスケジュールします。
remind me at 3pm to push the release branch
in 45 minutes, check whether the integration tests passed のような相対指定もでき、Claude は cron 式で発火時刻を特定の分・時に固定して確認します。
タスクの管理
タスクの一覧・キャンセルは自然文で頼めます。
what scheduled tasks do I have?
cancel the deploy check job のように依頼できます。内部的には CronCreate(5フィールド cron 式・プロンプト・繰り返し/1回を受け取り新規作成)、CronList(ID・スケジュール・プロンプトの一覧)、CronDelete(ID でキャンセル)を使います。各タスクには 8 文字の ID があり、1セッションで最大 50 個まで保持できます。
実行の仕組みと注意点
スケジューラは毎秒期限切れタスクを確認し、低優先度でキューに入れます。スケジュールされたプロンプトは応答の途中ではなくターン間で実行され、期限時に Claude がビジーなら現在ターンの終了まで待ちます。時刻はすべてローカルタイムゾーン解釈で、0 9 * * * は UTC でなく実行地の午前9時です。全セッションが同一時刻に API を叩くのを避けるためジッター(タスク ID 由来の決定的オフセット)が入り、定期タスクは最大30分後(1時間より短い間隔なら間隔の最大半分)、時刻ちょうどの単発は最大90秒早く実行されます。正確なタイミングが要る場合は :00/:30 以外の分(例 3 9 * * *)を選ぶと単発ジッターが適用されません。定期タスクは作成後7日で自動失効し(最後に1回実行して自分を削除)、より長く続けるなら Routines や Desktop タスクを使います。cron 式は標準5フィールドで、*・単一値・ステップ */15・範囲 1-5・リスト 1,15,30 をサポートし、曜日は日曜が 0 か 7・土曜が 6、L/W/? や MON/JAN の名前エイリアスは非対応です(月日と曜日の両方を制約するとどちらか一致で発火=vixie-cron 準拠)。cron 例の一覧は公式ページを参照してください。スケジューラ全体を止めるには環境変数 CLAUDE_CODE_DISABLE_CRON=1 を設定します(cron ツールと /loop が使えなくなり、既存タスクも停止)。
まとめ
/loop とセッション内スケジューリングは、開いているセッションの中でプロンプトを繰り返し実行したり、1回限りのリマインダーを仕込んだりする仕組みです。/loop は「間隔+プロンプト=固定」「プロンプトのみ=Claude が動的に間隔選択」「省略=組み込みメンテナンス(または loop.md)」の3形態で、停止は Esc、管理は自然文か CronCreate/CronList/CronDelete、時刻はローカル解釈でジッターと7日失効が効きます。セッションスコープゆえターミナルを閉じると止まり、見落としの間隔ごとキャッチアップも無いため、無人・永続で回すなら Routines・GitHub Actions・Desktop スケジュール済みタスクを使う、という住み分けが要点です。
次回は、無人 cron 駆動の対になる GitHub Actions(/docs/ja/github-actions)や、関連する /goal・Channels などの未執筆ページ、あるいは長く保留している引き継ぎ課題(第5回欠番の補完・第1/2回の照合)に着手する予定です。
この記事は執筆時点の公式ドキュメントに基づいています。最新の情報は必ず公式ドキュメントをご確認ください。

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)

コメント