セッション終了時バックアップ
Stop中級Hookタイプ: stop
セッション終了時バックアップは、Stopイベントにフックして、セッションが終了する前に包括的なバックアップを作成します。セッション中に変更されたすべてのファイルのリストをキャプチャし、コミットされていない変更がある場合はgit stashを作成し、達成した内容の簡潔な要約を生成し、すべてをタイムスタンプ付きのディレクトリに保存します。これにより、セッション間で作業が失われることがなく、中断したところから簡単に再開できます。バックアップは設定可能な保持期間後にクリーンアップされます。
バックアップセッション復旧git stash永続化
Hookコード
#!/bin/bash
# Session Backup on Stop Hook
# Saves session context when Claude Code stops
BACKUP_DIR="${HOME}/.claude/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
SESSION_DIR="$BACKUP_DIR/session_$TIMESTAMP"
RETENTION_DAYS=14
mkdir -p "$SESSION_DIR"
# Record modified files
echo "=== Session Backup: $TIMESTAMP ===" > "$SESSION_DIR/summary.md"
echo "" >> "$SESSION_DIR/summary.md"
# List recently modified files (last 2 hours)
echo "## Modified Files" >> "$SESSION_DIR/summary.md"
find . -name '*.ts' -o -name '*.tsx' -o -name '*.js' -o -name '*.py' | xargs stat -f "%m %N" 2>/dev/null | sort -rn | head -20 | awk '{print "- " $2}' >> "$SESSION_DIR/summary.md"
# Save git status and diff
echo "" >> "$SESSION_DIR/summary.md"
echo "## Git Status" >> "$SESSION_DIR/summary.md"
git status --short >> "$SESSION_DIR/summary.md" 2>/dev/null
# Save full diff of uncommitted changes
git diff > "$SESSION_DIR/uncommitted.diff" 2>/dev/null
git diff --cached > "$SESSION_DIR/staged.diff" 2>/dev/null
# Create stash if there are uncommitted changes
if [ -n "$(git status --porcelain 2>/dev/null)" ]; then
STASH_MSG="claude-session-backup-$TIMESTAMP"
git stash push -m "$STASH_MSG" --keep-index 2>/dev/null
echo "Stashed uncommitted changes: $STASH_MSG"
git stash pop --quiet 2>/dev/null
fi
# Prune old backups
find "$BACKUP_DIR" -maxdepth 1 -name "session_*" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; 2>/dev/null
echo "Session backup saved to $SESSION_DIR"
exit 0
このHookをClaude Code設定または.claude/settings.jsonに追加して有効化してください。
実行プレビュー
セッション終了時バックアップ
セッション終了時バックアップについて
Claude Code Hooksは、Claude操作中の特定イベントに応じてカスタムシェルコマンドを自動実行します。セッション終了時バックアップは中級レベルのStop Hookで、開発ワークフローの重要なタイミングでタスクを自動化し、手動ステップを削減してチーム全体の一貫性を維持します。