※AI関連作業のメモ ディレクトリやファイル名はダミー
スポンサーリンク
バッチ処理の自動化スキルは市場価値が高いです。今の自分の単価を調べてみませんか?
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】
顧客常駐はもう嫌だ!社内SEへ転職するなら【社内SE転職ナビ】
Cursor・Claude Code・Codex AIスキルを学ぶなら
環境構築不要!AIエージェント開発を非エンジニアでも即実践【AI Agent Camp】
ChatGPT Plus 設定サーバ 作業・調査メモ
AIエージェント環境のバックアップ肥大化を調査して削減した話
日次バックアップのサイズが急に大きくなっていたため、バックアップ対象と生成物を調査しました。
構成は、アプリケーションの作業ディレクトリを tar.gz 化し、GPGで暗号化して保存するシンプルなものです。保持世代は7世代で、古いバックアップの削除自体は正常に動作していました。
肥大化の主因
調査の結果、肥大化の主因は次の2つでした。
- AIエージェントのセッション履歴 JSONL
- ログ用途の SQLite DB と画像生成関連ファイル
特に大きかった領域は以下です。
/path/to/app/agent-home/sessions
/path/to/app/agent-home/logs.sqlite
/path/to/app/agent-home/generated_images
/path/to/app/media/outbound
/path/to/app/media/tool-image-generation
バックアップサイズを比較すると、当初のバックアップは最大 867MB まで増加していました。除外設定を調整した結果、通常バックアップは 85MB まで縮小できました。
条件を変えた比較
検証用に条件を変えてバックアップを作成したところ、圧縮・暗号化後のサイズは以下の通りでした。
現行の除外設定あり: 85.0MB
ログDBだけ含める: 270.5MB
セッション履歴だけ含める: 413.2MB
この結果から、セッション履歴とログDBが特に大きな影響を持つことが分かりました。
追加した除外設定
最終的には、以下のような除外設定を追加しました。
--exclude="logs"
--exclude="agent-home/sessions"
--exclude="agent-home/generated_images"
--exclude="media/outbound"
--exclude="media/tool-image-generation"
--exclude="npm/projects/*/node_modules"
--exclude="**/.cache"
--exclude="**/cache"
--exclude="**/tmp"
--exclude="**/temp"
--exclude="**/*.tmp"
--exclude="**/*.log"
--exclude="**/*.sqlite"
--exclude="**/*.db"
--exclude="**/*.sqlite-wal"
--exclude="**/*.sqlite-shm"
--exclude="**/*-wal"
--exclude="**/*-shm"
SQLite DBの扱い
SQLite DB は通常のファイルコピーでは除外しつつ、必要なDBだけオンラインバックアップAPIで安全にコピーする構成にしています。ただしログDBは復旧優先度が低くサイズが大きいため、個別バックアップ対象からも除外しました。
find "${SOURCE_DIR}" -type f \( -name "*.sqlite" -o -name "*.db" \) \
! -name "logs*.sqlite" \
-print0
まとめ
今回のポイントは、単にバックアップ全体を削るのではなく、復旧に必要な状態DBや設定ファイルは残しつつ、再生成可能・履歴用途・キャッシュ寄りのデータを除外したことです。
その結果、復旧可能性を大きく損なわずに、バックアップサイズを大幅に削減できました。

