フォルダを階層化して一気に作成したい

プロジェクトごとにドキュメントの管理をする上で、フォルダごとに設計資料や営業関係の資料、マニュアルなどなどフォルダ分けてして管理すると思います。これをプロジェクトが発足するたびに作るの面倒なだなーと思ってスクリプトでのやり方を調査。

Google Apps Scriptの Drive Service

Google Apps ScriptのリファレンスにDrive ServiceというClassがあったのでこれを使います。

ルートディレクトリにフォルダの作成

早速、フォルダの作成をしてみます。以下のような階層のフォルダ構成を作成してみます。

テストプロジェクト
┣営業関係
┣設計関係
┗運用関係
 ┣運用マニュアル
 ┗顧客情報

単純に自分のルートディレクトリにフォルダの作成をするには以下のように記述します。

var folder = DriveApp.createFolder("テストプロジェクト");

createFolderメソッドに引数に作成するフォルダ名を渡します。戻り値は、Folderクラスになります。これをfolderという変数に保存しています。これは、この作成したフォルダの中にさらにフォルダを作成するために戻り値を保存しておく必要があります。

2階層目のフォルダ作成

次にテストプロジェクトフォルダの下の階層を作成。folder変数のクラスを使って、createFolderメソッドを同じように実行します。

var folder  = DriveApp.createFolder("テストプロジェクト");
var args1   = ["営業関係","設計関係","運用関係"];
var folder1 = [];
  
for (var i = 0; i < args1.length; i++){
  folder1[i] = folder.createFolder(args1[i]);
}

作成するフォルダが複数なので、フォルダ名を配列(args1)に保存して、それを元にフォルダ作成をします。その際に、作成したフォルダの戻り値も配列(folder1)に保存しておきます。さらに下の階層を作成するためです。

3階層目のフォルダ作成

最後に3階層目の作成。「運用関係」フォルダの中に「運用マニュアル」「顧客情報」のフォルダを作成します。

var folder  = DriveApp.createFolder("テストプロジェクト");
var args1   = ["営業関係","設計関係","運用関係"];
var args2   = ["運用マニュアル","顧客情報"];
var folder1 = [];
  
for (var i = 0; i < args1.length; i++){
  folder1[i] = folder.createFolder(args1[i]);
}

for (var i = 0; i < args2.length; i++){
  folder1[2].createFolder(args2[i]);
}

3階層目のフォルダ名も2階層目と同じように配列(args2)に保存しておきます。それを繰り返すのですが、2階層目の「運用関係」フォルダのクラス(folder1[2])がターゲットなので、それに対してcreateFolderメソッドを実行します。
この階層が最後なので、戻り値は取っていません。

できたらこのプログラムを実行します。実行したらGoogleDriveのマイドライブ直下にフォルダが作成されているか確認してみましょう。

createFolder実行結果

できた!\(^o^)/
ちゃんと3階層目まで出来上がっています。これでフォルダ作成が楽になる。

指定のフォルダの中にフォルダを作成する

もう少しアレンジ。先程はマイドライブ直下に作成したのですが、指定したフォルダの中にフォルダを作成したい場合はどうするか?その場合、フォルダIDを指定してフォルダを作成することになります。
まずは、フォルダのIDをどこで取得するかというところから。指定するフォルダをGoogleDriveで選択して、そのURLを確認してください。

GoogleDriveのフォルダIDを確認

foldersパス以下の乱数がIDになります。

https://drive.google.com/drive/folders/{フォルダid}

これをコピーして以下のようにプログラムを書き換えます。

function createFolder() {
  var folder  = DriveApp.getFolderById("フォルダID");
  //var folder  = DriveApp.createFolder("テストプロジェクト");
  var args1   = ["営業関係","設計関係","運用関係"];
  var args2   = ["運用マニュアル","顧客情報"];
  var folder1 = [];
  
  for (var i = 0; i < args1.length; i++){
    folder1[i] = folder.createFolder(args1[i]);
  }

  for (var i = 0; i < args2.length; i++){
    folder1[2].createFolder(args2[i]);
  }
}

DriveAppsクラスのgetFolderByIdメソッドにフォルダIDを渡すと戻り値のFolderクラスが返ってくるので、これを基準にフォルダ作成をすればOK。ここだけで他は変えなくて大丈夫です。便利〜(^o^)