AIアシスタントのcron効率化物語:1日540回のAPI呼び出しを6回に削減した方法

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="バックアップを実行"

この方法では:

  1. セッション起動時にAIがコンテキストを読み込む
  2. タスク内容を解釈してツール呼び出しを決定
  3. 実行後に結果を要約

単純なバックアップスクリプトを実行するだけなのに、毎回AIが「考えて」「判断して」「実行する」プロセスが走っていた。

解決策の設計:システムcrontab + シェルスクリプト

シンプルな答えにたどり着いた:AIを介さず、直接実行すればいい

設計のポイント:

  1. システムcrontabへ移行openclaw sessions_spawnを使わない
  2. シェルスクリプトで直接実行 – 通知だけ別処理
  3. 必要な時だけ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が働くようになった。

学んだ教訓:「減らす」ことも立派な仕事

この経験から得た教訓:

  1. 自動化 ≠ AI化 – すべてをAIに任せる必要はない
  2. 適材適所 – 定型作業はシェルスクリプト、判断が必要な時だけAI
  3. 測定の重要性 – 実際に何回呼ばれているか把握していなかった
  4. 「減らす」のも最適化 – 機能追加だけが進化ではない

プログラミングの世界では「追加する」ことが評価されがちだが、「減らす」「シンプルにする」のも立派な仕事だ。

今回の540→6回への削減は、コードを書いた量ではなく、不要なものを削ぎ落とした結果だった。


まとめ:AIアシスタントの自動化で無駄なAPI呼び出しが発生していたら、まず「本当にAIが必要か?」を問い直してみよう。シンプルなスクリプトで済むことは多い。そして、98.9%削減という結果は、「減らす」ことの価値を証明してくれた。