Workatoでファイルの圧縮・解凍を行う

# はじめに
ファイル転送やバックアップを行う処理では、ファイルの圧縮、解凍、形式変換などの操作が必要になることがあります。Workatoでは、これらの操作をシンプルに実現できる「File tools by Workato」コネクタが用意されています。



# ファイル操作のためのコネクタ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/4d0920f6-b590-3103-0eb4-5caf9b35c1f6.png)

「File tools by Workato」コネクタは、ファイルの取得、リサイズ、圧縮解凍など、基本的なファイル操作を行うための便利なアクションを提供しています。
この記事では、特に「圧縮」と「解凍」の機能に焦点を当てて、使い方を解説します。

# ファイルの圧縮

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/09d013b9-3254-e4a6-e6e9-1d1d1ca7e5ba.png)

「Compress files」アクションを使うと、複数のファイルを圧縮して１つのZipファイルを作成できます。

## やりたいこと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/d504b737-327c-402c-46fe-f707cfe9c6d9.png)
box上の特定のファイル（2つ）を圧縮して、GoogleDriveにアップロードします。

### レシピ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/802fe1a8-daf7-f191-7f2b-3b53d1eebeec.png)


### Step2～3) 対象のファイルをダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/a78e7c1c-39fd-61c2-478e-f7045d020c7d.png)
各ファイルを読み込みます。


### Step4) ファイルの圧縮
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/00f4a947-3ef3-4cc6-70ad-5b28ebb83e37.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/5008b702-d3dd-5e34-3456-6dad05c7f933.png)

**Compression format** (任意)
`Zip`または`GZip`を選択できますが、通常は`Zip`を選択します。

**Password** (任意)
パスワードをかけたい場合は設定します。

**File list**
圧縮対象のファイルを指定します。
この例では、先行の処理でboxからダウンロードしたファイル、つまりStep2とStep3で読み取ったコンテンツです。

### Step5) 圧縮したファイルをアップロード
Step4の終了時点では、WorkatoのオンメモリにZipファイル（InputStream型）のデータが作られた状態です。
出力することで実体となりますので、GoogleDriveへアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/0263a019-41bd-58bd-1371-39123b2de2bd.png)

### 実行結果
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/3b57bece-fc26-7642-5164-a08deab2275e.png">

指定の場所へZipファイルがアップロードされました。


# ファイルの解凍
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/0df0ab88-655a-a999-7905-366c886848e5.png)

「Uncompress a file」アクションを使うと、Zipファイルを展開できます。

## やりたいこと
前述の例で圧縮したファイルを、今度は解凍します。

### レシピ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/e8a6d692-392d-88b5-5d09-6d43b7f7cd81.png)

### Step2) 
Zipファイルを読み込みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/546e8d16-f3de-e0b2-64f4-beac54df4df4.png)

### Step3) ファイルの解凍
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/577d45bf-0a42-e179-5392-300b7cb56148.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/ea8a9676-f614-b02d-9dd9-ec83f84ad60a.png)

**Compression format** (任意)
`Zip`または`GZip`を選択できますが、通常は`Zip`を選択します。

**Password** (任意)
圧縮時に用いたパスワードを使用します。

**File contents**
解凍したいファイルのコンテンツを指定します。
この例では、GoogleDriveからダウンロードしたZipファイル（Step2）です。

### Step4～5) 解凍により得られたファイルを１つずつBoxにアップロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/72173e86-ad2f-0c3f-b946-5b5f665c56eb.png)
Step3の終了時点では、圧縮されていた中身の各ファイル（InputStream型）がWorkatoのオンメモリに展開され、リストに詰められた状態です。
これもまた出力することで実体となりますので、Boxへアップロードします。

Step3の解凍後ファイルリストの中身を処理するため、For Eachを使ってループさせます。

### 実行結果
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778017/17c7d3a1-c601-9cd0-88c4-e0e18edbf220.png">

圧縮前のファイルと同様のファイル（２つ）が、Boxの指定フォルダへ再現されました。


# おわりに
ファイル圧縮・解凍のアクションは１機能にすぎませんが、アイディア次第で活用の幅は広がりそうです。
例えば、定期的に生成されるファイルをまとめて圧縮してクラウドストレージに保存したり、複数のPDFを圧縮してメール送信する業務を自動化できます。また、解凍して得られたファイルの内容を生成AIで分類し、適切な格納先に保存したりメタデータを付与するような業務にも活用できます。