目次
Contents
Googleスプレッドシートを自動バックアップする方法【GASで毎日コピー&世代管理】
Googleスプレッドシートは複数人で編集できて便利ですが、こんな不安はありませんか?
- 誰かが間違えてデータを消してしまったらどうしよう…
- 上書きしてしまって、元に戻せなくなったら困る
- 毎日「コピーを作って保存する」のがめんどう
そんなときにおすすめなのが、GAS(Google Apps Script)でスプレッドシートを自動バックアップする仕組みを作ることです。
一度設定しておけば、あとは毎日自動でバックアップが作られるので、とても安心です。
この自動バックアップでできること
- 毎日決まった時間に、シートのコピーを自動で作成
- バックアップ用フォルダにまとめて保存
- 古いバックアップを自動削除して、数を整理(30日以上前など)
この記事では、初心者でもコピペでできるように、コードと設定手順を詳しく解説します。
① バックアップ用のフォルダを作成する
まずは、バックアップを保存する場所として、Googleドライブにフォルダを作ります。
- Googleドライブを開く
- 「新規」→「フォルダ」
- フォルダ名を例:「スプレッドシート_バックアップ」などにする
フォルダを作ったら、そのフォルダのIDを取得します。
- 作ったフォルダを右クリック → 「リンクを取得」
- URLの中の
folders/〜の「〜」の部分がフォルダID - 例:
https://drive.google.com/drive/folders/XXXXXXXXXXXXXXのXXXXXXXXXXXXXX部分
② 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つのシートから試してみて、うまく動いたら他のシートにも展開してみてください。
