
GASのフォルダやファイルの作成
Google Apps Script (以下GAS) でフォルダやファイルを作成するにはcreateFolderやcreateFileを使用するのだが、ターミナルのmkdirやtouchのようにそのまま使用してはいけない。
同名のフォルダやファイルが作成される
ターミナルでmkdirやtouchを使用しても同じフォルダ内に同名のフォルダやファイルが作成されることはない。
mkdir foo touch bar.txt
しかし、GASのcreateFolderやcreateFileは同じフォルダ内に同名のフォルダやファイルが作成可能なので、そのままだと同名のフォルダやファイルが作成されてしまう。
function myFunction() {
const driveFolderId = 'google_drive_folder_id'
const folder = DriveApp.getFolderById(driveFolderId)
folder.createFolder('foo')
folder.createFile('bar.txt', 'Hello world!')
}

すでにフォルダやファイルがあるか判定する
同じフォルダ内に同名のフォルダやファイルが作成されないようにするには同名のフォルダやファイルが存在しているか判定して存在していないときのみcreateFolderやcreateFileで作成するようにすれば良い。
やり方はgetFoldersやgetFilesでフォルダやファイルの一覧を取得して、whileで一覧に同名のフォルダ(ファイル)があるか調べる。
存在する場合はhasFolderName(hasFileName)をtrueにしてbreakしたあと条件分岐で作成するよう処理すれば良い。
function createFolder() {
const folder = DriveApp.getRootFolder()
const folders = folder.getFolders()
const folderName = 'foo'
let hasFolderName = false
while (folders.hasNext()) {
const folder = folders.next()
if (folder.getName() === folderName) {
hasFolderName = true
console.log(`${folderName}フォルダが存在します。`)
break
}
}
if (!hasFolderName) {
folder.createFolder(folderName)
console.log(`${folderName}フォルダがないので作成しました。`)
}
}
function createFiles() {
const folder = DriveApp.getRootFolder()
const files = folder.getFiles()
const fileName = 'foo.txt'
let hasFileName = false
while (files.hasNext()) {
const file = files.next()
if (file.getName() === fileName) {
hasFileName = true
console.log(`${fileName}ファイルが存在します。`)
break
}
}
if (!hasFileName) {
folder.createFile('foo.txt', 'Hello world!')
console.log(`${fileName}ファイルがないので作成しました。`)
}
}