Google Driveからファイル連携

# はじめ

Googleドライブは、Googleが提供している無料オンラインストレージです。
文書ファイルや写真、音楽、動画など、様々なデータをネット上で「Google　Drive」と呼ばれるストレージに保存することができる非常に便利なサービスです。

今回の記事は、XplentyによるGoogleドライブ上のテキストやCSV/TSV形式のファイルを用いて他のシステムへの連携方法を紹介します。
主な連携先はDestinationの対象になるファイルストレージやデータベースになります。

より便利に使うための応用も紹介します。

# ファイル連携の準備事項
Googleドライブからファイルを連携には、準備が必要です。
まず、Googleドライブのコネクションの作成とそのコネクションのUnique IDや対象のGoogleドライブのドライブ IDを下記の図をご参考してご確認くだい。
指定のファイルをGoogleドライブから取得するためのクエリ文字列も、参考URLにて作ってURL Encodeの変換も済ませておいてください。

1. コネクションページにてコピー元であるGoogle Driveのコネクションを生成し、コネクションのUnique IDを取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/49a5912e-27e0-8b4a-d97e-ab64ac58af29.png)

1. URLから対象ドライブのIDと対象ファイル名を取得(下記の図の①と②に該当)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/9df65788-79ef-b7f2-8df9-b71095452ec9.png)

1. Google Driveのガイドにある＜[クエリ文字列の例](https://developers.google.com/drive/api/guides/search-files?hl=ja#examples)＞を参考して、Google APIと対象ファイル名が取得のクエリ文字列を合体してURLをURL Encoderにて変換しておく（下記の例をご参照ください）
```
## クエリ文字列の例
対象ドライブのIDの配下でファイル名にcontente_headが含まれてmimeTypeがCSV形式のファイルリストを取得

<Google APIのURL>
https://www.googleapis.com/drive/v3/files?q=<クエリ文字列>

<クエリ文字列>
name contains "head_content" and mimeType="text/csv" and "<---対象ドライブのID--->" in parents

<URL Encodeにて変換後のファイルリスト取得URL>
https://www.googleapis.com/drive/v3/files?q=name+contains+%22head_content%22+and+mimeType%3D%22text%2Fcsv%22+and+%22<---対象ドライブのID--->%22+in+parents
```

では、ここからXplentyを使ったファイル連携の本番です。下記の手順を順番に行えば、Googleドライブからファイル連携が出来ます。

# ファイル連携の手順
ここでは、Googleドライブからテキスト形式のファイル（TXT,CSV,TSV）をファイルストレージやデータベースに連携する手順を説明します。
まず、Xplentyでお馴染みのPackage作成/編集画面から **[+ Add Component]** をクリックし、SourceからREST APIのアイコンを選択します。REST APIコンポーネントを開き、下記の図のように詳細内容を設定して該当するファイルが選択されているかご確認ください。

1. RestAPIコンポーネントからGoogle APIを使ってファイルリストを取得
authentication typeはConnectionを選び、Google Driveコネクションを指定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/79cb83fa-aded-fa1c-a6df-1e96cf027416.png)
Method and URLの設定は下記の通りです。
    * Method - **GET** に設定
    * URL - `https://www.googleapis.com/drive/v3/files?q=name+contains+%22head_content%22+and+mimeType%3D%22text%2Fcsv%22+and+%22<---対象ドライブのID--->%22+in+parents`
    * Response - **JSON** と`$.files[*]`を設定
Google APIのURLとファイル選択のクエリ文字列で作ったURLと。Responseは、JSONで受け取ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/6683c96e-c327-f700-6658-f0c6d96f5e00.png)
Data Previewerで対象ファイルリストが正しいか確認して`id`, `name`のフィルドを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/4a3a4680-aab8-5f01-2b86-7de946acd842.png)

1. **Filterコンポーネント**で正規表現のマッチングにて、ファイルリストから連携対象のファイルIDとファイル名を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/7882e0f9-c33b-65fa-0604-cdc75f394be1.png)
    * Conditions : `AND`
    * Operator : `Text matches (regex)`
    * Value/Expression : `^100_.*$`

1. **Selectコンポーネント**上で`CCurl`コマンドを用いてGETメソッドによるファイル連携を行い、ファイルの中身であるbody部のみを取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/f6212fa4-e0a6-584b-5c4d-ef0ea128cc7c.png)
    * Expression : `CCurl(CONCAT('https://www.googleapis.com/drive/v3/files/', id, '?alt=media'), 'GET', '', '', '<---GoogleドライブのUnique ID--->')#'body'`
        * 注意 : CCurlコマンドには、GoogleドライブコネクションのUnique IDを指定してください！！
    * Alias : `api_response_body`

1. body部には１本の文字列としてファイルの中身が返されるので、**Selectコンポーネント**上で関数を使って各々のレコードに分離
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/768953d7-28da-5566-61f8-c326b18b0dd3.png)
    * Expression : `Flatten(STRSPLITTOBAG(api_response_body, '\n'))`
    * Alias : `line`

1. **Filterコンポーネント**で正規表現のマッチングにて、レコードからヘッダーレコードを除去
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/2e033aac-640d-b58c-b948-82feb331652a.png)
    * 削除するヘッダー : `seq,name/first,name/last,age,street,city,state,zip,dollar,pick,date`
    * Conditions : `NOT`
    * Value/Expression : `^seq.+$`

1. **Selectコンポーネント**上で関数を使って、レコードをフィールド毎に分離された配列に変換
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/0a1eee28-72ce-e258-a877-c4cd85c52d1b.png)

1. **Selectコンポーネント**で配列の各々の要素に対して適切なデータ型に変換
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/ebe8714b-9080-3330-59d3-67c41a471fed.png)

1. Destinationのファイルストレージやデータベースに保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/447349c0-86c5-4015-d069-9d837865372c.png)

# 簡単な応用
ファイル連携の前後関係がなく、Googleドライブからの複数ファイル連携を１本のパッケージで管理したい場合、このような応用が可能です。

1. Googleドライブから複数のファイルを同時に連携
下記の図のように取得したファイルリストに複数の**Cloneコンポーネント**を繋ぐ毎で１つのパッケージ実行で同時に複数のファイルが連携出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/d44bd8df-2350-cfc8-b34b-b8e5aa79ce34.png)

1. 複数箇所のGoogleドライブとのファイル連携
複数のGoogle Driveコネクションを用意すれば、１本のパッケージの中に複数箇所のGoogleドライブからファイル連携も可能です。イメージとしては、上記の複数ファイル連携が横にいくつかが並ぶ形になります。

# パッケージテンプレートの利用時に
今まで説明した内容について、XplentyではDataFlowのテンプレートとしてすでに提供しております。
下記の図ようにパッケージ作成画面で**Template**からすぐ見つかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/7362a027-7b83-220a-514e-9320e9b5dc46.png)

テンプレートの場合は、２つのユーザ変数の設定だけですぐ使えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65461/1fc1b18d-5d1a-3465-7730-8829d593f0ce.png)
   * query_string : クエリ文字列を指定
   * google_drive_connection_id : GoogleドライブコネクションのUnique IDを指定

# 終わりに
便利なGoogleドライブからファイル連携は、特にビズネス部署ではごく普通に行われています。
Xplentyはプログラミング経験がある方はもちろん、ビジネス部署でプログラミング経験がほとんど持っていない方々もすぐ慣れて使えるDX専門のローコードツールです。

ぜひ、Xplentyを使ってファイル連携のような簡単な業務から御社の自動化を自らの手で初めてみませんか？
[弊社のホームページ](https://www.integrate.io/jp/)にて気軽に[フリートライアル](https://try.integrate.io/jp-demo/)と[デモ申請](https://try.integrate.io/jp-demo/)が出来ます。心からお待ちしております。