🤖

Google Apps Script(gas)で業務を自動化してみた【フォルダコピー】

2023/11/15に公開

こんにちは。shibuです。
本記事では、請求業務などの手作業で行っている一部の業務をGoogleAppsScript(gas)で自動化する方法を紹介します。日々の作業を少しでも効率的に進めていきたいと思う方の参考になればと思います。

背景

月初に管理部門に提出する書類を作成して、特定のフォルダに置いたうえで連絡するという業務がありました。手順は決まっていて大体10~15分で終わる作業ですが、月に1回の作業なので「手順を探す(思い出す)」ことから始めるので、少し面倒な作業でした。
この作業を少しでも楽にできないかと思い、「自動化」というキーワードで探していたところgasにたどり着き、やってみようと思いました。

いままでの作業

以下の手順を月初に手作業で行っていました。

  1. テンプレートのフォルダ(m月)をコピー&ペースト
  2. m月フォルダとフォルダ内のファイル郡(yyyymm_XXXX.txtなど)を当月にリネーム
  3. m月フォルダ内のファイル内容の変更とファイルの追加

テンプレートフォルダの構成

フォルダ構成は以下のようなものです。
フォルダ名、ファイル名は仮で名前を付けています。

m月/
 ├フォルダA
 │ ├ yyyymm_対象ファイルA.txt
 │ ├ yyyymm_対象ファイルB.xlsx
 │ └ yyyymm_対象ファイルC.docx
 ├フォルダB
 └ ├ yyyymm_対象ファイルA.txt
   ├ yyyymm_対象ファイルB.xlsx
   └ yyyymm_対象ファイルC.docx

やったこと

手順1~3までの作業で、手順1と2をgasで自動化するということを行いました。

スクリプトの作成

まず、googleドライブから「Google Apps Script」を選択してファイルを作成します。

コードの作成

次に「フォルダをコピーして、リネームする」処理のコードを書きます。手順1と2のところです。
エディタの「実行」でスクリプトが動きますので、プログラムが正しく動くかを確認できます。

function seikyu() {
  let srcFolderId = "XXXXXXXXXXXXXXXXXXXXXX"; // コピー元フォルダ
  let dstFolderId = "YYYYYYYYYYYYYYYYYYYYYY"; // コピー先フォルダ
  
  let srcFolder = DriveApp.getFolderById(srcFolderId);
  let dstFolder = DriveApp.getFolderById(dstFolderId);
  copy(srcFolder, dstFolder);//コピー元,コピー先
}

function copy(srcFolder, newFolder){
  let date = new Date();
  let yyyy = Utilities.formatDate(date,"JST", "yyyy");
  let m = Utilities.formatDate(date,"JST", "M");
  let mm = Utilities.formatDate(date,"JST", "MM");

  let srcFiles = srcFolder.getFiles();//フォルダ内ファイルを取得
  while(srcFiles.hasNext()) {
    let srcFile = srcFiles.next();
    let newFileName = srcFile.getName().replace("yyyy", yyyy).replace("mm", mm).replace("m", m);
    srcFile.makeCopy(newFileName, newFolder);
  }
  
  let srcFolders = srcFolder.getFolders();//フォルダ内フォルダを取得
  while(srcFolders.hasNext()) {
    let nextSrcFolder = srcFolders.next();
    let newFolderName = nextSrcFolder.getName().replace("yyyy", yyyy).replace("mm", mm).replace("m", m);
    let nextNewFolder = newFolder.createFolder(newFolderName);
    copy(nextSrcFolder, nextNewFolder); //再帰処理
  }
}

スクリプトの実行

実行すると以下のようにフォルダ名、ファイル名がリネームされます。
サブフォルダも再帰的にリネームしますので、フォルダが多階層になっても問題なくリネームします。また、スクリプトの置換する文字列を書き換えれば「年月」以外も特定のキーワードで書き換えることができます。

11月/
 ├フォルダA
 │ ├ 202311_対象ファイルA.txt
 │ ├ 202311_対象ファイルB.xlsx
 │ └ 202311_対象ファイルC.docx
 ├フォルダB
 └ ├ 202311_対象ファイルA.txt
   ├ 202311_対象ファイルB.xlsx
   └ 202311_対象ファイルC.docx

定期実行の設定

スクリプトを実行させるたびにgasを開くのは、手間なので定期的に実行されるようにします。
gasではトリガー機能を使うことで定期的にスクリプトを実行させることができます。
以下、毎月25日にスクリプトを実行する設定です。

おわりに

「たかが10分ほどの作業を自動化させるのは意味がないのでは?」という声はあると思いますが、そんな作業も「塵も積もれば山となる」ようにタスクの数が増えてくれば、1日の大半を占めることもあります。自動化できるところは自動化して、考える作業に時間を割くようにできたら良いかと思っています。また、自動化すると手作業に比べてミスも減り、品質向上にも繋がりますので、オススメです。

参考文献

https://qiita.com/ttyokoyama/items/a0eca28b49507c19fb7d

CareNet Engineers

Discussion