- ハートビートは「バッチチェック型」、Cronは「正確なスケジュール型」で使い分ける
- HEARTBEAT.mdとheartbeat-state.jsonで効率的な定期チェックを設計できる
- GA4レポート・SNS投稿・セキュリティ監査など実践例5選を紹介
OpenClawを使ったAI自動化で最も重要なのが、定期タスクの設計です。OpenClawには「ハートビート」と「Cronジョブ」という2つの定期実行メカニズムがあり、それぞれに適した使い方があります。
この記事では、この2つのメカニズムの違いから実践的な活用例まで、OpenClawでの自動化を完全に使いこなすための知識を解説します。
- ハートビートとCronの違いと使い分け
- HEARTBEAT.mdの書き方とベストプラクティス
- openclaw.jsonでのCronジョブ設定方法
- 実践例5選(GA4レポート・SNS投稿・監査等)
ハートビートとCronの違い|使い分けの基本
OpenClawには定期実行のための2つのメカニズムがあります。
| 項目 | ハートビート | Cronジョブ |
|---|---|---|
| タイミング | 約30分間隔(ドリフトあり) | 正確なスケジュール |
| 実行コンテキスト | メインセッション内 | 独立セッション |
| 会話履歴 | 直近の会話を参照可能 | 独立(参照不可) |
| 設定場所 | HEARTBEAT.md | openclaw.json |
| モデル指定 | メインセッションと同一 | 個別に指定可能 |
| 用途 | バッチチェック、能動的なフォロー | 正確なタイミングのタスク |
使い分けの原則:
- 「だいたい30分ごとにチェックすればいい」→ ハートビート
- 「毎朝8時ぴったりに実行してほしい」→ Cron
ハートビートの仕組みと設定方法
ハートビートは、OpenClawのゲートウェイが約30分間隔でエージェントに送信するポーリングメッセージです。エージェントは定義されたプロンプトを受け取り、チェックすべきことがあればタスクを実行、なければHEARTBEAT_OKを返します。
HEARTBEAT.mdの書き方
HEARTBEAT.mdはワークスペースのルートに配置するファイルで、ハートビートで何をチェックすべきかを定義します。
# HEARTBEAT.md
## チェック項目
### メール確認
- 未読の重要メールがあれば報告
- 最終チェック: heartbeat-state.json の lastChecks.email を参照
### カレンダー確認
- 2時間以内に予定があればリマインド
- 最終チェック: heartbeat-state.json の lastChecks.calendar を参照
### SNS通知
- Xのメンション・DMを確認
- 反応が必要なものがあれば報告
ポイント: チェック項目は具体的に書く。「適当にチェックして」ではなく「何を」「どう判断して」「何をするか」を明確にしましょう。
heartbeat-state.jsonでチェック管理
各チェック項目の最終実行時刻を管理するために、heartbeat-state.jsonを使用します。
{
"lastChecks": {
"email": 1741398000,
"calendar": 1741396200,
"twitter": 1741389000,
"weather": null
}
}
エージェントはこのファイルを参照して**「前回チェックから十分な時間が経過しているか」を判断**し、不必要な重複チェックを避けます。
効率的なバッチチェック設計
ハートビートのたびにすべてのチェックを実行すると、APIコストが膨らみます。以下のようなローテーション方式が効率的です:
- 毎回チェック: メール(緊急性が高い)
- 2回に1回: カレンダー(2時間前リマインドなら十分)
- 4回に1回: SNS通知(即時性は不要)
- 1日1回: 天気予報(変動が少ない)
Cronジョブの設定と運用
openclaw.jsonでのCron定義
Cronジョブはopenclaw.jsonのエージェント設定内で定義します。
{
"agents": {
"my-agent": {
"cron": [
{
"id": "daily-report",
"schedule": "0 8 * * *",
"prompt": "GA4の日次レポートを作成し、Slackに投稿してください",
"model": "anthropic/claude-sonnet-4-6",
"thinking": "low"
},
{
"id": "weekly-review",
"schedule": "0 9 * * 1",
"prompt": "先週のメモリファイルをレビューし、MEMORY.mdを更新してください"
}
]
}
}
}
モデル・thinkingレベルの使い分け
Cronジョブはタスクごとにモデルとthinkingレベルを個別指定できます。コスト最適化のために以下のように使い分けましょう:
| タスク | おすすめモデル | thinking |
|---|---|---|
| レポート生成 | Sonnet | low |
| データ分析 | Opus | medium |
| 単純な通知 | Haiku | off |
| 記事執筆 | Opus | high |
チャネル配信設定
Cronジョブの結果を特定のチャネル(Slack、Telegram等)に配信する設定も可能です。
{
"id": "morning-briefing",
"schedule": "0 8 * * *",
"prompt": "今日のブリーフィングを作成してください",
"channel": "slack"
}
実践例5選
GA4日次レポート自動化
毎朝8時にGA4のデータを取得し、Slackに投稿するCronジョブの例です。
{
"id": "ga4-daily-report",
"schedule": "0 8 * * *",
"prompt": "GA4 APIからses-base.comの昨日のデータを取得し、ユーザー数・PV・流入元・人気記事TOP10を含むレポートをSlackに投稿してください",
"model": "anthropic/claude-sonnet-4-6"
}
メール・カレンダー定期チェック
HEARTBEAT.mdに組み込むパターンです。メールは毎回、カレンダーは2回に1回チェックします。
SNS投稿の自動スケジュール
予約投稿をCronジョブで管理する例です。
{
"id": "twitter-post",
"schedule": "0 12 * * 1-5",
"prompt": "予定されたSNS投稿を確認し、X(Twitter)に投稿してください"
}
ブログ記事パイプライン
記事の企画→執筆→レビュー→公開を段階的にCronジョブで実行する例です。フェーズごとに異なるCronジョブを設定し、前のフェーズの出力を次のフェーズの入力として使います。
セキュリティ監査の定期実行
週1回のセキュリティチェックをCronジョブで自動化する例です。
{
"id": "security-audit",
"schedule": "0 3 * * 0",
"prompt": "セキュリティ監査を実施してください:SSH設定・ファイアウォール・パッケージ更新状況・ログ異常を確認",
"model": "anthropic/claude-sonnet-4-6"
}

トラブルシューティング
Cronジョブが実行されない
openclaw gateway statusでゲートウェイが起動しているか確認scheduleのcron式が正しいか検証(crontab.guruが便利)- ゲートウェイのログを確認:
openclaw gateway logs
ハートビートが来ない
- ゲートウェイの設定で
heartbeatが有効になっているか確認 heartbeatIntervalMsの値を確認(デフォルトは30分=1800000ms)
APIコストが予想以上に高い
- HEARTBEAT.mdのチェック項目をローテーション方式に変更
- Cronジョブのモデルを見直し(不要にOpusを使っていないか)
thinkingレベルを下げる
- ハートビートは「チェック」に使い、「実行」はCronに任せる
- 単純なタスクにはHaikuやSonnetを指定する
- thinkingは本当に必要なタスクだけmedium以上にする
まとめ|ハートビートとCronで24時間AI運用
OpenClawのハートビートとCronジョブを適切に使い分けることで、24時間365日のAI自動化が実現できます。
- ハートビート: 柔軟なバッチチェック、会話文脈を活かした能動的なフォロー
- Cron: 正確なタイミングでの定型タスク実行
- 両者を組み合わせることで、コストを抑えつつ網羅的な自動化が可能
OpenClawの公式ドキュメントでさらに詳しい設定方法を確認できます。
関連記事: