Claude Code セッションデータ損失:Windows および Mac 向けバックアップスクリプト

r/ClaudeAIの複数のユーザーが、Claude Codeがセッションデータを静かに消失することを報告しています。サイドバーにはセッションタイトルが残りますが、クリックすると空のトランスクリプトが表示されます。警告もエラーも復旧手段もありません。これはコンテキスト圧縮時、予期しない終了時、またはストレージ層の問題で発生するようです。
バックアップソリューション
コミュニティが作成したスクリプトは、~/.claude からすべてのClaude Codeデータ(sessions、projects、plans、drafts、memory)を別のフォルダにバックアップし、Windowsではタスクスケジューラ、Macではlaunchdを使用して毎日自動実行し、最大7日間のローテーションバックアップを保持します。
Windows(PowerShell + タスクスケジューラ)
バックアップフォルダを作成:
mkdir C:\Users\%USERNAME%\ClaudeBackups以下の内容を backup-claude-sessions.ps1 としてそのフォルダに保存:
$ErrorActionPreference = "Stop"
$source = "$env:USERPROFILE\.claude"
$backupRoot = "$env:USERPROFILE\ClaudeBackups"
$logFile = Join-Path $backupRoot "backup.log"
$keepDays = 7
$timestamp = Get-Date -Format "yyyy-MM-dd_HHmmss"
$backupDir = Join-Path $backupRoot $timestamp
$dirs = @("sessions", "projects", "plans", "drafts", "memory")
function Write-Log($msg) {
$line = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss') - $msg"
Add-Content -Path $logFile -Value $line -Encoding utf8
}
try {
Write-Log "=== Backup started ==="
New-Item -ItemType Directory -Path $backupDir -Force | Out-Null
foreach ($d in $dirs) {
$src = Join-Path $source $d
if (Test-Path $src) {
$dst = Join-Path $backupDir $d
Copy-Item -Path $src -Destination $dst -Recurse -Force
$count = (Get-ChildItem $dst -Recurse -File -ErrorAction SilentlyContinue | Measure-Object).Count
Write-Log " Copied $d ($count files)"
} else {
Write-Log " Skipped $d (not found)"
}
}
$size = (Get-ChildItem $backupDir -Recurse -File | Measure-Object -Property Length -Sum).Sum
Write-Log " Total backup size: $([math]::Round($size/1MB, 2)) MB"
$cutoff = (Get-Date).AddDays(-$keepDays)
Get-ChildItem $backupRoot -Directory | Where-Object { $.Name -match '^\d{4}-\d{2}-\d{2}\d{6}$' -and $.CreationTime -lt $cutoff } | ForEach-Object {
Remove-Item $.FullName -Recurse -Force -Confirm:$false
Write-Log " Rotated old backup: $($.Name)"
}
Write-Log "=== Backup completed successfully ==="
} catch {
Write-Log "!!! BACKUP FAILED: $"
exit 1
}
install-schedule.ps1 を作成し、管理者として一度実行:
$action = New-ScheduledTaskAction -Execute "powershell.exe"
-Argument "-ExecutionPolicy Bypass -WindowStyle Hidden -File "$env:USERPROFILE\ClaudeBackups\backup-claude-sessions.ps1""
$trigger = New-ScheduledTaskTrigger -Daily -At 8:00AM
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries
-DontStopIfGoingOnBatteries -StartWhenAvailable Register-ScheduledTask
-TaskName "ClaudeSessionsBackup" -Action $action
-Trigger $trigger -Settings $settings
-Description "Daily backup of Claude Code sessions" `
-RunLevel Limited
Write-Host "Done! Runs daily at 8:00 AM." -ForegroundColor Greenインストーラを実行:
powershell -ExecutionPolicy Bypass -File "C:\Users%USERNAME%\ClaudeBackups\install-schedule.ps1"Mac(launchd + シェルスクリプト)
バックアップフォルダを作成:
mkdir -p /ClaudeBackups/ClaudeBackups/backup-claude-sessions.sh として保存:
#!/bin/bash
set -euo pipefail
SOURCE="$HOME/.claude"
BACKUP_ROOT="$HOME/ClaudeBackups"
LOG_FILE="$BACKUP_ROOT/backup.log"
KEEP_DAYS=7
TIMESTAMP=$(date +"%Y-%m-%d_%H%M%S")
BACKUP_DIR="$BACKUP_ROOT/$TIMESTAMP"
DIRS=("sessions" "projects" "plans" "drafts" "memory")
log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"; }
log "=== Backup started ==="
mkdir -p "$BACKUP_DIR"
for d in "${DIRS[@]}"; do
src="$SOURCE/$d"
if [ -d "$src" ]; then
cp -R "$src" "$BACKUP_DIR/$d"
count=$(find "$BACKUP_DIR/$d" -type f | wc -l | tr -d ' ')
log " Copied $d ($count files)"
else
log " Skipped $d (not found)"
fi
done
size=$(du -sb "$BACKUP_DIR" | cut -f1)
log " Total backup size: $(echo "scale=2; $size/1048576" | bc) MB"
find "$BACKUP_ROOT" -maxdepth 1 -type d -name "????-??-??_??????" -mtime +$KEEP_DAYS -exec rm -rf {} + -exec log " Rotated old backup: {}" ;
log "=== Backup completed successfully ==="実行可能にしてlaunchdでスケジュール設定(plistの設定については元の投稿を参照)。
このスクリプトはClaude Codeから完全に独立して動作するため、Claudeがクラッシュしたりデータが失われても、バックアップは保持されます。各実行は backup.log に記録され、確認できます。
📖 ソース記事: r/ClaudeAI
👀 See Also

Dirac: オープンソースエージェントがTerminalBenchで65.2%を達成、より安価でオープンに
オープンソースのコーディングエージェント「Dirac」が、TerminalBench 2.0でgemini-3-flash-previewに対して65.2%のスコアを達成し、Googleのベースライン(47.6%)やトップのクローズドソースエージェントJunie CLI(64.3%)を上回りました。また、競合他社と比較してAPIコストを64.8%削減します。

Claude Codeの「完了した作業」という錯覚:差分よりもエージェントの経路をレビューする重要性
Claude Codeはクリーンな差分、合格するテスト、良いサマリーを生成できるが、実際の動作やセキュリティ上の懸念、アーキテクチャの制約を見逃す可能性がある。著者は、最終的な差分だけでなく、アクションの連鎖(計画、読み取ったファイル、実行したコマンド、テスト出力)をレビューすることが不可欠だと主張する。

EctoLedger:ターミナルアクセス付きローカルAIエージェント用オープンソースマイクロVMサンドボックス
EctoLedgerは、ターミナルアクセスを持つローカルAIエージェントにマイクロVM分離を提供するオープンソースのランタイムファイアウォールおよびレジャーであり、Apple Hypervisor.framework(macOS)またはFirecrackerマイクロVM(Linux)環境でコマンドを実行する前に4つの防止レイヤーを実行します。

OpenUtter: OpenClaw経由でGoogle Meetの文字起こしをライブでクエリ
OpenUtterは、ヘッドレスブラウザを介してGoogle Meetにゲストとして参加し、ライブ字幕をキャプチャしてOpenClawイベントバスにストリーミングするスキルです。通話中にTelegram、WhatsApp、Slack、またはDiscordを介してライブ文字起こしをクエリできます。