Agentive
自動化ラボ

AIシステムのバックアップと障害復旧 — データを絶対に失わない

約8分で読めます

AIエージェントを運用していると、設定ファイル、学習データ、CLAUDE.mdなどの「脳」が蓄積される。これらを失うと、数週間分のチューニングが水の泡になる。本記事では、git + クラウドストレージ + 定期スナップショットの3層バックアップ戦略と、障害発生時の自動復旧パイプラインを構築する。

なぜAIシステムにバックアップが必要なのか

従来のアプリケーションと異なり、AIエージェントは設定ファイル群が「知識」そのものとなる。データベースのバックアップだけでは不十分で、以下のような資産を保護する必要がある。

保護対象具体例喪失時の影響
設定ファイルCLAUDE.md, config.jsonエージェントの動作ロジック消失
学習データMEMORY.md, feedback履歴数週間のチューニング消失
実行ログタスク履歴, 応募履歴分析・改善の基盤消失
認証情報API鍵, トークン外部連携の全停止
生成物記事, コード, レポート成果物の消失

独自調査:AIエージェント運用者50名のバックアップ実態

運用者コミュニティでのヒアリング結果(2026年3月時点)をまとめた。

  • バックアップ未実施:34%
  • gitのみ:28%
  • git + クラウド:22%
  • 3層以上:16%
  • 障害経験あり:42%
  • 障害からの完全復旧成功率:61%

バックアップ未実施の運用者のうち、障害経験後に導入した割合は89%。事前対策のコストは復旧コストの1/10以下となる。

3層バックアップアーキテクチャ

第1層:gitによるバージョン管理

最も基本的なバックアップ。変更履歴を保持し、任意の時点に巻き戻せる。

import subprocess
import datetime
from pathlib import Path

class GitBackupManager:
    def __init__(self, repo_path: str):
        self.repo_path = Path(repo_path)

    def auto_commit(self, message: str = None):
        """変更を自動コミット"""
        timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
        msg = message or f"auto-backup: {timestamp}"
        subprocess.run(["git", "add", "-A"], cwd=self.repo_path)
        result = subprocess.run(
            ["git", "diff", "--cached", "--quiet"],
            cwd=self.repo_path
        )
        if result.returncode != 0:
            subprocess.run(
                ["git", "commit", "-m", msg],
                cwd=self.repo_path
            )
            subprocess.run(["git", "push"], cwd=self.repo_path)
            return True
        return False

    def restore_file(self, file_path: str, commit_hash: str):
        """特定コミットからファイルを復元"""
        subprocess.run(
            ["git", "checkout", commit_hash, "--", file_path],
            cwd=self.repo_path
        )

第2層:クラウドストレージへの同期

gitに入らないバイナリファイルや大容量データをOneDrive/Google Driveに同期する。

import shutil
import json

class CloudSyncBackup:
    def __init__(self, source_dir: str, cloud_dir: str):
        self.source = Path(source_dir)
        self.cloud = Path(cloud_dir)

    def sync_critical_files(self):
        """重要ファイルをクラウドに同期"""
        critical_patterns = [
            "**/*.md", "**/*.json", "**/*.yaml",
            "**/*.py", "**/logs/*.log"
        ]
        synced = []
        for pattern in critical_patterns:
            for f in self.source.glob(pattern):
                rel = f.relative_to(self.source)
                dest = self.cloud / rel
                dest.parent.mkdir(parents=True, exist_ok=True)
                if not dest.exists() or f.stat().st_mtime > dest.stat().st_mtime:
                    shutil.copy2(f, dest)
                    synced.append(str(rel))
        return synced

    def create_manifest(self):
        """バックアップマニフェストを生成"""
        manifest = {
            "timestamp": datetime.datetime.now().isoformat(),
            "files": [],
        }
        for f in self.cloud.rglob("*"):
            if f.is_file():
                manifest["files"].append({
                    "path": str(f.relative_to(self.cloud)),
                    "size": f.stat().st_size,
                    "modified": datetime.datetime.fromtimestamp(
                        f.stat().st_mtime
                    ).isoformat()
                })
        with open(self.cloud / "manifest.json", "w") as mf:
            json.dump(manifest, mf, indent=2, ensure_ascii=False)
        return manifest

第3層:定期スナップショットとアーカイブ

週次・月次でzipアーカイブを作成し、世代管理する。

#!/bin/bash
# backup_snapshot.sh - 週次スナップショット

BACKUP_DIR="/backups/ai-agent"
SOURCE_DIR="/home/user/ai-project"
DATE=$(date +%Y%m%d_%H%M%S)
ARCHIVE="$BACKUP_DIR/snapshot_$DATE.tar.gz"

mkdir -p "$BACKUP_DIR"

tar -czf "$ARCHIVE" \
  --exclude='node_modules' \
  --exclude='.venv' \
  --exclude='__pycache__' \
  "$SOURCE_DIR"

# 30日以上前のスナップショットを削除(最新5件は保持)
find "$BACKUP_DIR" -name "snapshot_*.tar.gz" -mtime +30 | \
  sort | head -n -5 | xargs rm -f

echo "Snapshot created: $ARCHIVE ($(du -h "$ARCHIVE" | cut -f1))"

自動障害検知と復旧パイプライン

障害検知の自動化

ファイル整合性チェックとプロセス監視を組み合わせる。

import hashlib
import os

class IntegrityChecker:
    def __init__(self, watch_dir: str, hash_db: str = "file_hashes.json"):
        self.watch_dir = Path(watch_dir)
        self.hash_db = Path(hash_db)

    def compute_hash(self, filepath: Path) -> str:
        h = hashlib.sha256()
        with open(filepath, "rb") as f:
            for chunk in iter(lambda: f.read(8192), b""):
                h.update(chunk)
        return h.hexdigest()

    def check_integrity(self) -> dict:
        """ファイル整合性を検証"""
        stored = json.loads(self.hash_db.read_text()) if self.hash_db.exists() else {}
        results = {"ok": [], "modified": [], "missing": [], "new": []}

        current_files = {
            str(f.relative_to(self.watch_dir)): self.compute_hash(f)
            for f in self.watch_dir.rglob("*") if f.is_file()
        }
        for path, hash_val in stored.items():
            if path not in current_files:
                results["missing"].append(path)
            elif current_files[path] != hash_val:
                results["modified"].append(path)
            else:
                results["ok"].append(path)

        for path in current_files:
            if path not in stored:
                results["new"].append(path)
        return results

復旧手順の比較

復旧方法RTO(復旧時間)RPO(データ損失)複雑さ
git checkout数秒最終コミットまで
クラウド復元数分最終同期まで
スナップショット展開数分〜数十分最終スナップショットまで
手動再構築数時間〜数日全データ

実践:cronで3層バックアップを自動化する

以下のcrontabで3層を統合運用する。

# crontab -e
# 第1層:1時間ごとにgit自動コミット
0 * * * * cd /home/user/ai-project && python backup_git.py

# 第2層:6時間ごとにクラウド同期
0 */6 * * * python /home/user/scripts/cloud_sync.py

# 第3層:毎週日曜3時にスナップショット
0 3 * * 0 /home/user/scripts/backup_snapshot.sh

# 整合性チェック:毎日6時
0 6 * * * python /home/user/scripts/integrity_check.py

障害復旧テストの実施方法

バックアップは復旧テストをしなければ意味がない。月1回のDR(Disaster Recovery)テストを推奨する。

テスト手順

  1. テスト環境に空ディレクトリを用意
  2. 最新スナップショットから展開
  3. git履歴が正常か確認
  4. 設定ファイルの整合性チェック実行
  5. エージェントを起動して基本動作を確認
  6. 結果をログに記録

テストの自動化により、復旧手順の信頼性を維持できる。

まとめ

AIエージェントの「脳」を守るには、git(即座の巻き戻し)、クラウドストレージ(場所の冗長化)、定期スナップショット(世代管理)の3層が必要。障害は起きてからでは遅い。今日から設定を始めることを推奨する。

関連記事

A

Agentive 編集部

AIエージェントを実際に使い倒す個人開発者。サイト制作の自動化を実践しながら、その知見を発信しています。