業務自動化

GASでGoogleドライブ自動バックアップ 中小企業のファイル消失リスクをゼロに

士業・制作会社・EC・サロン・教室・不動産など、共有フォルダで業務データを管理する中小企業/個人事業主 の業務自動化レシピ
業種士業・制作会社・EC・サロン・教室・不動産など、共有フォルダで業務データを管理する中小企業/個人事業主
ツールGoogle Apps Script
難易度★★☆ 中
設定時間約 30 分

Googleドライブは便利ですが、標準機能だけでは「フォルダごと誤って削除された」「共同編集者が上書きしてしまった」という事故に弱い面があります。Google Apps Script(以下 GAS)で毎日フォルダを複製し、世代管理まで行う仕組みを、追加ツールなし・月額¥0で構築する方法をコードごと公開します。

読了時間 約9分 / 設定所要時間 約30分 / 月額固定費 ¥0

編集長の見解:Google ドライブの「ファイルの復元」は、あくまで個々のファイルの変更履歴やゴミ箱を対象にした仕組みです。フォルダ単位で「昨日の状態にまるごと戻す」ことは想定されていません。ここで重要なのは、高価なバックアップ専用製品を導入する前に、Google が無料で配っている実行環境で最低限の世代バックアップを自前で持っておくことです。

🔍 なぜ Google ドライブ標準機能だけでは足りないのか

Google ドライブには、ファイルの変更履歴(バージョン管理)とゴミ箱という 2 つの復元手段が備わっています。どちらも便利ですが、限界があります。

これらのすき間を埋めるのが「毎日、別の場所へフォルダごと複製しておく」という古典的だが確実な対策です。次のセクションで、その全体像を図にします。

🗺 全体フロー — 3ステップで完結

仕組みは単純です。毎日決まった時刻に GAS が起動し、対象フォルダの中身をタイムスタンプ付きの新しいフォルダへ複製したうえで、古い世代を自動整理します。

日次バックアップの全体像
01
時間トリガー起動
毎日決まった時刻にGASが自動実行
📁
02
フォルダを複製
日付付きフォルダへ丸ごとコピー
🗑
03
古い世代を整理
指定件数を超えた分をゴミ箱へ

毎日決まった時刻に自動実行、人の操作はゼロ

登場する部品は 2 つだけです。役割を整理します。

部品役割公式ドキュメント
DriveApp サービスフォルダ・ファイルの複製と削除を操作DriveApp リファレンス
時間主導型トリガー毎日決まった時刻に関数を自動実行インストール型トリガー

この 2 つをつなぐのが、次のセクションで示すコードです。コピーして貼り付けるだけで済みます。

💰 必要なものと費用の目安

このレシピは、追加の支出が一切発生しない構成です。用意するものを表で確認してください。

必要なもの役割費用の目安
Googleアカウント(無料 or Workspace)バックアップ対象フォルダと保存先フォルダの用意無料(Workspace は既存契約で可)
Google Apps Script複製・世代管理・トリガー実行の実行環境無料
Google ドライブの空き容量複製先の保存領域(世代数 × フォルダ容量分)既存プランの容量内(無料15GB〜)

複製のたびに元フォルダと同じ容量を消費するため、世代数を増やすほどドライブ容量を使います。容量が気になる場合は保持する世代数を減らすか、Google One の有料プランで容量追加を検討してください。

💡 編集部の判断材料:すでに専用バックアップ製品を契約中なら、無理に乗り換える必要はありません。GAS が向くのは「まずは無料で最低限の世代バックアップを持ちたい」「特定の重要フォルダだけ守りたい」ケースです。フォルダ更新をチームに通知したい場合はZapierでGoogleドライブ新ファイル→Slack自動共有するレシピもあわせて検討してください。

判断がついたら、実際の構築に進みます。

🛠 設定手順 — 約30分で完成

作業は「複製元と複製先のフォルダを用意する」「GAS 側でコードを貼る」「日次トリガーを設定する」の3段階です。プログラミングの知識は不要で、コードは本記事のものをそのまま貼り付ければ動きます。

GAS × Googleドライブ 自動バックアップの構築手順
STEP 1
複製元フォルダの ID を控える
バックアップしたい業務フォルダを Google ドライブで開き、アドレスバーの URL 末尾(/folders/ の後ろ)の文字列を控えます。
STEP 2
複製先フォルダを新規作成
複製元とは別の場所に「バックアップ保存用」フォルダを新規作成し、同様に ID を控えます。誤って元フォルダの中に作らないよう注意してください。
STEP 3
Apps Script プロジェクトを作成
script.google.com にアクセスし、「新しいプロジェクト」を作成します。
STEP 4
コードを貼り付けて保存
下記のコードを丸ごと貼り付け、STEP 1〜2 の ID をスクリプトプロパティに登録します(手順は次項)。
STEP 5
日次トリガーを設定
エディタ左の時計アイコンから「トリガーを追加」、イベントの種類に「時間主導型」→「日タイマー」を選び、実行したい時間帯(例: 午前3時〜4時)を指定します。
STEP 6
手動実行でテスト
エディタの実行ボタンで dailyBackup を一度手動実行し、複製先フォルダに日付付きフォルダができているか確認します。

貼り付けるコード(そのまま動きます)

以下を Apps Script エディタの コード.gs に貼り付けてください。日次トリガーから呼ばれる dailyBackup が本体です。

/**
 * Googleドライブ フォルダの自動バックアップ(世代管理付き)
 * トリガー: 時間主導型(日タイマー)で dailyBackup を実行
 */
function dailyBackup() {
  const props = PropertiesService.getScriptProperties();
  const sourceFolderId = props.getProperty('SOURCE_FOLDER_ID');
  const backupParentId = props.getProperty('BACKUP_PARENT_FOLDER_ID');
  const keepGenerations = Number(props.getProperty('KEEP_GENERATIONS') || '7');

  if (!sourceFolderId || !backupParentId) {
    throw new Error('SOURCE_FOLDER_ID / BACKUP_PARENT_FOLDER_ID がスクリプトプロパティに未設定です');
  }

  const sourceFolder = DriveApp.getFolderById(sourceFolderId);
  const backupParent = DriveApp.getFolderById(backupParentId);

  const timestamp = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMdd_HHmm');
  const backupFolderName = sourceFolder.getName() + '_backup_' + timestamp;
  const newBackupFolder = backupParent.createFolder(backupFolderName);

  copyFolderContents_(sourceFolder, newBackupFolder);
  pruneOldBackups_(backupParent, sourceFolder.getName(), keepGenerations);

  console.log('バックアップ完了: ' + backupFolderName);
}

/**
 * フォルダ配下のファイル・サブフォルダを再帰的に複製
 */
function copyFolderContents_(source, destination) {
  const files = source.getFiles();
  while (files.hasNext()) {
    const file = files.next();
    file.makeCopy(file.getName(), destination);
  }

  const folders = source.getFolders();
  while (folders.hasNext()) {
    const folder = folders.next();
    const newSubFolder = destination.createFolder(folder.getName());
    copyFolderContents_(folder, newSubFolder);
  }
}

/**
 * 世代管理: 指定件数を超えた古いバックアップフォルダをゴミ箱へ移動
 */
function pruneOldBackups_(backupParent, sourceName, keepGenerations) {
  const prefix = sourceName + '_backup_';
  const backups = [];

  const folders = backupParent.getFolders();
  while (folders.hasNext()) {
    const folder = folders.next();
    if (folder.getName().indexOf(prefix) === 0) {
      backups.push(folder);
    }
  }

  backups.sort(function (a, b) {
    return b.getDateCreated().getTime() - a.getDateCreated().getTime();
  });

  for (let i = keepGenerations; i < backups.length; i++) {
    backups[i].setTrashed(true);
  }
}

スクリプトプロパティの登録(コードに直書きしない)

STEP 1〜2 で控えた 2 つの ID は、コードに直接書かず「スクリプトプロパティ」に保存します。コードを他の担当者と共有する際にフォルダ ID が漏れるのを防ぐためです。

  1. Apps Script エディタ左の**歯車アイコン(プロジェクトの設定)**を開く
  2. 最下部の「スクリプト プロパティ」で「スクリプト プロパティを追加」をクリック
  3. SOURCE_FOLDER_ID(複製元フォルダ ID)、BACKUP_PARENT_FOLDER_ID(複製先フォルダ ID)、KEEP_GENERATIONS(保持する世代数、未設定なら既定7)をそれぞれ登録して保存

💡 編集部メモ:KEEP_GENERATIONS を7に設定すると直近1週間分の世代が残ります。容量に余裕があれば14や30に増やせますが、その分ドライブ容量を消費する点は表で確認した通りです。まずは7から始め、実際の容量消費を見て調整するのが現実的です。

保存とトリガー設定が終わったら、必ず手動実行で複製先フォルダの中身を確認してください。次のセクションで、つまずきやすい点を整理します。

⚠️ 失敗パターンと運用上の注意

GAS は無料で強力ですが、初回だけ引っかかりやすい関門と、運用上見落としがちな注意点があります。編集部が特に注意すべきと考える2点を挙げます。

⚠️ 失敗パターン1:複製先を複製元フォルダの中に作ってしまう。STEP 2 で複製先フォルダを誤って複製元の内側に作ると、バックアップ処理のたびにバックアップ自身も複製対象に含まれ、フォルダが際限なく肥大化します。複製先は必ず複製元と別の階層(マイドライブ直下など)に作成してください。

⚠️ 失敗パターン2:大容量フォルダで実行時間の上限に達する。Apps Script には1回の実行につき数分〜数十分の上限があります(無料アカウントは1日あたりの合計実行時間にも上限があります)。ファイル数が非常に多いフォルダでは、複製処理の途中でタイムアウトする可能性があります。詳細はApps Script の割り当てと制限を確認し、対象フォルダを業務上重要なサブフォルダ単位に絞ることをおすすめします。

初回設定時には、Google から「このアプリは確認されていません」という趣旨の警告が出ます。これは自分で書いたスクリプトに、自分のデータへのアクセスを許可するための画面です。詳細を開いてプロジェクト名が自分のものであることを確認し、承認すれば先へ進めます。

トラブル起こりやすい原因編集部の対策
バックアップフォルダができないフォルダ ID の誤り・権限不足スクリプトプロパティの ID を再確認
実行がエラーで止まる実行時間の上限超過対象フォルダを絞る、実行時間帯を分散
ドライブ容量が急に減る世代数が多すぎるKEEP_GENERATIONS を減らす
古い世代が消えないフォルダ名の命名規則が変わったsourceFolder.getName() を変更していないか確認

なお、setTrashed(true) で削除した古い世代はゴミ箱に入るだけで、即座に完全削除されるわけではありません。ゴミ箱に入ったファイルも30日で自動的に完全削除される点は、冒頭で紹介したGoogle Developers 公式ドキュメントの通りです。次のセクションで、この30分の投資が経営上どう返ってくるかを整理します。

🚀 経営者はこの30分をどう回収するか

編集部の想定シナリオを1つ挙げます。従業員8名のデザイン制作会社が、案件フォルダを Google ドライブの共有フォルダで管理しているケースです(実在の企業の事例ではありません)。

かかった費用は¥0、かかった時間は初回の30分だけです。基本形が動いたら、次の応用も同じコードの延長で組めます。

当サイトでは、Google ドライブ関連の自動化を複数紹介しています。あわせて読むと設計の引き出しが増えます。

編集部のまとめ:このレシピの本質は「もしもの時の被害上限を、無限大から1日分に縮める」ことです。GAS を選べば、その仕組みを月¥0で、専用バックアップ製品を検討する前段階として持てます。まずは1つの重要フォルダで動かしてみて、安定を確認してから対象を広げるのが堅実な順序です。

出典・参考情報


Mira / AI経営ラボ 編集長