Claude Codeã®ãã°ã22MBã«èšãã â launchdã§å€éèªåããªã ãã
ã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ç¹ã»ããã®æå³ïŒ
| ã㌠| å€ | 广 |
|---|---|---|
LowPriorityIO | true | ãã£ã¹ã¯I/Oãäœåªå 床ã«èœãšããä»ããã»ã¹ã®I/Oãé»å®³ããªã |
Nice | 10 | CPUåªå 床ãäžããïŒéåžž0ã»å€ã倧ããã»ã©äœåªå ïŒ |
| èµ·åæå» | 03:45 | autopilotïŒ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 ãžð
çããã® â€ïž ãã·ã§ã¢ãå±ã¿ã«ãªããŸãïŒ