スプレッドシート自動バックアップ

目次

Googleスプレッドシートを自動バックアップする方法【GASで毎日コピー&世代管理】

Googleスプレッドシートは複数人で編集できて便利ですが、こんな不安はありませんか?

  • 誰かが間違えてデータを消してしまったらどうしよう…
  • 上書きしてしまって、元に戻せなくなったら困る
  • 毎日「コピーを作って保存する」のがめんどう

そんなときにおすすめなのが、GAS(Google Apps Script)でスプレッドシートを自動バックアップする仕組みを作ることです。
一度設定しておけば、あとは毎日自動でバックアップが作られるので、とても安心です。

この自動バックアップでできること

  • 毎日決まった時間に、シートのコピーを自動で作成
  • バックアップ用フォルダにまとめて保存
  • 古いバックアップを自動削除して、数を整理(30日以上前など)

この記事では、初心者でもコピペでできるように、コードと設定手順を詳しく解説します。

① バックアップ用のフォルダを作成する

まずは、バックアップを保存する場所として、Googleドライブにフォルダを作ります。

  • Googleドライブを開く
  • 「新規」→「フォルダ」
  • フォルダ名を例:「スプレッドシート_バックアップ」などにする

フォルダを作ったら、そのフォルダのIDを取得します。

  • 作ったフォルダを右クリック → 「リンクを取得」
  • URLの中の folders/〜 の「〜」の部分がフォルダID
  • 例: https://drive.google.com/drive/folders/XXXXXXXXXXXXXXXXXXXXXXXXXXXX 部分

② GASで自動バックアップするスクリプトを書く

次に、バックアップしたいスプレッドシートから、GAS(スクリプトエディタ)を開きます。

  • スプレッドシートを開く
  • メニュー「拡張機能」→「Apps Script」
  • 新しいGASプロジェクトが開くので、中身を全削除してから、次のコードを貼り付けます

▼ 毎日1つずつバックアップを作るシンプル版

// バックアップを保存するフォルダのIDを入れてください
const BACKUP_FOLDER_ID = "ここにフォルダIDを入れる";

function backupSheetDaily() {
  // 元のスプレッドシート
  const source = SpreadsheetApp.getActiveSpreadsheet();
  const sourceFile = DriveApp.getFileById(source.getId());

  // バックアップ先フォルダ
  const folder = DriveApp.getFolderById(BACKUP_FOLDER_ID);

  // 日付入りの名前を作成(例:元シート名_backup_2025-12-05)
  const dateStr = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd");
  const newName = source.getName() + "_backup_" + dateStr;

  // コピーを作成してフォルダに保存
  const copiedFile = sourceFile.makeCopy(newName, folder);

  Logger.log("バックアップを作成しました:" + copiedFile.getName());
}

【編集ポイント】
BACKUP_FOLDER_ID の部分だけ、さきほどメモしたフォルダIDに書き替えてください。

③ 自動で毎日バックアップするトリガーを設定

このままだと、まだ手動でしか動きません。
「毎日自動で実行」するために、トリガーを設定します。

  • GAS画面右上の「時計マーク(トリガー)」をクリック
  • 「トリガーを追加」ボタンを押す
  • 実行する関数 → backupSheetDaily を選択
  • イベントの種類 → 「時間主導型」
  • 時間ベースのトリガー → 「日付ベースのタイマー」
  • 好きな時間帯(例:午前5〜6時)を選択

これで、毎日決まった時間に、シートのバックアップが自動で作られるようになります。

④ 古いバックアップを自動で整理(30日以上前を削除)

毎日バックアップを作り続けると、フォルダがいっぱいになってしまいます。
そこで、古いバックアップ(たとえば30日より前のもの)を自動で削除するコードも用意しておくと便利です。

▼ バックアップ作成+30日以上前のものを削除するバージョン

// バックアップ+古いファイル削除版
const BACKUP_FOLDER_ID = "ここにフォルダIDを入れる";

function backupSheetWithCleanup() {
  const source = SpreadsheetApp.getActiveSpreadsheet();
  const sourceFile = DriveApp.getFileById(source.getId());
  const folder = DriveApp.getFolderById(BACKUP_FOLDER_ID);

  // 1. 今日のバックアップを作成
  const dateStr = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy-MM-dd");
  const newName = source.getName() + "_backup_" + dateStr;
  const copiedFile = sourceFile.makeCopy(newName, folder);
  Logger.log("バックアップ作成:" + copiedFile.getName());

  // 2. フォルダ内のファイルをチェックし、30日以上前のものを削除
  const files = folder.getFiles();
  const now = new Date();

  while (files.hasNext()) {
    const file = files.next();
    const created = file.getDateCreated();
    const diffDays = (now - created) / (1000 * 60 * 60 * 24); // 日数差に変換

    if (diffDays > 30) {
      Logger.log("古いバックアップを削除:" + file.getName());
      file.setTrashed(true); // ゴミ箱に移動
    }
  }
}

この関数をトリガーにセットすれば、

  • 毎日バックアップを1つ作成
  • 30日より前のバックアップは自動的にゴミ箱へ

という「世代管理されたバックアップ」が自動で維持されます。

⑤ よくあるつまずきポイントと注意点

  • 権限エラーが出る → 初回実行時に、GAS画面から手動で関数を1回実行し、アクセス許可を与えてください。
  • 別のシートのバックアップを取りたいSpreadsheetApp.openById("シートID") を使えば、別ファイルもバックアップできます。
  • 共有ドライブのファイル → 権限や所在によっては DriveApp での操作に制限があることがあります。

まとめ:自動バックアップで「うっかりミス」に備えよう

GASを使えば、

  • 毎日自動でスプレッドシートをコピーして保存
  • バックアップ専用フォルダで管理
  • 古いバックアップは自動削除

といった仕組みを、無料で簡単に作ることができます。

大事なシートほど、自動バックアップを設定しておくと安心です。
まずは1つのシートから試してみて、うまく動いたら他のシートにも展開してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次