【UiPath】Gsuiteアクティビティを使ったGoogleスプレッドシートの自動化

Gsuiteアクティビティとは

2019年にUiPath社から追加パッケージとしてリリースされたのが今回紹介する「Gsuiteアクティビティ」です。
Googleスプレッドシート、Googleドライブ、Gmail等の主要アプリを簡単に自動化できるアクティビティです。また、アクティビティの内部処理としてはG Suite APIsを呼び出している為、ブラウザ上で直接操作するのに比べ、安定性が高いのも特徴です。
リリース当初は使いにくいところもあったものの、10回以上のアップデートがあり大分使いやすくなり、弊社環境での利用実績も1年以上になりました。導入時に解りにくい箇所や注意点等もあるので、この記事を参考にして頂ければ幸いです。
※記事では現時点での最新バージョン「v1.8.0」を元に紹介します。

Gsuiteアクティビティで出来る事の一覧は以下になります。

Gsuiteアプリアクティビティ数できること
Googleスプレッドシート21スプレッド新規作成/シートの追加・削除等のシート操作/シート内の読み書き/行列追加・削除等
Google Apps Script5プロジェクト新規作成/スクリプトファイルの読み書き/スクリプト実行等
Googleドライブ12検索/フォルダ作成等のフォルダ操作/ファイル削除・コピー等のファイル操作/ファイルUP・DL/権限設定等
Gmail3検索/メール送受信/下書きメール作成/メールのラベル変更
Googleカレンダー5検索/予定の作成・削除・変更/参加者の追加
Googleドキュメント7検索/ドキュメント新規作成/ドキュメントの編集/インデックス取得

このようにGsuite上の主要なアプリに対して、様々な操作が可能です。これらを活用すればアイディア次第で面白いロボが作れるかもしれません。

事前準備

Gsuiteアクティビティを使用する為には、事前にGoogle Cloud Platform側でプロジェクト作成、API有効化、認証情報発行が必要です。

API有効化は、GoogleスプレッドシートやGmail等自動化するアプリそれぞれに対応するAPIの有効化が必要です。
今回はGoogleスプレッドシートの操作を行うので、「Google Sheets API」を有効化してください。

認証情報発行は、Gsuiteアクティビティの場合、APIキー、OAuthクライアントID、サービスアカウントキーの3方式に対応しています。
今回は「OAuthクライアントID」を使って説明します。OAuth 2.0 「クライアント ID」と「クライアントシークレット」の値を取得しておきましょう。

Google Cloud Platform上での詳細な設定手順は、UiPath公式サイト内の下記記事を参照してください。
Google GSuiteアクティビティ(認証)の徹底解説

導入手順

それでは実際にGsuiteアクティビティを使ってみましょう。
Gsuiteアクティビティは追加パッケージとして提供されている為、使用するにはプロジェクト毎(≒ロボ毎)にインストールが必要です。

UiPath Studio上で「パッケージを管理」ウィンドウを起動し、左ペインの「オフィシャル」をクリック後、検索テキストボックスに「Gsuite」と入力します。
検索結果欄に表示された「UiPath.GSuite.Activities」を選択し、右上の「インストール」ボタン、右下の「保存」ボタンの順にクリックします。

アクティビティウィンドウに[連携][Google][GSuite]のツリーが追加されていれば、プロジェクトへのGsuiteアクティビティの追加は完了です。

GSuiteアクティビティのスプレッドやGmail等を操作するアクティビティは、コンテナアクティビティの「GSuite アプリケーション スコープ」の中に入れる必要があります。
この「GSuite アプリケーション スコープ」がGsuiteへの認証処理を行い、認証に成功した場合のみ、中に配置されたアクティビティが動作します。
まずはこのアクティビティを配置し、認証情報を設定します。

プロパティの「クライアント ID」「クライアント シークレット」にGoogle Cloud Platformから取得した値を設定します。「ユーザー」にはGSuiteにログインするユーザーID(メールアドレス)を設定します。

シートアクティビティについて

Googleスプレッドシートの操作にはシートアクティビティを使います。
基本的な使い方はExcelアクティビティと同じですが、ファイルパスの代わりにスプレッドシートIDで操作対象のスプレッドシートを特定します。

スプレッドシートIDとはGoogleスプレッドシートを一意にするIDで、スプレッドシートのURL先頭の「docs.google.com/spreadsheets/d/」と、末尾の「/edit~」の間にある英数字がそれになります。

使い方

既存のGoogleスプレッドシートのデータを読み込んでみましょう。

Gsuiteアプリケーションスコープの中に「範囲を読み込み」アクティビティを配置します。
「範囲を読み込み」アクティビティのプロパティには以下の値を設定します。

・スプレッドシートID:読込対象のGoogleスプレッドシートのID
・シート名:読込対象のシート名
・範囲:シート上の読込範囲
・結果:読み込んだ値を格納するDataTable型変数

「範囲」はExcel用の「範囲を読み込み」アクティビティとは若干仕様が異なるので注意が必要です。
「範囲」に表の先頭のセル番号(B2等)だけを設定した場合、Excel用では自動的に表の末尾まで読み込んでくれますが、Googleスプレッドシート用の場合は先頭セルしか読み込んでくれず、末尾の列の指定が必要です。
行数が不定の表を読み込みたい場合は、「先頭セル番号:末尾列」の形式で指定しましょう。
例)"B4:Q"

Googleスプレッドシートのデータを読み込めているかを確認するため、「データテーブルを出力」アクティビティでDataTable型変数からString型変数に変換し、「1行を書き込み」アクティビティでString型変数を出力ウィンドウに出力するようにします。

ロボを動かしてみましょう。
初回実行時のみブラウザが自動起動し、Gsuiteの認証画面およびGoogleスプレッドシート操作の許可ダイアログが表示されるので、許可を与えましょう。

エラーが出ず、出力ウィンドウにGoogleスプレッドシートのデータが表示されていれば成功です。
このように、いくつかの設定を行うだけで簡単かつ安定してGoogleスプレッドシートの自動化が行えるのでお勧めです。

注意点

・アクティビティバージョンアップについて
GSuiteアクティビティは、現状約1ヶ月毎の頻度でバージョンアップが行われています。
古いバージョンで作ったロボのアクティビティをバージョンアップすると、認証が通らない、上手く動かない、原因不明のエラーが出る等の事象が発生する可能性があります。
バージョンアップ後は必ずテストを行いましょう。

・認証期限について
ロボの初回実行時のみGSuiteとの認証操作が必要です。その後は6カ月以内に1度でもロボが動けば認証期限が延長されていきます。
従って、Unattendedロボでも初回のみ手動で動作させ、認証操作を行っておけば、その後は自動実行が可能です。
ただし、ロボに異なるGSuiteアプリの操作を追加した場合は再認証が必要です。また、ごくまれに認証が切れる事があります(弊社環境では1年間で2回ほど発生)。

・API呼び出し回数制限
GoogleのAPIは一定時間内の呼び出し回数に制限があります。
シートアクティビティで使用しているGoogle Sheets APIの場合、下記の制限が設けられています。

  • 1分あたりの読み込み回数
  • 1分あたりの読み込みユーザ数
  • 100秒あたりの読み込み回数
  • 100秒あたりの読み込みユーザ数
  • 1日あたりの読み込み回数
  • 1分あたりの書き込み回数
  • 1分あたりの書き込みユーザ数
  • 100秒あたりの書き込み回数
  • 100秒あたりの書き込みユーザ数
  • 1日あたりの書き込み回数

それぞれの上限値は環境によってことなるので、Google Cloud Platformの管理画面の「割り当て」画面を確認してください。
これらの上限値がある為、繰り返し処理等で無暗にシートアクティビティを連続実行していると、上限超えのエラーが発生します。
基本的には「セルを読み込み」「範囲を読み込み」等の読み込み系アクティビティの場合は読み込み回数が、「セルに書き込み」「範囲に書き込み」等の書き込み系アクティビティでは書き込み回数がカウントされますが、ひとつのアクティビティでも内部的に複数のAPIを呼び出しているものもある為、1回のアクティビティ実行=1API呼出しではないことは注意しましょう。
弊社のロボでも、1分あたり、および100秒あたりの呼び出し回数の上限超えエラーが頻発する為、シートアクティビティはリトライスコープの中に入れ、エラー発生時は100秒間待ってから再実行するようにしています。

おわりに

以上、GSuiteアクティビティの簡単な使い方のご紹介でした。
弊社では社内の様々な業務をRPA等で効率化しており、システム担当ではない一般社員もUiPathや他製品でのロボ開発を行っています。
今後もRPA関連の情報発信を行っていきたいと思っていますので、引き続きよろしくお願いします。