PowerAutomateを使ってGmailの添付ファイルをGoogleSharedDriveにファイルをアップロードする

はじめに

特定の条件にあったメールに添付されているファイルをGoogleSharedDriveにアップしたかったので、試してみました。PowerAutomateで用意されているGoogleDriveのコネクタは個人ドライブへのファイル操作は行えますが、SharedDriveに対する操作はできないという制限があるので、SharedDriveを操作するためのカスタムコネクタを作って対応しました。

GoogleDriveガイドのファイルデータをアップロードする を見たら、マルチパートアップロードでRequest bodyを作るのが手間がかかりそうと感じました。特に境界文字列を使って分割したパーツを識別したりなどが手間がかかりそうと感じました。そのため、既存のGoogleDriveコネクタを使って個人ドライブにファイルをアップロードし、カスタムコネクタで個人ドライブからSharedDriveに移動するというやり方にしました。個人的には既存で使えるものは使って楽をしたいと考えているからです。

作業手順

必要な作業は下記です。手順内で利用するGoogleアカウントは、GoogleWorkspaceのユーザーを想定しています。

手順1. Google Cloud PlatformでOAuthクライアントIDを作成する
手順2. 手順1.で作成したOAuthクライアントIDとクライアントシークレットを保存する
手順3. SharedDriveへファイルを移動するカスタムコネクタを作成する
手順4. 手順3.で作成したカスタムコネクタを利用したフローを作成する
手順5. 手順3.で作成したカスタムコネクタで利用するコネクションを作成する

手順1. Google Cloud PlatformでOAuthクライアントIDを作成する

OAuthクライアントIDを作成し、クライアントIDとクライアントシークレットを入手します。

PowerBuilder Japan Portalのこちらのページにも画像つきで方法が紹介されています。

1. Google Cloud Platform に新規プロジェクトを作成し、Google Drive APIを有効化する

Google Cloud Platformにアクセスし、Googleアカウントでログインします。その後、Google Drive APIを利用するための新規プロジェクトを作成します。

作成したプロジェクトの”APIs & Services”メニューから”library”を選択し、GoogleWorkspaceのカテゴリから”Google Drive API”を選択します。”ENABLED”のボタンをクリックし、Google Drive APIを有効化します。

2. OAuthクライアントIDを作成する

作成したプロジェクトの”APIs & Services”メニューから”Credentials”を選択し、”+CREATE CREDENTIALS”から”OAuth client ID”を選択し、OAuthクライアントIDを作成します。OAuth consent screenにてUser Typeの選択を求められた場合は、”Internal”を選択します。(自分自身または組織内のユーザーのみが利用することを想定しています。)

OAuthクライアントIDの入力項目を、下記の表に沿って入力します。

パラメタ名パラメタ値
Application typeWeb application
Name[お好きな名前]
Authorized JavaScript origins[未設定]
Authorized redirect URIshttps://global.consent.azure-apim.net/redirect
(手順3の2.Security内の画像に記載されているRedirect URLです)

手順2. 手順1.で作成したOAuthクライアントIDとクライアントシークレットを保存する

手順1で作成した新規プロジェクトとの”APIs & Service”メニューから”Credentials”を選択し、手順1で作成したOAuthクライアントの”Action”のダウンロードアイコンをクリックし、OAuthクライアント情報をダウンロードします。

手順3. SharedDriveへファイルを移動するカスタムコネクタを作成する

PowerAutomateの”Data > Custom connectors”メニューから”+ New custom connector > Create from Blank”を選び、カスタムコネクタを作成します。1.Gneral から 4. Code (Preview) まで下記のように入力します。

1. General

下記の表に沿って入力します。下記表にない項目は自由に入力します。

パラメタ名パラメタ値
Schemahttps
Hostwww.googleapi.com
Base URL/

2. Security

下記の表に沿って入力します。

パラメタ名パラメタ値
Choose what authentication is implemented by your APIOAuth 2.0
Identity ProviderGoogle
Client ID[手順2で保存OAuthクライアントID]
Client secret[手順2で保存したクライアントシークレット]
Scopehttps://www.googleapis.com/auth/drive

3. Definition

”+ New action”メニューから新しいアクションを追加し、”+ Import from sample”を選択し、Requestを下記の表に沿って入力します。”{}”で囲んだ部分は変数としてカスタムコネクタに認識されます。

下記表に入力しているパラメタは、GoogleDriveのfile updateのAPIリファレンスを参考にしています。

パラメタ名パラメタ値
VerbPATCH
URLhttps://www.googleapis.com/drive/v3/files/{fileID}?addParents={addParents}&removeParents={removeParents}&supportsAllDrives={supportsAllDrives}
Body{}

Queryパラメタの設定を下記の表に沿って入力します。下記表にない項目は自由に入力ください。

パラメタ名 / パラメタ値AddParentsremoveParentssupportsAllDrives
is required?yesremoveParentsno
Typestringstringboolean

4. Code (Preview)

Code Detailsの部分のトグルボタンをクリックし、”Code Disabled”にします。”Code Enable”になっているとFlowを実行したときに、ここに記載しているテストが実行されます。

手順4. 手順3.で作成したカスタムコネクタを利用したFlowを作成する

“My flows”メニューから”+New flow”を選択し、”Automated clod flow”を選択します。新しいFlowのトリガーは、Gmailの”When a new email arrives”を選択して、Flowを作成します。

下記画像を参考にSharedDriveに保存したいファイルが添付されたメールを抽出できるよう”When a new email arrives”のフィルター条件を設定してください。

次に添付ファイルを個人ドライブに保存するために、既存のGoogleDriveコネクタのCreate fileアクションを追加して、各パラメタを下記表に沿って入力します。

パラメタ名パラメタ値
Folder path[個人Drive内のフォルダパス]
(フォルダアイコンをクリックしてGUIで個人Driveの中のフォルダを選択できます。
認証を求めらたらGoogleアカウントで認証してください。認証するとGoogleDriveのコネクションが作成されます。)
File name[GmailのAttchments Name]
 File content[GmailのAttachments Content]

次に、個人Driveに保存したファイルをSharedDriveに移動するために、手順3で作成したカスタムコネクタのmovefileアクションを追加して、各パラメタを下記表に沿って入力します。

パラメタ名パラメタ値
fileID[GoogleDriveのid]
addParents[移動先SharedDriveのフォルダID]
(フォルダIDの調べ方はメシラボさんの記事がわかりやすかったです)
removeParents[移動元個人DriveのフォルダID]
supportsAllDrivesYes
body[無記入]

ここまで入力したら作成したFlowを保存してください。

手順5. 手順3.で作成したカスタムコネクタで利用するコネクションを作成する

“Data”メニューから”Custom connectors”を選択し、手順3.で作成したカスタムコネクタの横にある”+”を選択します。Googleアカウントでの認証を求めらるので、Googleアカウントで認証してください。


これで準備は完了です。Gmailにファイルが添付されたメールを送り、SharedDriveにファイルが保存されるかをご確認ください。

説明がわかりづらい部分もあるかと思いますが、お役にたちましたらうれしいです。