ファイル受け取り口（ファイルリクエスト）のついたフォルダを一気に作っちゃおう！

## そもそもファイルリクエストとは?

ファイルリクエストとは、Box上のフォルダで簡単にファイルを受け取れる口のことです。ファイルリクエストを利用すると、Boxアカウントを持たないユーザーからでも安全にファイルを受け取ることができます。
![Screenshot 2023-12-06 at 16.23.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627460/fe24898d-02ad-4939-011e-07bd2a5f7b82.png)

フォルダでファイルリクエストを有効にすると、そのURLを受け取った人は、簡単に指定したフォルダ内にファイルを保存できます。ドラッグ＆ドロップするだけでBox上の指定した場所へ素早くアップロードされます。
<br>

https://support.box.com/hc/ja/articles/360045304813-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%84%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B

アップロードする側にはBoxのアカウントは必要ないので、取引先にファイルをアップロードしてもらいたいときもURLをお知らせするだけで簡単に対応できます。

## 今回やりたいこと
特定の取引先からファイルを受け取る際には、各取引先ごとにフォルダを用意し、それぞれのフォルダに対してファイルリクエストがあると便利です。さらに管理を考慮すると、スプレッドシートで表形式に表示されている方が見やすくなります。
<br>

この作業をWebアプリケーション上で行うためには、以下の手順が必要です。
1. 取引先ごとにフォルダを作成（全ての取引先社数分）
2. 各フォルダを開き、そこでファイルリクエストを設定（全ての取引先社数分）
2. スプレッドシート上で各取引先名・Box内のフォルダID・そして該当するファイルリクエストへのリンクを記入（全ての取引先社数分）
<br>
考えてみると、この作業は結構手間がかかりますね😫。次のように変更しましょう。

1. 取引先名一覧をCSVファイルで作成
1. Box CLIスクリプトを実行して、取引先名一覧に基づいてフォルダを作成し、ファイルリクエストも有効化まで一気に実施
1. 1のファイルにフォルダID、ファイルリクエストURLが並んだCSVをGet！

これによって大幅な労力削減が可能ですし、今後管理上役に立つファイルも簡単に入手できます。


## 準備
### ツールの設定
初めてBox CLIを使用する方は手順に従って準備ください。また、PowerShellスクリプトをBox CLIで使用するためのWindowsおよびMacOSやLinux上で必要なソフトウェアもインストールします。
<br>
まず、コマンドラインツールのBox CLIの利用が初めての方は以下を参照して準備してください。

https://ja.developer.box.com/guides/cli/quick-start/




PowerShellスクリプトを実行するためには追加のソフトウェアが必要です。Windowsユーザーは.NET Core Framework（最新バージョン）をインストールし、MacOSおよびLinuxユーザーはPowerShell本体自体もインストールする必要があります。

https://ja.developer.box.com/guides/cli/quick-start/powershell-script-templates/

### Box環境の用意
今回は、Boxの特定のフォルダの配下に、取引先社名のフォルダを作り、そのフォルダにファイルリクエストを有効化します。
事前に親フォルダと、コピー元となるファイルリクエストを有効化したフォルダを用意しておき、親フォルダのIDとファイルリクエストのIDを確認しておきます。

#### フォルダIDの取得

フォルダIDは、URLの末尾にある番号です。
` https://(サブドメイン).app.box.com/folder/XXXXXX(数字）`　という形式で表示されます。

#### ファイルリクエストID取得
BoxのファイルリクエストIDは、ファイルリクエスト作成画面で編集を押したときに表示されるファイルリクエストの設定ページのURLの末尾の数字です。
`https://(サブドメイン).app.box.com/filerequest/XXXXXX(数字）`

#### フォルダ名に設定したい取引先企業一覧CSVの用意（ここではfolders.csvとしています。）

``` csv:folders.csv
"NewfolderName","FolderID","url"
"FolderA",,
"FolderB",,
"FolderC",,
```

## スクリプト
```powershell:filerequest_create.ps1
# 親フォルダID
$parentFolderId = "(親フォルダID)"

#filerequestID
$filerequestID = "(ファイルリクエストID)"

# フォルダ名記載CSV読み込み
$data = Import-Csv "folders.csv"

foreach ($row in $data) {
    $newFolderName = $row."NewfolderName"

    # フォルダ作成
    $outputFolder = box folders:create $parentFolderId $newFolderName --csv | ConvertFrom-Csv

    $newFolderId = $outputFolder.id

    # ファイルリクエストコピー
    $outputFileReq = box file-requests:copy $filerequestID $newFolderId --title=$newFolderName --csv | ConvertFrom-Csv

    $newFileReqURL = "https://(サブドメイン).app.box.com" + $outputFileReq.url

    # データへの書き込み
    $row."FolderID" = $newFolderId 
    $row."url" = $newFileReqURL
}

$data | Export-Csv "folders_updated.csv" -NoTypeInformation
```



## 結果
最終的にこのようなCSVが出力されます。
``` csv:folders_updated.csv
"NewfolderName","FolderID","url"
"FolderA","XXXXXXXXXXXX","https://(subdomain).app.box.com/f/fbfd49b62d3941e68fc91e9facd948c7"
"FolderB","XXXXXXXXXXXX","https://(subdomain).app.box.com/f/2c7eedd9552440d2a44b55366bb79be5"
"FolderC","XXXXXXXXXXXX","https://(subdomain).app.box.com/f/7149cf769e1c4754bb5bbb7e9b6565dd"
```

取引先にURLを共有するだけで、安全かつスピーディーにファイルを受け取ることができます。電帳法対応などにも応用できそうですね。

最後に、この投稿はBox AIに添削してもらっています😊