Box CLIでフォルダをロックする

Box CLIは、コマンドプロンプトなどからBox APIを実行することができるツールです。今回はCLIを使って、フォルダロックAPIをたたいてみようと思います。
CLIの記事自体は結構多く存在するのですが、微妙に画面ショットが更新されていたりするので、現時点で最新の情報を使って記事にしたいと思います。
※今回は、Windows10を利用しています。

# Box CLIについて
公式ページを参照しましょう！
[Box CLIとは](https://ja.developer.box.com/guides/tooling/cli/)

> BoxBox CLIは、使い勝手の良いコマンドラインツールで、これにより、開発者でも開発者以外のユーザーでもBox APIを利用してルーチンや一括操作を実行できるようになります。コードを書く必要はありません。これらの操作は、一連のコマンドによって実行されます。

# 準備
## Boxアプリケーションを作成する
Box CLIは、Boxアプリケーションを通じてAPIでアクセスします。

1. 以下のURLへアクセスし開発者コンソールを開きます。
https://account.box.com/developers/console
Boxへアクセスしていない場合はログイン画面が表示されますので、ログインしてください。
管理者でCLIを実行する場合は管理者の権限でログインしてください。

2. [アプリの新規作成]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/f12dc76d-3667-aa37-a035-fe85988b157e.png)

3. [カスタムアプリ]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/f1955998-7f06-9d5d-6aac-ca13ac99406b.png)

4. 認証方法は[サーバー認証（JWT使用）]を選択し、アプリ名にBox CLIと入力して、[アプリの作成]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/6eb8421e-3dbf-1683-d34c-947e49fc5b65.png)

5. アプリケーションが作成されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/2ce03720-e330-e585-ffd2-f0f6d9fd82a0.png)

## アプリケーションの設定変更
1. 作成したアプリケーションの[構成]タブを開き、[アプリアクセスレベル]を[アプリ＋Enterpriseアクセスレベル]を選択、[アプリケーションスコープ]で[Boxに格納されているすべてのファイルとフォルダへの書き込み]にチェックをいれます。設定変更したら、右上のボタン[変更を保存]を忘れずにクリック。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/fa4dc81a-06c8-801a-95bf-17142c010d33.png)

## アプリケーションの承認
1. 開発者コンソールで、作成したアプリケーションの[構成]タブを開き、OAuth 2.0資格情報の[クライアントID]をコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/b1018075-7b2b-f4c7-dbc7-c69ae9414185.png)

2. 【管理者権限】管理コンソールで、[アプリ]メニューから[カスタムアプリ]タブを開き、右上の[＋]ボタンをクリックします。アプリの承認画面がポップアップで開くので、１．でコピーしたクライアントIDをペーストして[次へ]をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/cde42126-c1de-089e-af06-e8c69773791c.png)
3. 確認画面がでるので、確認して[承認]ボタンをクリック。
4. 無事承認されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/b180ebeb-8a36-fa06-3d2d-1b329b9d8cb9.png)

## 必要なデータのダウンロード
1. 開発者コンソールで、作成したアプリケーションを開き、[構成]タブを開きます。[公開キーの追加と管理]にて、[公開/秘密キーペアを生成]をクリック。自動で、jsonファイルがダウンロードされます。CLIは、このjsonファイルを使ってBoxにアクセスするので、誤って削除することのないよう保存しておきます。
※この手順を実行する際に、2FAの有効化が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/4accdced-f618-5b69-42b6-3c661865e0b6.png)

# Box CLIのインストール
1. 以下のURLからインストーラーをダウンロードします。

https://github.com/box/boxcli/releases

Windowsを利用する場合、exe拡張子のインストーラーをダウンロードしましょう。

2. ダウンロードしたインストーラーを実行してインストールします。インストール途中の設定は、デフォルトで大丈夫です。

3. インストールできたか確認するために、power shellを起動し、

```
box
```
と実行してみましょう。スクショのように、表示されたらインストールは成功しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/1b6c2327-6176-ddcb-1276-7df76b744772.png)

4. 「必要なデータのダウンロード」でダウンロードしたjsonファイルを以下のコマンドで環境変数にセットします。

```
PS C:\Users\*****> box configure:environments:add <JSONファイルのディレクトリ>\********_********_config.json
Successfully added CLI environment "default"
```

5. 成功したら、以下のコマンドを実行してみましょう。操作をしているユーザー情報が表示されます。

```
box users:get
```

# フォルダロックを実行する
## フォルダロックAPIについて
Box Driveなどを使っていると誤操作でファイルやフォルダを移動してしまって、どこにいったかわからなくなったこと、よくありませんか？
フォルダロック機能を使うと、そのフォルダは移動・削除ができなくなります。この機能は、Web UIの機能としては提供しておらず、APIのみで提供しています。
ということで、このフォルダロックをCLIを使って実行してみたいと思います。

https://ja.developer.box.com/reference/resources/folder-lock/

## ロックしたいフォルダのIDを調べる

BoxにWebブラウザでログインします。
その後、ロックしたいフォルダを表示します。
URLバーに、フォルダIDが表示されますので、コピーしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/e320d327-e607-fd84-b165-9ecc83788bf0.png)


## ロックしたいフォルダの所有者のユーザーIDを調べる

フォルダの所有者のアイコンを表示すると、URLバーにユーザーIDが表示されますので、コピーしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/c0a52b96-af9b-15e9-8a04-aa8279d4ba57.png)

## フォルダロックを実行する
以下のコマンドで実行します。

```
box folders:locks:create <フォルダID> --as-user=<ユーザーID>
```

結果

```
Folder:
    Type: folder
    ID: '152008703259'
    Sequence ID: '1'
    ETag: '1'
    Name: フォルダロックテスト
ID: '292758258' ###このIDは、ロック解除に必要となります！
Type: folder_lock
Created By:
    ID: '8823593162'
    Type: user
Created At: '2021-12-12T15:21:29Z'
Lock Type: freeze
Locked Operations:
    Move: true
    Delete: true
```

## フォルダロック動作確認

対象のフォルダを移動・削除しようとするとこのようなエラーメッセージが表示されできません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/588b1a39-c03e-eb08-11cd-ac9f5791ae48.png)

注意：
フォルダの配下のフォルダは、ロックはかかりません。

## フォルダロックを解除する

```
box folders:locks:delete <フォルダID> --as-user=<ユーザーID>
```

以上です！