[GAS]Googleドライブ上のファイルを定期的に自動バックアップする: 逆引きGoogle Apps Script

2015 年 5 月 2 日 土曜日

DocsListは廃止されており、このページに記載されているコードは動作しません。AKIOKNG様より代替コードをコメント頂いておりますので、そちらをご参照下さい。

Time-driven(cronのようなもの)により、毎日指定した時間に、Googleドライブ上の指定したファイルを複製するサンプルスクリプト。

function backup() {  
  // ファイルコピー
  var file = DocsList.getFileById('xxxxxxx');
  var fileCopied = file.makeCopy(
      file.getName()+'-'+Utilities.formatDate(new Date(), 'JST', 'yyyy-MM-dd')
  );   
  
  // 指定したフォルダ(コレクション)に移動
  var folder = DocsList.getFolder('backup');
  fileCopied.addToFolder(folder);  
}

行3 DocsList.getFileById(String id)により、ドキュメントIdからFileインスタンスを生成する。
ドキュメントIdは、ドキュメントのURLから確認することができる。
環境により多少異なるが、例えば以下のようになる。

スプレッドシートの場合
https://docs.google.com/spreadsheet/ccc?key={ID}#gid=0
ドキュメントの場合
https://docs.google.com/document/d/{ID}
アップロードしたファイルの場合
https://docs.google.com/file/d/{ID}
行4

行6
{Fileインスタンス}.makeCopy(String ファイル名)で行3で生成したFileインスタンスをコピーすることができる。ここでは、コピー元ファイル名に現在日付をつけてコピーしている。
行9 GoogleドライブではFolderではなく「コレクション」と呼ぶが、DocsList.getFolder(String フォルダパス)またはDocsList.getFolder(String フォルダId)でFolderインスタンスを生成している。
行10 {Fileインスタンス}.addToFolder(Folder フォルダインスタンス)で、行7で取得したコレクションにファイルを追加することができる。backupコレクションを確認すると、コピーしたファイルがリストされているはずだ。

定期実行の設定をする

1.スクリプトエディタの「リソース」 ⇒ 「現在のスクリプトのトリガー」を選択

2.「No triggers set up. Click here to add one now.」をクリック

3.トリガを「Time-driven」にし、「Day timer」で実行時間帯(1時間単位)を指定する。

4.保存ボタンをクリック。

これで、毎日指定した時間帯に自動でバックアップされる。

注意

Time-drivenによる実行を行う前に、まずはエディタ上でスクリプトを実行し、ドキュメントリストへのアクセスを許可しておく必要がある。

関連記事

コメント / トラックバック 4 件

  • […] ・バックアップ先フォルダ名・バックアップ対象フォルダ名上記を設定して時間トリガーでお使いください。ただし、コピーするファイルが多すぎると途中で処理が止まります。ドライブを書き換える処理は1日に使用できる回数が決まっているようです。また、書き換え処理が一定時間で数やりすぎると途中で処理が止まります。なので「Utilities.sleep(5000);」でコピー処理を1度やるごとに毎回5秒のスリープを入れています。「50個程度のファイルを1日1回 同じGoogleドライブ内にバックアップを取る」時とかに使えると思います。ファイル数が増えて100個~200個となると、かなりの確率で途中で処理が止まります。・・・正直GASで書き込み関係の処理は制限ありすぎて使いもんにならない状態ですね。。有料でドライブ拡張したら制限が増えたりするんだろうか・・・。無料でなきゃ意味ないけど。・参考にしたリンク[GAS][スプレッドシート]シート名からシートオブジェクトを取得するには : …Google Apps Scriptで、Googleドキュメントのバックアップ | IT屋だけど、なにか?ファイル・フォルダの探索 – Google Apps 超利用マニュアル・・・など以上こんな感じ~ […]

  • […] もしもし・・・・ あの~もしもし・・・・ 突然スプレッドシートが 開かなくなりました。 サーバーのエラーかなと 思いましたがまったく数日たっても復旧せず Google Appsに申し込んでないので、 グーグルの無料サポートもうけることはできないので、 同じような症状の方の対策方法を 試してみましたが駄目でした。 バックアップが悔やまれる 幸いというのはどうかなと思いますが、 20日前にバックアップをとっていたので、 そちらを使う事にしました、。 仕事で使う道具にもかかわらず 毎日バックアップをとらないという意識が甘すぎでした。 ということでGoogleのスプレッドシートを 毎日朝の5時になると自動バックアップできるようにしました。 スプレッドシートをバックアップする方法は この2つを参考にしました。 Google Apps Scriptとはなにか? Googleドライブ上のファイルを定期的に自動バックアップする […]

  • AKIOKNG より:

    この記事には大変助かりました。ありがとうございます。
    これまで快調にバックアップしていたのですが、「DocsList」が2015年4月20日に廃止されたそうで、21日以降にエラーが出て困っておりました。色々調べて、「DriveApp」を使った以下のコードで、この記事と同じ処理ができることがわかりました。

    ========================================
    function backup() {
    // ファイルを指定
    var file = DriveApp.getFileById(‘XXXXXXXXXX’);
    // 格納先を指定
    var dest = DriveApp.getFolderById(‘XXXXXXXXXX’);
    // makeCopyに、変更後のファイル名と上記の格納先を指定
    file.makeCopy((file.getName()+’-‘+Utilities.formatDate(new Date(), ‘JST’, ‘yyyy-MM-dd’)), dest);
    }
    ========================================

    素人で自信ないのですが、とりあえずこのコードで私のところでは動いております。私を含めこの記事に助けられた方も多いと思いますので、ご参考までにシェアさせていただきます。

  • 管理者 より:

    AKIOKNGさん
    ご指摘ありがとうございます。たしかに、API廃止により、うまく動かなくなっております。そのことに気づいてはいるのですが、たくさんある「逆引きGoogle Apps Script」の記事をメンテナンスすることを考えると、ついつい目をそらしてしまっています。

    このような状態ですので、AKIOKNGさんのソースコード付きのコメントは、すごく助かります。記事からリンクさせて頂きました。どうもありがとうございます。

コメントをどうぞ

トラックバック

このエントリーのトラックバックURL:

http://www.bmoo.net/archives/2012/08/314599.html/trackback