毎日同じ作業をClaude Codeに手で頼んでいると、いずれ「決まった時刻に、自分がいなくても勝手に回ってほしい」と思い始めます。定期レポートの生成、リポジトリの巡回チェック、情報収集の定点観測——このあたりは典型です。結論から言えば、Claude Codeの定期実行には3つの方式があり、完全に無人で回すならclaude -p(ヘッドレス実行)をcronやlaunchdに載せるのが基本です。編集部も、毎日決まった時刻にヘッドレスでスキルを呼び、記事の下書きを自動生成する仕組みをこの方式で運用しています。
この記事の要点
- 定期実行は3方式。①
/loop(セッション中だけ繰り返す)②Desktopスケジュール済みタスク(自分のマシンで無人実行)③Cloud Routines(Anthropicのクラウドで実行・マシン不要) - セッションを閉じても・マシンを消しても回したいなら、方式が変わる。
/loopはセッションスコープで、ターミナルを閉じると止まる - 完全無人の定番は
claude -p "プロンプト"をcron/launchd/タスクスケジューラで叩く方式。サブスク認証ならAPI課金なしで動く - 無人運用でつまずくのは主に4つ。①権限プロンプトで止まる②マシンの電源・スリープ③レート上限で途中終了④出力の検証と通知
- 止まらせない鍵は
--allowedToolsと権限モードで承認を先に済ませ、失敗時は黙って落ちず結果を通知すること
この記事では、3方式の違いと選び方、/loopの使い方、claude -pをOSスケジューラで無人化する手順、そして編集部が実運用でつまずいた落とし穴を、公式ドキュメントの仕様とコピペできるコマンドで書きます。サイト制作や自社ツールの自動化に落とすレシピまで踏み込みます。
Claude Codeの定期実行とは?無人でできることと3つの方式
Claude Codeの定期実行は、決まったスケジュールでプロンプトを自動的に実行させる仕組みです。デプロイの監視、PRのチェック、長時間ビルドの確認、そして記事やレポートの定期生成まで、人が画面の前にいなくてもClaudeに作業を進めさせられます。公式が用意している方式は3つで、「どこで動くか」「マシンやセッションが要るか」で使い分けます。まずは全体像を表で押さえます。
| Cloud(Routines) | Desktopスケジュール | /loop | |
|---|---|---|---|
| 実行される場所 | クラウド(Anthropic管理) | 自分のマシン | 自分のマシン |
| マシンの電源 | 不要 | 必要 | 必要 |
| 開いたセッション | 不要 | 不要 | 必要 |
| 再起動をまたぐ | する | する | --resumeで復元(期限内) |
| ローカルファイル | 不可(新規クローン) | 可 | 可 |
| 最小間隔 | 1時間 | 1分 | 1分 |
| 権限プロンプト | なし(自律実行) | タスクごとに設定可 | セッションを継承 |
3方式はどう選べばいいですか?
目安はシンプルです。マシンを消しても確実に回したい定期処理はCloud Routines、ローカルのファイルやツールに触る必要があるならDesktopスケジュール、セッションを開いている間の手早いポーリングなら/loopです。ただし後述するように、サブスク認証のまま自分のマシンで無人化したい場合は、これらとは別にclaude -pをOSスケジューラに載せる古典的な方式が使えます。編集部の記事自動生成はこのclaude -p方式です。
/loopでセッション中に繰り返す(最速の入り方)
/loopは、セッションが開いている間だけプロンプトを繰り返し実行する、いちばん手早い方法です。間隔とプロンプトの渡し方で挙動が変わります。
/loop 5m check if the deployment finished and tell me what happened
間隔を指定すると、Claudeがそれをcron式に変換して固定スケジュールで回します。単位は秒s・分m・時h・日dです。間隔を省くと、Claudeが各回の状況を見て1分〜1時間の遅延を自分で選びます(ビルドが動いている間は短く、静かなら長く)。
デフォルトのプロンプトはloop.mdで差し替える
プロンプトも間隔も省いて/loopだけを打つと、組み込みのメンテナンスプロンプトが動きます。これを自分の指示に置き換えるのがloop.mdです。.claude/loop.md(プロジェクト優先)か~/.claude/loop.mdに置くと、裸の/loopがその内容で回ります。編集は次の反復から反映されるので、走らせながら指示を直せます。
# .claude/loop.md
release/next のPRを確認する。CIが赤ければ失敗ログを取得し、
原因を診断して最小の修正をpushする。新しいレビューコメントがあれば
各対応してスレッドを解決する。全部グリーンで静かなら一行でそう報告する。
/loopはなぜ無人運用に向かないのですか?
/loopはセッションスコープだからです。タスクは今の会話にだけ存在し、ターミナルを閉じるかセッションを終了すると止まります。新しい会話を始めると全部クリアされ、claude --resumeや--continueで再開したときに、7日以内に作られた未期限のものだけが復元されます。定期タスク自体も作成から7日で自動失効します。見落とした実行のキャッチアップも無く、期限が過ぎた分はまとめて1回だけ実行されます。つまり/loopは「セッションを開けている間の相棒」であって、無人の定期バッチではありません。公式も、無人のcron駆動にはRoutinesやDesktopスケジュールなど、セッションに依存しない方式を使うよう案内しています。
完全無人で回すなら claude -p とOSスケジューラ
自分のマシンで、セッションもターミナルも開かずに定期実行したい——このときの定番が、ヘッドレス実行claude -pをcron(Linux/macOS)やlaunchd(macOS)、タスクスケジューラ(Windows)に載せる方式です。サブスク認証で動かせばAPI課金は発生しません。まずは基本形です。
claude -p "auth.py のバグを見つけて直して" --allowedTools "Read,Edit,Bash"
-p(--print)を付けると非対話モードになり、プロンプトを実行して結果を標準出力に返します。ここで要になるのが--allowedToolsで、これを渡しておかないと、Claudeがツールを使うたびに承認待ちで止まります。人がいない実行では、この停止が「動かない」の最大の原因です。
権限は先に通す(–allowedToolsと権限モード)
承認を先に済ませる方法は2つあります。1つは個別のツールを列挙する--allowedToolsで、権限ルール構文が使えます。末尾の *でプレフィックス一致になります。
claude -p "ステージした変更を見て適切なコミットを作って" \
--allowedTools "Bash(git diff *),Bash(git log *),Bash(git status *),Bash(git commit *)"
もう1つは権限モードをまとめて渡す方法です。--permission-mode acceptEditsはファイル書き込みとmkdir・mv・cpなどを自動承認します。CIのようにロックダウンしたいならdontAskを使うと、permissions.allowルールか読み取り専用コマンドに無いものはすべて拒否されます。安全側に倒すなら、必要なコマンドだけ--allowedToolsで通すのが確実です。
claude -p "lintの修正を適用して" --permission-mode acceptEdits
スクリプト用に–bareで軽く起動する
--bareを付けると、hooks・skills・plugins・MCPサーバー・auto memory・CLAUDE.mdの自動読み込みをスキップして起動が速くなります。どのマシンでも同じ結果が要るcronやスクリプトに向きます。ただしOAuthとキーチェーン読み取りもスキップするため、認証はANTHROPIC_API_KEYか--settingsのJSONに渡すapiKeyHelperから取る必要があります。逆に、サブスク認証のまま回したいなら--bareは付けず、通常のclaude -pでログイン済みの認証を継承させます。
launchd/cronに載せる
cronでの登録例
あとはOSのスケジューラに登録するだけです。Linuxやサーバーならcron、macOSならlaunchdが安定します。cronの例は次のとおりです(毎日正午に実行し、ログを残す)。
# crontab -e に追記(毎日12:00)
0 12 * * * cd ~/work/report && /usr/local/bin/claude -p "今日の日次レポートを作成して report.md に書き出して" --allowedTools "Read,Edit,Bash" >> ~/cron-claude.log 2>&1
出力を--output-format jsonにすると、応答にtotal_cost_usdやセッションIDが入るので、jqで結果や実費を取り出してログ管理できます。
claude -p "このプロジェクトを要約して" --output-format json | jq -r '.result'
無人運用でつまずく4つの落とし穴
ここは編集部がclaude -pの定期実行を組んだときに実際に踏んだ箇所です。無人化は「動かす」より「止まらせない・黙って落ちない」ほうが難しく、つまずくのはだいたい次の4つでした。症状と打ち手を表にします。
| 症状 | 起こっていること | 打ち手 |
|---|---|---|
| 実行が始まるが何も進まない | ツール承認プロンプトで待機している | --allowedToolsか--permission-modeで必要な権限を先に通す |
| 決まった時刻に走らない | マシンがスリープ/電源オフ、またはセッションが閉じている | 電源接続を前提にする。/loopでなくlaunchd/cron/Routinesに移す |
| 途中で止まって結果が無い | 使用量・レート上限に当たって中断した | 失敗時に黙って落とさず、途中結果を通知する。再試行や時間帯の分散を入れる |
| 回っているが結果が信用できない | 出力の検証と記録が無い | --output-format jsonで結果とコストを記録し、成否を通知する |
レート上限では黙って落とさない
いちばん厄介なのがレート上限です。--output-format stream-jsonで回すと、再試行の前にsystem/api_retryイベントが飛び、errorフィールドにrate_limitやoverloadedなどのカテゴリが入ります。これを拾えば、上限に当たったのか一時的な過負荷なのかを切り分けられます。無人運用の鉄則は、詰まったら途中までの結果を必ず通知してから終えることです。黙って落ちると、翌朝まで失敗に気づけません。使用量上限まわりの挙動は使用量上限で自動再開する設定もあわせて押さえておくと安全です。権限モードの全体像は権限モード完全ガイドにまとめています。
サイト制作・自社ツール開発での定期実行レシピ
ここからは、定期実行を実務に落とすレシピを、コピペできる粒度で挙げます。題材は編集部の実務に近い、サイト/LP制作の運用と、効率化のための自社ツール開発です。
① 毎日のレポート・原稿を無人で下書き生成する
スキルは/skill名でプロンプトに渡す
編集部の記事自動生成を汎用化すると、次の形になります。決まった時刻にヘッドレスでスキルを呼び、成果物をファイルに書き出し、結果を通知するだけです。スキルはclaude -pのプロンプト文字列に/skill-nameを含めれば展開されて実行されます。
# launchd/cronから毎朝実行
claude -p "/daily-report 今日の進捗をまとめて report-$(date +%F).md に書き出して" \
--allowedTools "Read,Edit,Bash" \
--output-format json > /tmp/claude-out.json
# 結果とコストを取り出して通知に回す
jq -r '.result, .total_cost_usd' /tmp/claude-out.json
② サイトの定点QA(リンク切れ・崩れの巡回チェック)
取得済みデータはパイプで渡す
公開中のサイトを毎晩巡回し、リンク切れや明らかな崩れを洗い出す用途にも向きます。取得したHTMLやログをclaude -pにパイプすれば、Claude側に読み取り権限を与えずに診断だけさせられます。パイプの標準入力は10MBまでなので、大きい入力はファイルに書いてパスを渡します。
cat crawl-result.txt | claude -p "このクロール結果からリンク切れと重大な崩れだけを filename:line 形式で列挙して"
③ 情報収集の定点観測
競合の公開ドキュメントや変更履歴を定期的に読み、差分だけを要約させる使い方もできます。日次で回すなら、前回分との差分を渡して「新しく変わった点だけ」を出させると、通知が短く保てます。自作エージェントで複数ソースを束ねたいときは、workflowとサブエージェントの使い分けもあわせて検討すると設計しやすくなります。
Cloud RoutinesとDesktopスケジュール、どちらを選ぶか
claude -p方式が自分のマシン前提なのに対し、マシンを消しても回したいならCloud Routinesが答えです。Routinesはクラウドで自律実行するため、マシンの電源もセッションも要りません。ただしローカルファイルには触れず、実行のたびに新規クローンから始まります。逆に、手元のリポジトリやローカルツールに触る必要があるならDesktopスケジュール済みタスクが向きます。/loopはあくまでセッション中のポーリング用です。定期タスクの管理は自然言語でClaudeに頼めます(「今あるスケジュールタスクは?」「deployチェックのジョブをキャンセルして」)。内部的にはCronCreate・CronList・CronDeleteが使われ、1セッションで最大50件まで持てます。スケジューラ全体を止めたいときは環境変数CLAUDE_CODE_DISABLE_CRON=1を設定します。
従来の自動化と何が変わるのか
これまでAIを定期実行に組み込むには、APIキーを取り、モデルを直接叩くスクリプトを自分で書き、ツール実行やファイル操作のロジックも自前で用意する必要がありました。Claude Codeの定期実行は、その多くを肩代わりします。違いを表で整理します。
| 項目 | 従来(API直叩き+自前スクリプト) | Claude Codeの定期実行 | 実務での意味 |
|---|---|---|---|
| 課金 | APIトークン課金が前提 | サブスク認証ならAPI課金なしでclaude -p可 |
個人の定期処理を低コストで回せる |
| ツール実行 | 関数呼び出しを自分で実装 | ファイル・Bash・MCPを標準装備 | 「読んで直してコミット」まで1コマンド |
| 権限管理 | コード側で都度ガード | --allowedTools・権限モードで宣言 |
無人でも承認待ちで止めない設計にできる |
| スケジュール | cronを自分で管理 | /loop・Desktop・Cloud Routinesを選べる |
マシンの有無で方式を切り替えられる |
この差から、「毎日決まった作業をAIに任せる」までの距離が大きく縮むと想定されます。従来は自動化の仕組みそのものを作るのが仕事でしたが、いまは既存のスキルやプロンプトを、そのままスケジューラに載せるだけで動きます。※実費や所要時間は運用するプロンプトとモデルで変わるため、実測して確かめてください。
よくある質問(FAQ)
Claude Codeの定期実行にAPI料金はかかりますか?
方式によります。claude -pをサブスク認証のまま回す場合、API課金は発生せず、サブスクの使用量に計上されます。一方--bareでANTHROPIC_API_KEYを使う構成では、そのAPIキーの従量課金になります。
マシンを閉じても定期実行できますか?
できます。ただし方式が限られます。マシンの電源やセッションが不要なのはCloud Routinesだけです。/loopはセッションを閉じると止まり、claude -p+cron/launchdやDesktopスケジュールはマシンが起動している必要があります。
無人実行でClaudeが承認待ちで止まらないようにするには?
--allowedToolsで使うツールを先に列挙するか、--permission-mode acceptEditsのような権限モードを渡します。ロックダウンしたいならdontAskで、許可ルールに無いものを一律拒否できます。人がいない実行では、この事前承認が最重要です。
/loopで設定した定期タスクはどのくらい続きますか?
固定間隔のループは、止めるか7日が経過するまで続きます。定期タスクは作成から7日で自動失効し、最後に1回だけ実行して自分を削除します。長く続けたいなら期限前に作り直すか、Routinesやデスクトップスケジュールを使います。
レート上限に当たったときの挙動は?
--output-format stream-jsonで回すと、再試行前にsystem/api_retryイベントが飛び、errorにrate_limitなどのカテゴリが入ります。これを拾って、途中結果を通知してから終える設計にしておくと、失敗に翌朝まで気づけない事態を防げます。
定期実行を含む編集部の無人運用の全体像はClaude Code活用事例|毎日回している自動化7選で紹介しています。
まとめ:まず/loopで感触をつかみ、無人化はclaude -pへ
Claude Codeの定期実行は、「マシンやセッションを開けておけるか」で方式が決まります。まずはセッション中に/loopを1本回して、決まった間隔でClaudeが動く感触をつかむのが手堅い入り方です。そのうえで、自分のマシンで無人化するならclaude -pを--allowedTools付きでcronやlaunchdに載せ、マシンを消しても回したいならCloud Routinesへ移します。無人運用で成否を分けるのは派手な仕組みより、承認を先に通し、詰まったら黙って落ちずに通知する、という地味な設計です。権限の全体像は権限モード完全ガイド、複数エージェントの束ね方はworkflowとサブエージェントの使い分けで整理しています。
出典:Claude Code 公式ドキュメント「スケジュールに従ってプロンプトを実行する」「Claude Code をプログラムで実行する(headless)」(code.claude.com/docs、2026年9月時点)