OpenClawのcronジョブで定期タスクを自動実行する完全ガイド

OpenClaw cron 定期実行のイメージ画像

OpenClawのcronジョブを設定すると、毎日のレポート送信・Slack通知・データ取得などをClaude Codeが完全自動で実行します。

  • 要点1: jobs.jsonにcron式・スキル名・配信先を記述するだけで定期実行が完成する
  • 要点2: GA4レポート・Googleカレンダー通知・SEOレポートなど業務直結の自動化が即実現できる
  • 要点3: Slack通知の不配信・同時実行クラッシュは設定変更で解消できる

対象: OpenClawを導入済みで、毎日の定期タスクを自動化したい経営者・業務担当者

今日やること: jobs.jsonに最初のcronジョブを1つ追加し、テスト実行で動作を確認する

この記事の著者
川島陸

株式会社Nexa 代表取締役川島 陸

一橋大学経済学部卒業後、フォーティエンスコンサルティング株式会社(旧 株式会社クニエ)にて法人向けAI導入支援等を経験。独立後、AI系メディア運営やDify/n8nの導入支援を経て、株式会社Nexaを創業。法人向けAI研修・AI導入支援・AI関連メディア運営を手掛ける。

OpenClawのcronジョブを設定することで、毎日の定型業務をClaude Codeが自動で処理します。GA4のアクセスレポートを毎朝Slackに送信したり、Googleカレンダーから今日の予定を取り出してDM通知したりと、「毎日手作業でやっていたこと」を完全に自動化できます。

「設定が難しそう」と思われがちですが、実際にはjobs.jsonというファイルにジョブの設定を書くだけで動きます。この記事では、実際に構築・運用した複数の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ジョブは以下の流れで動作します。

  1. Gatewayプロセスがjobs.jsonを定期的に読み込み、実行タイミングを監視する
  2. 設定時刻になると、GatewayがClaude CLIプロセスを起動する
  3. Claude CLIが指定されたスキルや指示を実行する
  4. 実行結果をSlackなどの配信先に送信する

設定ファイルは ~/.openclaw/cron/jobs.json に保存されます。OpenClawゲートウェイを再起動してもこのファイルは消えないため、一度設定すれば毎日自動で動き続けます。

なお、OpenClawとは、Anthropic社のClaude CodeをSlack等のメッセージングツールから常時利用できるようにするエージェントフレームワークです。Claude Codeをインストールした環境にOpenClawを導入し、ゲートウェイプロセスを立ち上げることで利用できます。(OpenClawのセットアップ方法はこちら →

cronジョブの設定ファイル(jobs.json)の構造を理解する

jobs.jsonはOpenClawのcronジョブを管理するJSONファイルです。このファイルを編集することでジョブの追加・変更・削除ができます。

最小構成のjobs.jsonサンプル

以下は最もシンプルなcronジョブの設定例です。

{  "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:C0AG7FSSP1A"      },      "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つのスケジュール形式に対応しています。

① 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時間ごと」など一定間隔で繰り返す場合に使います。1h30m7d などの形式で指定します。

③ 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を呼び出す方式のほうが確実です(詳細は後述)。

\ Claude Codeの導入、何から始めればいいかわかります /

法人向けClaude Code個別指導の無料相談はこちら

実践:3種類のcronジョブを設定してみる

実際に構築した3つのcronジョブ事例を紹介します。それぞれ openclaw cron add コマンドで追加するか、jobs.jsonを直接編集することで設定できます。

事例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}

Claude Codeの導入や活用方法について、個別にご相談いただけます。「どのcronジョブから設定すればいいか」「自社の定型業務をどう自動化するか」といった段階から対応しています。

Claude Code個別指導の無料相談はこちら →


cronジョブのSlack通知が届かないときの対処法

OpenClawのcronジョブで最もよく遭遇するトラブルが「ジョブは実行されているのにSlackに通知が届かない」問題です。

announce配信のバグとchannel/user_not_foundエラー

OpenClawのcron配信には delivery.mode: "announce" というモードがあります。これはジョブ完了時に自動的にSlackへ配信する便利な機能ですが、環境によっては 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\":\"C0AG7FSSP1A\",\"text\":\"[レポート内容]\"}' https://slack.com/api/chat.postMessage"  },  "delivery": { "mode": "none" }}

または、スキルファイル内にSlack API呼び出しを組み込むことで、プロンプトをシンプルに保てます。

ポイントOpenClawのSlackトークンは ~/.openclaw/openclaw.json に保存されています。スキルやプロンプトから参照する場合は、セキュリティに注意してください。macOS Keychainに保存して security find-generic-password で取得する方式が安全です。

\ 業務自動化のお悩み、プロが30分で整理します /

法人向けClaude Code個別指導の無料相談はこちら

cronジョブが同時に実行されると失敗する問題を解決する

複数のcronジョブを同時間帯に集中させると、ジョブが無応答のままタイムアウトすることがあります。

同時実行クラッシュが起きるメカニズム

OpenClawのcronジョブとSlack経由の手動操作は、裏側で同じClaude CLI(/Users/riku/.local/bin/claude)とAnthropic APIを共有しています。レーン(cron用・Slack対話用)は設計上分離されていますが、最終的に呼び出されるAPIは同一です。

複数のジョブが同時に動くと、APIリクエストが集中してレートリミットに達し、CLIが応答を返さないまま強制終了されます。

以下は実際に発生したタイムアウトの比較です。

ジョブ 通常の実行時間 集中時の挙動
daily-calendar-notify 約15秒 120秒でタイムアウト(上限で強制終了)
ga4-seo-report 約87秒 1200秒でタイムアウト(応答なし)
seo-improvement 約46秒 1200秒でタイムアウト(応答なし)

スケジュール分散で解決する具体的な設定例

解決策は単純です。ジョブのスケジュールを30分以上分散させることです。

修正前(全部9:00集中)

9:00 - daily-calendar-notify9:00 - ga4-seo-report9:00 - seo-improvement

修正後(30分間隔で分散)

7:00 - ai-coaching-check(軽量タスク)7:30 - daily-calendar-notify8:00 - info-hub-update8:30 - info-hub-status9:30 - seo-improvement9:45 - ga4-seo-report

openclaw cron edit コマンドでスケジュールを変更できます。

openclaw cron edit daily-calendar-notify --cron "30 7 * * *"

また、朝のcron実行時間帯(7:00〜10:00頃)はSlackからの連続的な手動操作を控えると、さらに安定して動作します。

cronジョブの動作確認・デバッグ方法

設定後は必ず動作確認を行いましょう。

nextRunAtMsを使ったテスト実行

ジョブを今すぐテスト実行したい場合、jobs.jsonの nextRunAtMs フィールドを現在時刻+30秒のタイムスタンプ(ミリ秒)に設定します。OpenClawゲートウェイが次のポーリングタイミングで検知し、即座に実行が始まります。

# 現在時刻+30秒のミリ秒タイムスタンプを取得echo $(($(date +%s) * 1000 + 30000))

取得したタイムスタンプをjobs.jsonの対象ジョブに追記します。

"nextRunAtMs": 1774350030000

ログファイルで実行結果を確認する方法

実行結果は以下のログファイルに記録されます。

# 実行ログ(当日分)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活用の「次の一手」を一緒に考えませんか /

法人向けClaude Code個別指導の無料相談はこちら

よくある質問

Q. OpenClawのcronジョブはどこに保存されますか?

~/.openclaw/cron/jobs.json に保存されます。このファイルはゲートウェイが起動時に読み込み、メモリ上で管理します。ゲートウェイを再起動してもファイルは消えないため、設定は永続的に有効です。

Q. cronジョブを一時停止・削除するにはどうすればいいですか?

一時停止は enabled: false に変更します。削除はjobs.jsonから該当ジョブのオブジェクトを削除するか、以下のコマンドを使用します。

# 一時停止openclaw cron disable [ジョブID]# 再開openclaw cron enable [ジョブID]# 削除openclaw cron remove [ジョブID]

Q. cronジョブが実行されているのにSlackに通知が来ない場合はどうすればいいですか?

jobs.jsonの lastDeliveryStatusnot-delivered になっている場合は、前述の通りdelivery.modeを "none" に変更し、スキルやプロンプト内でSlack APIを直接呼び出す方式に切り替えてください。

Q. OpenClawのcronとシステムのcrontabはどう違いますか?

システムのcrontabは「特定のコマンドをスケジュール実行する」仕組みですが、OpenClawのcronは「Claude Codeに自然言語で指示を出してAIタスクをスケジュール実行する」仕組みです。AIならではの柔軟な判断・文章生成・API連携が自動で行われる点が最大の違いです。

まとめ

OpenClawのcronジョブを使うと、Claude Codeが毎日の定型業務を自動化します。

  • ~/.openclaw/cron/jobs.json に設定を書くだけで定期実行が完成する
  • GA4レポート・カレンダー通知・SEOレポートなど業務直結の自動化が即実現できる
  • Slack通知の不配信はdelivery.modeをnoneにしてエージェント内でAPI直接呼び出しに変更
  • 複数ジョブの同時実行クラッシュはスケジュールを30分以上分散させて解決

最初の一歩として、まずGA4やGoogle Calendarなど毎日チェックしているツールのレポートを1つcronジョブ化してみてください。一度動き始めると、「手動で確認していた毎日の作業」が完全に不要になります。


Claude Codeの導入・活用をサポートします

株式会社Nexaでは、Claude Codeを活用した業務自動化の個別指導・企業研修を提供しています。OpenClawのセットアップからcronジョブの設計まで、非エンジニアの方でも3ヶ月で業務自動化を実現できるプログラムです。「何から始めればいいかわからない」という段階からご支援いたします。

Claude Code個別指導の詳細・無料相談はこちら →




関連記事

AIの力で、ビジネスを次のステージへ

まずはお気軽にご相談ください。貴社に最適なAI活用プランをご提案します。

Claude Codeのプロに無料相談 30秒で日程調整完了