【Google Apps Script (GAS)】GASで再帰処理を実装してみた

2019年12月17日Google Apps

階層構造を作り上げる際は再帰処理を使うとシンプルなコーディングにできることがあります。

実装するには「ある関数の中で、ある条件の時に自分を呼び出す」と言葉で書けばシンプルですが、実際の処理がイメージし辛く、少し難しく感じることもあります。

再帰処理とは

スポンサーリンク

再帰処理をGoogleで検索するとQiitaの記事に下記のように記載されています。

自分自身を呼び出す関数を再帰的 (recursive) であると呼び、再帰的な関数のことを再帰関数 (recursive function) と呼びます。 また再帰的に関数を呼び出すことを再帰呼び出し (recursive call) と呼びます。

https://qiita.com/drken/items/23a4f604fa3f505dd5ad

実際プログラムを組んでいくと、関数の中に自分自身を呼び出す処理が記述してあります。
自分自身を呼び出して単に同じ処理を繰り返すというより、階層構造を作るイメージが私にとってはイメージしやすいと思っています。

繰り返し処理というとfor文やwhile文がイメージできますが、階層が深くなるほど、for文やwhile文での対応は難しくなります。
再帰処理を呼び出すと、階層が深くなってもその分だけ処理を繰り返してくれます。

実装例

DriveAppを使って、再帰処理を組んでみました。
フォルダを取得し、さらにその配下フォルダについてもフォルダ名をログに出力します。

function showFolderName(root) {
  var folders = root.getFolders();
  while (folders.hasNext()) {
    var folder = folders.next();
    Logger.log(folder.getName());
    showFolderName(folder);
  }
}

呼び出しはシンプルにすることができます。

function myFunction() {
  var folder = DriveApp.getFolderById([フォルダID]);
  showFolderName(folder);
}

「マイドライブ」から全てのフォルダを走査する時はDriveApp.getRootFolder()でルートフォルダを取得します。

function myFunction() {
  var folder = DriveApp.getRootFolder();
  showFolderName(folder);
}

Google Apps Scriptにおけるフォルダの操作についてはこちらにまとめています。

使用例

スポンサーリンク

フォルダ名を出力するのも調査などに使うことができます。
他にはフォルダを削除する際、その配下にある全てのファイル/フォルダについてファイルの場合は削除、フォルダの場合はさらにその配下のファイルを削除する。
といった処理にも使われます。

Google Apps Scriptで言えば、オリジナルメニューの作成にも使用できます。
詳しくはこちらの記事で紹介していますので、よかったらご覧ください。