0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Box CLI 使ってみた

Last updated at Posted at 2023-09-28

Box CLI 使ってみた

弊社の定型作業をBoxCLIを使用し、スクリプト化したので記載

まず開発環境を整える

Box CLIをインストール

※引用:Box CLIはターミナルウィンドウまたはコマンドプロンプトからBox APIにリクエストを行うためのツールです。
要は、Boxの作業をコマンドで出来ますよってことです。

以下のリンク先にインストールする案内が記載されてます。

以下のダウンロードってやつをクリック。
image.png

そしたらGitHubが開くので、該当するものをダウンロード
image.png

Box Developerのページに戻り、以下の赤文字部分を確認する
※要ログイン

image.png

PowerShellを起動し、以下を入力

box login -n test

IDとパスワードを求められるので、先ほどの赤文字部分を入力

これで開発環境が整いました。

実際に開発作業

PowerShellの知識については、調べたらわかるので割愛。
ChatGptに任せたら作成してくれるし、そんな苦労しないと思う。

作成したサンプルスクリプト

試しに指定したフォルダから最新のフォルダをコピーし、新たに最新のフォルダを作成するスクリプトを作成した
エラー処理もしていないし、汎用化できるようにもしていないので、サンプルとして見てもらいたい

このスクリプトの前提条件

ファイル階層イメージ

  • 1階層
    • 指定するフォルダ
  • 2階層
    • 名前がyyyyMMdd+Nameのフォルダ群
  • 3階層
    • 名前がName+yyyyMMddのファイル単品

スクリプトの固定値説明

  • userIDにはBoxのユーザID(アカウントID)を入力
  • targetFdIDには指定したフォルダIDを入力
  • constFolderNameには作成するフォルダ名のNameを入力
  • constFileNameには作成するファイル名のNameを入力
  • constFileExtensionには作成するファイルの拡張子をドット付きで入力
 # 固定値
 $userID = 012345678910
 $targetFdID = 123456789
 $constFolderName = "Test"
 $constFileName = "Test"
 $constFileExtension = ".xlsx"
 $today = Get-Date -Format "yyyyMMdd"
 $folderName = $today + $constFolderName
 $fileName = $constFileName + $today + $constFileExtension

 # 以下処理
 #Boxログイン
 box configure:environments:switch-user $userID

 # 指定されたフォルダIDから最新のフォルダIDを取得
 $parentFdJson =  box folders:items $targetFdID --json --sort=date --fields=name
 $parentFdObjects = $parentFdJson | ConvertFrom-Json
 $parentFdObjects | ForEach-Object {$_.name = $_.name.substring(0, 8); $_ }
 $parentFdOfNewData = $parentFdObjects | ForEach-Object { $_.name }  | Sort-Object -Descending | Select-Object -First 1
 $parentFdOfNewID = ($parentFdObjects | Where-Object {$_.name -eq $parentFdOfNewData}).id
 
 # 最新のフォルダから新規フォルダをコピー
 box folders:copy $parentFdOfNewID $targetFdID --name=$folderName

 # 作成されたフォルダのIDを取得
 $createdFdJson =  box folders:items $targetFdID --json --sort=date --fields=name
 $createdFdObjects = $createdFdJson | ConvertFrom-Json
 $createdFdObjects | ForEach-Object {$_.name = $_.name.substring(0, 8); $_ }
 $createdFdData = $createdFdObjects | ForEach-Object { $_.name }  | Sort-Object -Descending | Select-Object -First 1
 $createdFdID = ($createdFdObjects | Where-Object {$_.name -eq $createdFdData}).id

 # 作成されたフォルダ内にあるファイルのIDを取得
 $createdFdInFileJson =  box folders:items $createdFdID --json --sort=date --fields=id
 $createdFdInFileObjects = $createdFdInFileJson | ConvertFrom-Json
 $createdFdInFileID = $createdFdInFileObjects | ForEach-Object { $_.id }

 # 取得したファイルIDを使用し、ファイル名を変更する
 box files:rename $createdFdInFileID "`"$fileName`""

処理の説明については、コメントを参照してほしい。
ChatGptに読み込ませたら一文一文の説明までしてくれると思う。

上記のスクリプトをWindows PowerShell ISEでコピペして保存すれば、PowerShellスクリプトファイル(.ps1)が作成される

作成したスクリプトをタスクスケジューラで自動実行させる

タスクスケジューラの登録方法については割愛。

ただ、PowerShellスクリプトのps1ファイルをタスクスケジューラで実行させるには一手間必要
image.png

  • プログラム/スクリプト

PowerShellを起動し、以下のコマンドでPowerShellのパスを取得し、貼り付け

where.exe powershell
  • 引数の追加

作成したスクリプトの絶対パスを -Command "C:~"形式で入力

※以下、参考リンク

これで実行できるので、あとはタスクスケジューラで実行したいタイミング等を設定する

実行確認したいなら、作成したタスクを「右クリック→実行する」的な選択でできる。

お疲れ様でした。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?