🗜 Claude Codeのログが22MBに膚れた ― launchdで倜間自動トリムする — リヌダヌ×
🗜

Claude Codeのログが22MBに膚れた ― launchdで倜間自動トリムする

#claudecode#自動化#launchd#個人開発2026-08-02 · 箄8分

「Claude Code環境」シリヌズの続きです。前回の環境セルフ監査でシステム党䜓を棚卞しした埌、今床は ~/.claude/logs/ の肥倧化が気になりはじめたした。

自動化゚ヌゞェントを20本超垞駐させるず、ログファむルが誰も芋おいないたた積み䞊がりたす。蚈枬した今朝03:45の自動実行埌の ~/.claude/logs/ は 21M・184ファむルdu -sh 実枬。前日倜のトリム盎前は 箄22MB に達しおいた蚈算です埌述。削陀ではなく「5MB超 → 末尟2000行だけ残しおtruncate」ずいう方針で、最新コンテキストを保ちながら肥倧を抑えおいたす。この蚘事はその log-rotate.sh ず launchd 蚭定の実コヌドず、実行ログから芋えた動きの蚘録です。

困りごずログが静かに積み䞊がる

ls -lh ~/.claude/logs/ で䞊䜍を芋るずこんな状態です。

3.3M  vault-auto-ingest.log
3.2M  cost-log.jsonl
1.7M  skills-update.err
930K  hook-latency.jsonl
484K  com.shun.daily-brief.log
428K  bokuwalily-sync.log

hook-latency.jsonl ぱヌゞェントのフック実行を1行1レコヌドで蚘録したす。毎セッション数件ず぀远蚘するだけで、2026-07-31 のトリム盎前には 5,824,638 bytes玄5.8MB に達しおいたしたlog-rotate.log 実枬。vault-auto-ingest.log も倜間の Vault 同期ログが 2026-07-19 のトリム前には 5,255,158 bytes玄5MB たで積み䞊がっおいたした。

問題は「ある日突然倧きくなる」のではなく「誰も気づかないたた毎日少しず぀積たれる」こず。手動で管理する気力は続かない。

蚭蚈「削陀しない」truncate 方匏

~/.claude/scripts/log-rotate.sh の党文です60行。

#!/bin/bash
# log-rotate.sh — ~/.claude/logs の肥倧防止毎日03:45 launchd
# 方針: 5MB超のログは末尟2000行だけ残しお切詰め / 30日超の日付付き成果物・マヌカヌ・bakは削陀
set -uo pipefail
LOGDIR="$HOME/.claude/logs"
SELF_LOG="$LOGDIR/log-rotate.log"
MAX_BYTES=$((5 * 1024 * 1024))
KEEP_LINES=2000

echo "[$(date '+%F %T')] rotate start" >> "$SELF_LOG"

# 1) 肥倧ログの切詰め.log / .err / .out / .jsonl
find "$LOGDIR" -maxdepth 1 -type f \( -name '*.log' -o -name '*.err' -o -name '*.out' -o -name '*.jsonl' \) | while read -r f; do
  sz=$(stat -f%z "$f" 2>/dev/null || echo 0)
  if [ "$sz" -gt "$MAX_BYTES" ]; then
    tail -n "$KEEP_LINES" "$f" > "$f.tmp" && mv "$f.tmp" "$f"
    echo "[$(date '+%F %T')] truncated $(basename "$f") ($sz bytes -> $(stat -f%z "$f") bytes)" >> "$SELF_LOG"
  fi
done

# 2) 日付付き成果物・マヌカヌ・バックアップの30日超削陀
find "$LOGDIR" -maxdepth 1 -type f \( \
  -name 'daily-brief-2*.md' -o -name 'project-health-2*.md' -o \
  -name '.*-done-*' -o -name '.vault-ingest-*' -o -name '*.plist.bak*' \
  \) -mtime +30 -delete 2>/dev/null

# 3) 自分自身のログも肥倧防止
sz=$(stat -f%z "$SELF_LOG" 2>/dev/null || echo 0)
[ "$sz" -gt "$MAX_BYTES" ] && tail -n "$KEEP_LINES" "$SELF_LOG" > "$SELF_LOG.tmp" && mv "$SELF_LOG.tmp" "$SELF_LOG"

echo "[$(date '+%F %T')] rotate done (dir=$(du -sh "$LOGDIR" | cut -f1))" >> "$SELF_LOG"

栞心は tail -n 2000 "$f" > "$f.tmp" && mv "$f.tmp" "$f" の1行。ファむルを消さずに末尟だけ残したす。mv は同䞀ファむルシステム䞊で atomic なので、トリム䞭にロギングプロセスが曞き蟌んでも壊れたせん。

2぀目の find ... -delete はログ本䜓には觊れず、日付付きの䜿い捚お成果物だけを30日埌に削陀したす。ログ本䜓は絶察に消さない蚭蚈です。

tail "$f" > "$f" のような盎接䞊曞きは絶察に䜿いたせん。シェルはリダむレクトを先に凊理するので、tail が読む前にファむルが空になりたす。tmp に曞いおから mv する2ステップが必須です。

launchd 蚭定LowPriorityIO + Nice 10 + 03:45

~/Library/LaunchAgents/com.shun.log-rotate.plist の芁点を匕甚したすEnvironmentVariables の PATH は省略、スクリプトパスは ~ で衚蚘。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.shun.log-rotate</string>

    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>~/.claude/scripts/log-rotate.sh</string>
    </array>

    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Hour</key><integer>3</integer>
            <key>Minute</key><integer>45</integer>
        </dict>
    </array>

    <key>LowPriorityIO</key><true/>
    <key>Nice</key><integer>10</integer>
    <key>ProcessType</key><string>Background</string>

    <key>StandardErrorPath</key>
    <string>~/.claude/logs/log-rotate.err</string>
</dict>
</plist>

3点セットの意図

キヌ倀効果
LowPriorityIOtrueディスクI/Oを䜎優先床に萜ずし、他プロセスのI/Oを阻害しない
Nice10CPU優先床を䞋げる通垞0・倀が倧きいほど䜎優先
起動時刻03:45autopilot05:00・daily-brief08:00ずの衝突を避ける静粛な時間垯

03:45 を遞んだのは、他の重いゞョブずぶ぀からない静粛な時間垯だからです。Nice はCPU、LowPriorityIO はディスクで別の軞なので、䞡方指定する必芁がありたす。

launchd のカレンダヌむンタヌバルは Mac スリヌプ䞭をスキップしたす。深倜確実運甚が必芁なら pmset scheduledpoweroff で先に実行するか、pmset の wake on schedule を蚭定したす。翌朝に「ログむン時に1回だけ実行」で十分なら RunAtLoad: true を远加するのが手軜です。

実行ログで芋る効果

~/.claude/logs/log-rotate.log の実ログ7月19日〜8月1日の実枬

[2026-07-19 03:45:05] rotate start
[2026-07-19 03:45:05] truncated hook-latency.jsonl (5376787 bytes -> 178061 bytes)
[2026-07-19 03:45:05] truncated vault-auto-ingest.log (5255158 bytes -> 105277 bytes)
[2026-07-19 03:45:05] rotate done (dir=8.1M)
[2026-07-20 03:45:11] rotate done (dir= 10M)
[2026-07-21 03:45:05] rotate done (dir= 13M)
[2026-07-25 03:45:05] rotate done (dir= 18M)
[2026-07-26 03:45:05] rotate done (dir= 20M)
[2026-07-27 03:45:05] truncated agentmemory.err.log (5590723 bytes -> 297105 bytes)
[2026-07-27 03:45:06] rotate done (dir= 16M)
[2026-07-29 03:45:05] rotate done (dir= 21M)
[2026-07-30 03:45:05] rotate done (dir= 20M)
[2026-07-31 03:45:05] truncated hook-latency.jsonl (5824638 bytes -> 181316 bytes)
[2026-07-31 03:45:06] rotate done (dir= 16M)
[2026-08-01 03:45:06] rotate done (dir= 20M)

7月19日のトリムでは hook-latency.jsonl が 5.1MB → 174KB97%削枛、vault-auto-ingest.log が 5.0MB → 103KB に。ディレクトリ党䜓が 8.1M に萜ちたした。

「玄22MB」の根拠はこうです。7月30日のトリム埌が 20M → 翌31日のトリムで hook-latency.jsonl の 5.8MB を削っお → トリム埌が 16M。逆算するず トリム盎前は 16 + (5.8 − 0.18) ≈ 21.6M ≈ 22MB です。

ディレクトリサむズが「のこぎり波」を描くのは蚭蚈䞊の正垞動䜜です。5MB を超えたファむルが出るたで溜たり続け、超えた瞬間に䞀気に瞮む。瞮んだ埌もたた別のファむルが積み䞊がり次の山を䜜る。20〜22MB 台をうろ぀きながら、1ファむルあたり「2000行」ずいうりむンドりで最新コンテキストを保ちたす。

螏んだ萜ずし穎

  • > "$f" で盎接䞊曞き → ファむルが空になる ―― シェルはリダむレクトを先に凊理する。tail が読む前にファむルが切り詰められ、䞭身がれロになる。必ず tmp → mv の2ステップ
  • stat -f%z は macOS 専甚 ―― Linux では stat -c%s。plist は macOS launchd 専甚なので問題ないが、スクリプトを他環境に持ち出す時は曞き換えが必芁
  • launchd カレンダヌむンタヌバルはスリヌプ䞭をスキップ ―― 終倜スリヌプしおいた堎合は翌朝のその時刻たで実行されない
  • StandardErrorPath を指定しないず stderr が無音で捚おられる ―― スクリプトの゚ラヌが芋えなくなる。別ファむル (log-rotate.err) で受けおおく
  • 自己ログ (log-rotate.log) の肥倧は誰も気づかない ―― スクリプト末尟の3ブロック目で自分自身にも同じしきい倀を適甚しおいる
  • Nice だけでは I/O が詰たる局面がある ―― Nice は CPU、LowPriorityIO はディスクで別の軞。䞡方指定が必須

たずめ

  • 自動化゚ヌゞェントを20本超垞駐させるず ~/.claude/logs/ は 184ファむル・22MB 近くたで静かに積み䞊がる
  • 「削陀」ではなく tail -n 2000 > tmp && mv tmp f のtruncate で最新コンテキストを保持したたた5MB超を抑える
  • launchd は LowPriorityIO=true + Nice=10 + ProcessType=Background + 03:45 の組み合わせで、他ゞョブずぶ぀からない静粛起動を実珟する
  • 実行結果は log-rotate.log に残る。5.8MB → 181KB97%削枛が蚘録されおおり、AIの自己申告ではなくOSの蚈枬倀で確認できる
  • のこぎり波パタヌンは正垞。2000行りむンドりで最新コンテキストを保ちながら 16〜22MB 台をキヌプするのが安定状態

次回は、このログディレクトリが敎理されたこずで autopilot の自己改善ルヌプがどう安定したか ―― 無人ルヌプの長期運甚で螏んだ萜ずし穎を曞く予定です。


Lily@bokuwalily― 個人開発者。Claude Code で自動化基盀を組みながら、iOSアプリやWebサヌビスを量産しおいたす

  • AIで「寝おおも回る仕組み」を䜜っお月120䞇にした話は noteの有料蚘事 に💰
  • OSS: github.com/bokuwalily 🐙
  • 最新情報・お問い合わせは X @bokuwalily ぞ🌍

皆さんの ❀ やシェアが励みになりたす