[GAS]Googleドライブ内のファイル複製・権限変更・共有リンク取得・ファイル削除

# はじめに
Google Apps ScriptでGoogleドライブ内のファイル操作をする方法を記載します。内容は以下の通りです。
* フォルダの取得、ファイルの取得
* ファイルの複製
* 権限の変更
* 共有リンクの取得
* ファイルの削除（ゴミ箱へ移動）

以下では、`ファイル`操作として記載しますが、`フォルダ`操作でも同じ記述の場合もあります。


【公式ドキュメント】

https://developers.google.com/apps-script/reference/drive/drive-app?hl=ja

# フォルダの取得、ファイルの取得
まずは、フォルダ中のフォルダやファイルの取得方法を記します。取得結果はイテレータで返されるので少し扱いが複雑です。

## フォルダ内のフォルダの取得
ここでは、例としてフォルダ名を表示するコードを記します。



公式ドキュメント
https://developers.google.com/apps-script/reference/drive/drive-app?hl=ja#getfolders

```js
var folder_id = '[フォルダのIDを取得しておく]'
var folder = DriveApp.getFolderById(folder_id); // フォルダIDでフォルダを取得

// フォルダ内のフォルダ一覧をイテレータで取得する
var folder_list = folder.getFolders();

// 例としてフォルダ名を表示する
while (folder_list.hasNext()) {

    // 次のアイテムを取得する
    var each_folder = folder_list.next();
    // フォルダ名を取得する
    var folder_name = each_folder.getName();
    // 取得したフォルダ名を表示する
    console.log(folder_name);
    
}
```

## フォルダ内のファイルの取得
ここでは、例としてフォルダ内の、全てのフォルダの中にあるファイル名を表示するコードを記します。

公式ドキュメント
https://developers.google.com/apps-script/reference/drive/folder?hl=ja#getfiles


```js
var folder_id = '[フォルダのIDを取得しておく]'
var folder = DriveApp.getFolderById(folder_id);

// フォルダ内のフォルダ一覧をイテレータで取得する
var folder_list = folder.getFolders();


// 先ほど同様、フォルダ内のフォルダを取得する
while (folder_list.hasNext()) {

    // 次のアイテムを取得する
    var each_folder = folder_list.next();

    
    //フォルダ内のファイル一覧を取得する
    var file_list = each_folder.getFiles();

    // イテレータを展開していく
    while (file_list.hasNext()) {

        // 次のアイテムを取得する
        var each_file = file_list.next();
        // ファイル名を取得する
        var file_name = flie_list.getName();
        // 取得したフォルダ名を表示する
        console.log(file_name);
        
}
```





# ファイル複製
`.makeCopy(name, destination)` メソッドを用いる。
* `name`：複製時のファイル名
* `destination`：複製先のフォルダ

公式ドキュメント
https://developers.google.com/apps-script/reference/drive/file?hl=ja#makecopyname,-destination

```js
var target_file = '複製するファイル'
var file_name = `複製時のファイル名を指定する`; // 指定しないと「～ のコピー」が付加される
var destination = 'コピー先のフォルダ'; // 指定しないと複製元と同じフォルダに複製される

// 複製するだけ
target_file.makeCopy(file_name, destinaion);

// 複製したファイルを取得する場合
var file = target_file.makeCopy(file_name, destinaion);
```

# 権限の変更
`.setSharing(accessType, permissionType)` メソッドを用いる。
* `accessType`：アクセス許可範囲を指定。[詳細はこちら](https://developers.google.com/apps-script/reference/drive/access?hl=ja#properties)。
    * `ANYONE` `ANYONE_WITH_LINK` `DOMAIN` `DOMAIN_WITH_LINK` `PRIVATE`
* `permissionType`：アクセス権限の種類を指定。[詳細はこちら](https://developers.google.com/apps-script/reference/drive/permission?hl=ja#properties)。
    * `VIEW` `EDIT` `COMMENT` `OWNER` `ORGANIZER` `FILE_ORGANIZER` `NONE`   



公式ドキュメント
https://developers.google.com/apps-script/reference/drive/file?hl=ja#setsharingaccesstype,-permissiontype

```js
// 範囲：リンクを知っている全員　かつ　権限：閲覧者　の場合
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);

// 範囲：リンクを知っている全員　かつ　権限：編集者　の場合
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);
```

# 共有リンクの取得
`.getUrl()` メソッドを用いる。

公式ドキュメント
https://developers.google.com/apps-script/reference/drive/file?hl=ja#geturl

```js
var link = file.getUrl();
```

# ファイル削除（ゴミ箱に移動）
`.setTrashed(trashed) ` メソッドを用いる。ゴミ箱に移動されるだけで、完全削除ではないので注意。
* `trashed`：`true`を指定して削除する

公式ドキュメント
https://developers.google.com/apps-script/reference/drive/file?hl=ja#settrashedtrashed
```js
file.setTrashed(true);
```