Skip to content

Instantly share code, notes, and snippets.

@shikumiya-hata
Created October 26, 2020 05:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shikumiya-hata/8f6b660e5913d96d13d898f450092398 to your computer and use it in GitHub Desktop.
Save shikumiya-hata/8f6b660e5913d96d13d898f450092398 to your computer and use it in GitHub Desktop.
/**
* 共有ドライブの作成
*/
function createTeamDriveItems() {
// ------------------------------
// 共有ドライブ、フォルダ、ファイルの作成
// ------------------------------
// [作成するフォルダ構造]
// 共有ドライブ
// └ teamDriveA
// │ ├ file
// │ └ folderA-1
// │ └ file
// │ └ file
// └ teamDriveB
// └ folderB-1
// └ file
// 共有ドライブにフォルダ作成
const newTeamDriveA = create('teamDriveA')
const folderA = toFolder(newTeamDriveA)
// 共有ドライブにフォルダ作成
const newTeamDriveB = create('teamDriveB')
const folderB = toFolder(newTeamDriveB)
// 共有ドライブのフォルダ内にフォルダ作成
const folderA1 = folderA.createFolder('folderA-1')
const folderB1 = folderB.createFolder('folderB-1')
// 共有ドライブのフォルダ内にファイル作成
const inputFile = DriveApp.getFileById('XXXXXXXXXXXXXXXXXXXXXXXXX')
const mediaData = inputFile.getBlob()
const newFileOnA = folderA.createFile(mediaData)
const newFileOnA1a = folderA1.createFile(mediaData)
const newFileOnA1b = folderA1.createFile(mediaData)
const newFileOnB = folderB.createFile(mediaData)
//------------------------------
// ファイルとフォルダの移動操作
//------------------------------
// ファイルを、共有DriveA内のフォルダから共有DriveB内のフォルダに移動
newFileOnA1a.moveTo(folderB1)
// フォルダを、共有DriveA内のフォルダから共有DriveB内のフォルダに移動
folderA1.moveTo(folderB1)
// [移動後のフォルダ構造]
// 共有ドライブ
// └ teamDriveA
// │ ├ file
// └ teamDriveB
// └ folderB-1
// └ file
// └ file
// └ folderA-1
// └ file
//------------------------------
// 共有ドライブの更新
//------------------------------
// 共有ドライブAの名前を変更
newTeamDriveA.name = 'teamDriveA2'
newTeamDriveA = Drive.Teamdrives.update(newTeamDriveA, newTeamDriveA.id)
}
/**
* 共有ドライブの削除
*/
function removeTeamDrives() {
const teamDriveA = getByName('teamDriveA2')
if (teamDriveA) {
remove(teamDriveA)
}
const teamDriveB = getByName('teamDriveB')
if (teamDriveB) {
remove(teamDriveB)
}
}
/**
* フォルダに変換
* @param {TeamDrive} teamDrive - 共有ドライブ
* @return {Folder} - フォルダ
*/
function toFolder(teamDrive) {
return DriveApp.getFolderById(teamDrive.id)
}
/**
* 共有ドライブ名から共有ドライブを取得
* @param {string} teamDriveName - 共有ドライブ名
* @return {TeamDrive} - 共有ドライブ
*/
function getByName(teamDriveName) {
var teamDrives = Drive.Teamdrives.list().items
for (var i in teamDrives) {
var teamDrive = teamDrives[i]
if (teamDrive.name === teamDriveName) {
return teamDrive
}
}
}
/**
* 新規に共有ドライブを作成する
* @param {string} teamDriveName - 共有ドライブ名
* @return {TeamDrive} - 新規の共有ドライブ
*/
function create(teamDriveName) {
var teamDrive = Drive.newTeamDrive()
teamDrive.name = teamDriveName
var teamDriveId = Utilities.getUuid()
return Drive.Teamdrives.insert(teamDrive, teamDriveId)
}
/**
* 共有ドライブにフォルダを作成
* @param {TeamDrive} teamDrive - 親となる共有ドライブ
* @param {string} folderName - フォルダ名
* @return {Folder} - 作成したフォルダ
*/
function createFolder(teamDrive, folderName) {
return createFolderById(teamDrive.id, folderName)
}
/**
* 共有ドライブを削除
* @param {TeamDrive} teamDrive - 対象の共有ドライブ
*/
function remove(teamDrive) {
removeById(teamDrive.id)
}
/**
* 共有ドライブにフォルダを作成
* @param {string} teamDriveId - 共有ドライブID
* @param {string} folderName - フォルダ名
* @return {Folder} - 作成したフォルダ
*/
function createFolderById(teamDriveId, folderName) {
var parentFolder = DriveApp.getFolderById(teamDriveId)
return parentFolder.createFolder(folderName)
}
/**
* 共有ドライブを削除
* @param {string} teamDriveId - 対象の共有ドライブID
*/
function removeById(teamDriveId) {
var teamDriveFolder = DriveApp.getFolderById(teamDriveId)
// 直下のフォルダを全て削除
// 共有ドライブを削除するには中身を空にしなければならないので削除する
var folders = teamDriveFolder.getFolders()
while (folders.hasNext()) {
var folder = folders.next()
folder.setTrashed(true)
}
// 直下のファイルを全て削除
var files = teamDriveFolder.getFiles()
while (files.hasNext()) {
var file = files.next()
file.setTrashed(true)
}
// 空になったと認識されるまで時間がかかるので待つ
Utilities.sleep(10000)
// 共有Driveを削除
Drive.Teamdrives.remove(teamDriveId)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment