SCALE — Build Lab
インフラ · BASH SCRIPT

tar.gz スナップショット復元システム

CATEGORYインフラ TYPEBash Script EFFORT20〜40分 DIFFICULTY
PRIMARY CODE
bash · scripts/snapshot.sh
#!/bin/bash
TS=$(date +%Y-%m-%d_%H%M%S)
LABEL="${1:-untitled}"

# 二重保存
PRIMARY="$HOME/Library/CloudStorage/.../<project>-backups"
LOCAL="$HOME/<project>-backups"

for DIR in "$PRIMARY" "$LOCAL"; do
  mkdir -p "$DIR"
  tar --exclude=node_modules --exclude=.next --exclude=out --exclude=.wrangler \
    -czf "$DIR/<project>_${TS}_${LABEL}.tar.gz" -C "$ROOT" .
done

# 30世代保持・古いの削除
ls -t "$PRIMARY"/*.tar.gz | tail -n +31 | xargs rm -f 2>/dev/null
DEPENDENCIES
tar / rsync(標準)
USE CASES
  • 全システムの編集前バックアップ
  • 壊れた時の即ロールバック

tar.gz スナップショット復元システム

:LiTarget: 用途

編集前 / デプロイ前 / 任意のタイミングで tar.gz スナップショットを取得・復元。

  • node_modules / .next / out / .wrangler は除外
  • 30世代保持(自動削除)
  • Primary(Drive同期)+ Local(PC内)の二重保存

:LiCode: コード骨格

#!/bin/bash
TS=$(date +%Y-%m-%d_%H%M%S)
LABEL="${1:-untitled}"

# 二重保存
PRIMARY="$HOME/Library/CloudStorage/.../<project>-backups"
LOCAL="$HOME/<project>-backups"

for DIR in "$PRIMARY" "$LOCAL"; do
  mkdir -p "$DIR"
  tar --exclude=node_modules --exclude=.next --exclude=out --exclude=.wrangler \
    -czf "$DIR/<project>_${TS}_${LABEL}.tar.gz" -C "$ROOT" .
done

# 30世代保持・古いの削除
ls -t "$PRIMARY"/*.tar.gz | tail -n +31 | xargs rm -f 2>/dev/null

復元

bash scripts/snapshot.sh --restore=2026-05-04_141100
# /tmp/<project>-restore-<ts>/ に展開される