AIアシスタントのcron効率化物語:1日540回のAPI呼び出しを6回に削減した方法
問題発見:1日540回の衝撃
AIアシスタントを自動化するために設定したcronジョブ。便利だと思って複数のタスクを登録していたら、ある日気づいた。1日に540回もAI APIを呼び出していたのだ。
具体的には:
- 10個のcronジョブを登録
- それぞれが1時間おきに実行(24回/日)
- OpenClawのセッション起動に平均2〜3回のAI呼び出しが発生
- 計算:10ジョブ × 24回 × 約2.25回 = 540回/日
これは明らかに無駄だった。コストも気になるが、それ以上に「AIに無意味な仕事をさせている」という罪悪感があった。
原因分析:なぜこんなに多いのか
問題の根本原因は、OpenClawの動作の仕組みにあった。
# 従来の方法(非効率)
openclaw sessions_spawn label=backup task="バックアップを実行"
この方法では:
- セッション起動時にAIがコンテキストを読み込む
- タスク内容を解釈してツール呼び出しを決定
- 実行後に結果を要約
単純なバックアップスクリプトを実行するだけなのに、毎回AIが「考えて」「判断して」「実行する」プロセスが走っていた。
解決策の設計:システムcrontab + シェルスクリプト
シンプルな答えにたどり着いた:AIを介さず、直接実行すればいい。
設計のポイント:
- システムcrontabへ移行 –
openclaw sessions_spawnを使わない - シェルスクリプトで直接実行 – 通知だけ別処理
- 必要な時だけAIを呼ぶ – 定型作業はスクリプト化
例えば、バックアップタスクは:
#!/bin/bash
# cron_backup.sh
# バックアップ実行(AI不要)
/home/user/scripts/backup.sh
# 結果通知のみMatrix APIへ(AI不要)
python3 /home/user/scripts/matrix_notify.py "バックアップ完了"
システムcrontabに登録:
# 毎日9時にバックアップ
0 9 * * * /home/user/scripts/cron_backup.sh
実装手順:具体的なコード例
1. Matrix通知用のPythonスクリプト
# matrix_notify.py
import sys
import json
import requests
def send_matrix_notification(message):
with open('/path/to/creds.json') as f:
creds = json.load(f)
url = f"{creds['homeserver']}/_matrix/client/r0/rooms/{creds['room_id']}/send/m.room.message"
headers = {"Authorization": f"Bearer {creds['access_token']}"}
data = {"msgtype": "m.text", "body": message}
requests.post(url, json=data, headers=headers)
if __name__ == "__main__":
send_matrix_notification(sys.argv[1])
2. cronジョブ実行用のラッパー
# cron_runner.py
import subprocess
import sys
def run_command(cmd):
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
return result.returncode == 0, result.stdout, result.stderr
if __name__ == "__main__":
success, stdout, stderr = run_command(sys.argv[1])
status = "成功" if success else "失敗"
print(f"実行{status}: {stdout if success else stderr}")
3. システムcrontabの設定
# 編集
sudo crontab -e
# 毎日9時:バックアップ
0 9 * * * /home/user/scripts/cron_backup.sh
# 1時間おき:システムチェック(AIなし)
0 * * * * /home/user/scripts/cron_update_check.sh
結果と効果:98.9%削減の衝撃
Before(2026-02-07まで):
- 10ジョブ × 24回/日 × 2.25回AI呼び出し = 540回/日
After(2026-02-08以降):
- 重要な判断が必要なタスクのみAI起動(3ジョブ)
- 実行頻度も最適化(1日2回)
- 計算:3ジョブ × 2回/日 = 6回/日
削減率:98.9%
コスト削減だけでなく、システムの応答性も向上した。不要なセッション起動がなくなり、本当に必要な時だけAIが働くようになった。
学んだ教訓:「減らす」ことも立派な仕事
この経験から得た教訓:
- 自動化 ≠ AI化 – すべてをAIに任せる必要はない
- 適材適所 – 定型作業はシェルスクリプト、判断が必要な時だけAI
- 測定の重要性 – 実際に何回呼ばれているか把握していなかった
- 「減らす」のも最適化 – 機能追加だけが進化ではない
プログラミングの世界では「追加する」ことが評価されがちだが、「減らす」「シンプルにする」のも立派な仕事だ。
今回の540→6回への削減は、コードを書いた量ではなく、不要なものを削ぎ落とした結果だった。
まとめ:AIアシスタントの自動化で無駄なAPI呼び出しが発生していたら、まず「本当にAIが必要か?」を問い直してみよう。シンプルなスクリプトで済むことは多い。そして、98.9%削減という結果は、「減らす」ことの価値を証明してくれた。