公開日: 最終更新:
執筆・編集:株式会社Nexa 編集部(下書きと機械検査はAI、公開前に人が確認)/約18分で読めます。公式ドキュメント・公式発表などの一次情報を確認したうえで執筆・更新しています。AIツールの仕様や料金は変わることがあるため、導入判断の前に各公式サイトの最新情報もご確認ください。記事の作り方と検査の方針
OpenClawのcronジョブを設定すると、毎日のレポート送信・Slack通知・データ取得などをClaude Codeが完全自動で実行します。
- 要点1:
openclaw cronコマンド(別名openclaw automations)でcron式・スキル名・配信先を設定するだけで定期実行が完成する - 要点2: GA4レポート・Googleカレンダー通知・SEOレポートなど業務直結の自動化が即実現できる
- 要点3: Slack通知の不配信・同時実行クラッシュは設定変更で解消できる
対象: OpenClawを導入済みで、毎日の定期タスクを自動化したい経営者・業務担当者
今日やること: openclaw cron addで最初のcronジョブを1つ登録し、テスト実行で動作を確認する
本記事の内容は、OpenClaw公式ドキュメント(docs.openclaw.ai)を2026年10月7日に確認して執筆しています。
OpenClawのcronジョブを設定することで、毎日の定型業務をClaude Codeが自動で処理します。GA4のアクセスレポートを毎朝Slackに送信したり、Googleカレンダーから今日の予定を取り出してDM通知したりと、「毎日手作業でやっていたこと」を完全に自動化できます。
「設定が難しそう」と思われがちですが、実際にはopenclaw cronコマンド(エイリアスのopenclaw automationsでも同じ)でジョブを登録するだけで動きます。この記事では、実際に構築・運用した複数のcronジョブ事例をもとに、設定方法からトラブル対処まで一気通貫で解説します。
OpenClawのcronジョブとは?まず全体像を把握する
OpenClawのcronジョブとは、「決まった時刻にClaude Codeに特定の指示を出して自動実行させる仕組み」です。macOSやLinuxに標準搭載されているシステムのcrontabとは異なり、OpenClawのcronはClaude AIによるタスク実行に特化しています。
cronジョブが解決する「毎日の手作業」問題
ビジネスの現場では、毎日繰り返す定型業務が積み重なっています。
- GA4やSearch Consoleのデータを手動で確認してレポート作成
- Googleカレンダーを開いて今日のミーティングを確認
- 問い合わせメールをチェックして重要なものを抽出
- 競合サイトの更新状況を確認
これらはすべて、OpenClawのcronジョブで自動化できます。Claude Codeがスキルや外部APIを駆使してタスクを処理し、結果をSlackに自動送信します。1つのジョブを設定するのに必要な時間はおよそ5〜10分です。
OpenClawにおけるcronジョブの動作原理
OpenClawのcronジョブは以下の流れで動作します。
- Gatewayプロセスが登録済みジョブ(現在はSQLiteの状態データベースで管理)を定期的にチェックし、実行タイミングを監視する
- 設定時刻になると、GatewayがClaude CLIプロセスを起動する
- Claude CLIが指定されたスキルや指示を実行する
- 実行結果をSlackなどの配信先に送信する
ジョブの設定は、現在のバージョンではGatewayが管理するSQLiteの状態データベースに保存されます。以前のバージョンで使われていた ~/.openclaw/cron/jobs.json を直接編集する方式(cron.store)は廃止されており、openclaw automations add などのCLIコマンドまたはGateway API経由で登録します。OpenClawゲートウェイを再起動しても設定は消えないため、一度登録すれば毎日自動で動き続けます。
なお、OpenClawとは、Anthropic社のClaude CodeをSlack等のメッセージングツールから常時利用できるようにするエージェントフレームワークです。Claude Codeをインストールした環境にOpenClawを導入し、ゲートウェイプロセスを立ち上げることで利用できます。(OpenClawのセットアップ方法はこちら →)
cronジョブの設定項目とCLIコマンドを理解する
OpenClawのcronジョブは、コマンドとしては openclaw cron で登録されており、openclaw automations はそのエイリアス(別名)です。公式ドキュメントでは読みやすさのため「Automations」という表記も使われています。openclaw cron add(または openclaw automations add)で登録した内容は、Gatewayの状態データベースで管理されます。旧バージョンで使われていた ~/.openclaw/cron/jobs.json を直接編集する方式は非推奨となり、ジョブ管理用のストア(cron.store)自体が廃止されています。ここでは、CLIで指定する主な設定項目を、分かりやすいJSON形式で示します。
最小構成の設定内容(JSON表現)
以下は、最もシンプルなcronジョブに含まれる設定項目をJSON形式で示したものです(CLIで openclaw automations add を実行すると、内部的にこれに相当する情報が登録されます)。
{
"jobs": [
{
"id": "daily-report",
"enabled": true,
"schedule": {
"cron": "0 9 * * *"
},
"task": {
"prompt": "ga4-seo-reportスキルを実行してください",
"skillFile": "~/.claude/skills/ga4-seo-report/SKILL.md",
"model": "sonnet"
},
"delivery": {
"mode": "none",
"channel": "slack",
"to": "channel:C0DDDDDDDDD"
},
"sessionTarget": "isolated",
"timeout": 300
}
]
}
各フィールドの意味を確認しておきましょう。
| フィールド | 説明 |
|---|---|
id |
ジョブを識別する一意のID(英数字・ハイフン) |
enabled |
trueで有効、falseで一時停止 |
schedule.cron |
cron式でスケジュールを指定 |
task.prompt |
Claude Codeへの指示文 |
task.skillFile |
実行するスキルファイルのパス(任意) |
task.model |
使用するモデル(sonnet/haiku等) |
delivery.mode |
none推奨(詳細は後述) |
delivery.to |
配信先チャンネルまたはユーザー |
sessionTarget |
isolated(独立セッション)推奨 |
timeout |
タイムアウト秒数(デフォルト300秒) |
スケジュール形式3種類の使い分け
OpenClawは、基本の3つのスケジュール形式に加えて、コマンドの終了を検知する「on-exit」、ログ出力を監視する「stream」という高度な形式にも対応しています。ここでは基本の3種類を解説します。
① cron式(標準cron)
"schedule": { "cron": "0 9 * * *" }
「毎日9:00に実行」などの繰り返しスケジュールに使います。分 時 日 月 曜日 の順に記述します。
| cron式 | 意味 |
|---|---|
0 9 * * * |
毎日9:00 |
30 7 * * 1-5 |
平日7:30 |
0 9 * * 1 |
毎週月曜9:00 |
45 9 * * * |
毎日9:45 |
② every(間隔指定)
"schedule": { "every": "1h" }
「1時間ごと」など一定間隔で繰り返す場合に使います。1h、30m、7d などの形式で指定します。
③ at(一回限り)
"schedule": { "at": "2026-04-01T09:00:00+09:00" }
特定の日時に一度だけ実行する場合に使います。キャンペーン開始日の通知などに活用できます。
セッション設定(isolated推奨)とdelivery設定
sessionTarget: "isolated" は、毎回クリーンな状態でClaude Codeを起動する設定です。前回の会話履歴が混入せず、ジョブが安定して動作するため、ほぼすべてのcronジョブにisolatedを使うことをおすすめします。
delivery.mode は "none" を推奨します。"announce" という配信モードも存在しますが、特定の条件でSlack通知が届かないバグが確認されています。代わりに、スキルやプロンプト内でClaude Codeが直接Slack APIを呼び出す方式のほうが確実です(詳細は後述)。
実践:3種類のcronジョブを設定してみる
実際に構築した3つのcronジョブ事例を紹介します。それぞれ openclaw cron add(別名 openclaw automations add)コマンドで追加します。~/.openclaw/cron/jobs.json を直接編集する方式は、現在のバージョンでは非推奨です(cron.store は廃止済み)。
事例1 — 毎日9:45にGA4レポートをSlackに自動送信
あるメディアサイトの運営で、毎日のGA4アクセスデータをSlackに自動報告するcronジョブを設定しました。設定後は毎朝9:45に前日の流入数・PV・エンゲージ率がSlackに届きます。
{
"id": "ga4-seo-report",
"enabled": true,
"schedule": { "cron": "45 9 * * *" },
"task": {
"prompt": "ga4-seo-reportスキルを実行して、結果をSlackの#seoチャンネルに投稿してください",
"skillFile": "~/.claude/skills/ga4-seo-report/SKILL.md",
"model": "sonnet"
},
"delivery": { "mode": "none" },
"sessionTarget": "isolated",
"timeout": 600
}
ポイントは timeout を600秒(10分)に延長している点です。GA4のAPIデータ取得とレポート生成には時間がかかるため、デフォルトの300秒では途中でタイムアウトしてしまう場合があります。
事例2 — 毎朝7:30にGoogleカレンダーの今日の予定をDM通知
gogcli(Google Workspace CLI)を使って今日のGoogleカレンダー予定を取得し、Slack DMで通知するジョブです。毎朝PC起動前に予定一覧が届くため、準備漏れを防げます。
{
"id": "daily-calendar-notify",
"enabled": true,
"schedule": { "cron": "30 7 * * *" },
"task": {
"prompt": "gogcliで今日のGoogleカレンダーの予定を取得して、時間・予定名・場所をSlack DMで送信してください。予定がない場合は「今日の予定はありません」と送信してください",
"model": "haiku"
},
"delivery": { "mode": "none" },
"sessionTarget": "isolated",
"timeout": 120
}
このジョブは model: "haiku" を使用しています。カレンダー取得・整形・DM送信という単純なタスクにsonnetを使うとコスト過多になるため、軽量モデルで十分です。
事例3 — Search Consoleのデータをもとに毎週月曜にSEO改善提案
毎週月曜の朝にSearch ConsoleのデータとGA4データを取得して、リライト優先度の高い記事リストをSlackに送信するジョブです。週次で改善アクションを自動提案してくれます。
{
"id": "weekly-seo-report",
"enabled": true,
"schedule": { "cron": "0 8 * * 1" },
"task": {
"prompt": "seo-improvementスキルを実行して、今週改善すべき記事TOP5をSlackの#seoチャンネルに投稿してください",
"skillFile": "~/.claude/skills/seo-improvement/SKILL.md",
"model": "sonnet"
},
"delivery": { "mode": "none" },
"sessionTarget": "isolated",
"timeout": 900
}
AI導入に関するお困りごとは、株式会社NexaのAI顧問がサポートします。「何から始めればいいか分からない」という段階からご相談いただけます。
cronジョブのSlack通知が届かないときの対処法
OpenClawのcronジョブで最もよく遭遇するトラブルが「ジョブは実行されているのにSlackに通知が届かない」問題です。
announce配信のバグとchannel/user_not_foundエラー
OpenClawのcron配信には delivery.mode: "announce" というモードがあります。これは、エージェントが自分でメッセージを送らなかった場合に、最終的な出力テキストを配信先へ自動でフォールバック送信する仕組みです。運用してみると、配信先の設定不整合によって channel_not_found や user_not_found というエラーが発生し、通知が届かないケースがありました。
jobs.jsonの lastDeliveryStatus フィールドで確認できます。
"lastDeliveryStatus": "not-delivered",
"lastDeliveryError": "channel_not_found"
このエラーは、OpenClawゲートウェイのSlack連携設定とjobs.jsonの配信先設定の間に不整合が生じることで発生します。
delivery.mode: noneに変更してエージェント内でSlack APIを直接呼び出す
確実に機能する回避策として、delivery.mode: "none" に変更し、プロンプト内でClaude Codeが直接Slack APIを呼び出す方式をおすすめします。
{
"task": {
"prompt": "ga4-seo-reportスキルを実行して、結果を以下のcurlコマンドでSlackに送信してください。\ncurl -X POST -H 'Authorization: Bearer $SLACK_BOT_TOKEN' -H 'Content-type: application/json' --data '{\"channel\":\"C0DDDDDDDDD\",\"text\":\"[レポート内容]\"}' https://slack.com/api/chat.postMessage"
},
"delivery": { "mode": "none" }
}
または、スキルファイル内にSlack API呼び出しを組み込むことで、プロンプトをシンプルに保てます。
ポイントOpenClawのSlackトークンは
~/.openclaw/openclaw.jsonに保存されています。スキルやプロンプトから参照する場合は、セキュリティに注意してください。macOS Keychainに保存してsecurity find-generic-passwordで取得する方式が安全です。
cronジョブが同時に実行されると失敗する問題を解決する
複数のcronジョブを同時間帯に集中させると、ジョブが無応答のままタイムアウトすることがあります。
同時実行クラッシュが起きるメカニズム
OpenClawのcronジョブとSlack経由の手動操作は、裏側で同じClaude CLI(/Users/your-username/.local/bin/claude)とAnthropic APIを共有しています。レーン(cron用・Slack対話用)は設計上分離されていますが、最終的に呼び出されるAPIは同一です。
複数のジョブが同時に動くと、APIリクエストが集中してレートリミットに達し、CLIが応答を返さないまま強制終了されます。
以下は実際に発生したタイムアウトの比較です。
| ジョブ | 通常の実行時間 | 集中時の挙動 |
|---|---|---|
| daily-calendar-notify | 約15秒 | 120秒でタイムアウト(上限で強制終了) |
| ga4-seo-report | 約87秒 | 600秒でタイムアウト(応答なし) |
| weekly-seo-report | 約46秒 | 900秒でタイムアウト(応答なし) |
スケジュール分散で解決する具体的な設定例
解決策は単純です。ジョブのスケジュールを30分以上分散させることです。
修正前(全部9:00集中)
9:00 - daily-calendar-notify
9:00 - ga4-seo-report
9:00 - seo-improvement
修正後(30分間隔で分散)
7:00 - ai-coaching-check(軽量タスク)
7:30 - daily-calendar-notify
8:00 - info-hub-update
8:30 - info-hub-status
9:30 - seo-improvement
9:45 - ga4-seo-report
openclaw cron edit コマンドでスケジュールを変更できます。
openclaw cron edit daily-calendar-notify --cron "30 7 * * *"
また、朝のcron実行時間帯(7:00〜10:00頃)はSlackからの連続的な手動操作を控えると、さらに安定して動作します。
なお、最近のOpenClawには、分が0固定で時だけワイルドカードのcron式(0 * * * * のような毎時0分実行)を自動的に最大5分の範囲でずらす「自動分散(stagger)」機能が搭載されています。完全に重ならないよう手動で30分以上離すのが引き続き確実な対策ですが、うっかり同じ時刻のジョブを複数登録してしまった場合の保険にもなります。
cronジョブの動作確認・デバッグ方法
設定後は必ず動作確認を行いましょう。
CLIコマンドでのテスト実行
ジョブを今すぐテスト実行したい場合は、openclaw automations run コマンドを使います。ジョブIDを指定すると、スケジュールを待たずにその場で1回だけ動かせます。
openclaw automations run <job-id> --wait --wait-timeout 10m
--wait を付けると実行完了まで待機し、結果をその場で確認できます。jobs.jsonを直接書き換えて次回実行時刻を早める旧来の方法は、現在のバージョンでは推奨されません。
ログファイルで実行結果を確認する方法
実行結果は以下のログファイルに記録されます。
# 実行ログ(当日分)
cat ~/.openclaw/logs/gateway.log
# または日付付きのログファイル
cat /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log
ログ内の以下のフィールドでジョブの状態を確認できます。
| フィールド | 内容 |
|---|---|
lastRunStatus |
ok(成功)またはtimeout(タイムアウト) |
lastRunAt |
前回の実行時刻(ISO8601形式) |
lastDeliveryStatus |
delivered(配信成功)またはnot-delivered |
runningAtMs |
現在実行中の場合はタイムスタンプが入る |
openclaw cron listで現在のジョブ状態を確認
CLIコマンドで全ジョブの状態を一覧表示できます。
openclaw cron list
各ジョブの有効・無効状態、前回の実行結果、次回実行予定時刻がテーブル形式で確認できます。
\ AI活用の「次の一手」を一緒に考えませんか /
AI顧問の無料相談はこちらよくある質問
Q. OpenClawのcronジョブはどこに保存されますか?
現在のバージョンでは、Gatewayが管理するSQLiteの状態データベースに保存されます。以前のバージョンで使われていた ~/.openclaw/cron/jobs.json を直接編集する方式(cron.store)は廃止されており、ジョブの登録・変更は openclaw cron(別名 openclaw automations)コマンド(公式CLIリファレンス)またはGateway API経由で行います。ゲートウェイを再起動しても設定は消えないため、一度登録すれば永続的に有効です。
Q. cron式・every・atの3つはどう使い分ければいいですか?
カレンダー上の特定時刻に繰り返し実行したい場合は cron式("schedule": { "cron": "0 9 * * *" })を使います。「1時間ごと」のように起動してからの一定間隔で繰り返す場合は every("every": "1h")、キャンペーン開始日の通知のように特定の日時に一度だけ実行したい場合は at を使います。毎日同じ時刻に動かすならcron式、周期だけ決まっているならeveryが向いています。
Q. 複数のcronジョブを同時に動かすと必ずクラッシュしますか?
必ずではありませんが、朝の同じ時間帯にジョブが集中すると、Anthropic APIのレートリミットに達してタイムアウトしやすくなります。本記事で紹介したスケジュール分散(30分以上ずらす)に加えて、同時実行数そのものを制限する maxConcurrentRuns という設定もあります。詳しい原因と設定例は「OpenClaw cronクラッシュの原因と3つの解決策」で解説しています。
Q. cronジョブを一時停止・削除するにはどうすればいいですか?
一時停止・再開・削除はすべてCLIコマンドで行います。現在のバージョンでは ~/.openclaw/cron/jobs.json を直接書き換える方式は使えません(SQLiteの状態データベースで管理されるため)。
# 一時停止
openclaw cron disable [ジョブID]
# 再開
openclaw cron enable [ジョブID]
# 削除
openclaw cron remove [ジョブID]
Q. cronジョブが実行されているのにSlackに通知が来ない場合はどうすればいいですか?
jobs.jsonの lastDeliveryStatus が not-delivered になっている場合は、前述の通りdelivery.modeを "none" に変更し、スキルやプロンプト内でSlack APIを直接呼び出す方式に切り替えてください。
Q. OpenClawのcronとシステムのcrontabはどう違いますか?
システムのcrontabは「特定のコマンドをスケジュール実行する」仕組みですが、OpenClawのcronは「Claude Codeに自然言語で指示を出してAIタスクをスケジュール実行する」仕組みです。AIならではの柔軟な判断・文章生成・API連携が自動で行われる点が最大の違いです。
まとめ
OpenClawのcronジョブを使うと、Claude Codeが毎日の定型業務を自動化します。
openclaw cron add(別名openclaw automations add)で登録するだけで定期実行が完成する- GA4レポート・カレンダー通知・SEOレポートなど業務直結の自動化が即実現できる
- Slack通知の不配信はdelivery.modeを
noneにしてエージェント内でAPI直接呼び出しに変更 - 複数ジョブの同時実行クラッシュはスケジュールを30分以上分散させて解決
最初の一歩として、まずGA4やGoogle Calendarなど毎日チェックしているツールのレポートを1つcronジョブ化してみてください。一度動き始めると、「手動で確認していた毎日の作業」が完全に不要になります。
法人向けAI導入・活用の月額伴走サービス
AI導入の疑問を、週1回のMTGで相談できる「AI顧問」
株式会社Nexaでは、ChatGPT・Claude・Claude CodeなどのAI導入に関する質問や、社内活用・業務自動化の進め方を週1回相談できる 月額7万円(毎月3社限定で月額5万円)のAI顧問サービス を提供しています。
「自社では何から始めるべきか」「この業務はAI化できるか」「どのツールを選ぶべきか」を、無料相談で整理します。
この記事で参照した外部情報
- docs.openclaw.aidocs.openclaw.ai
- 公式CLIリファレンスdocs.openclaw.ai
本文中でリンクしている外部ページの一覧です(自動生成)。最終確認日は本記事の最終更新日 2026-10-07 で、リンク先の内容はその後変わることがあります。
AI導入を検討中の方へ









