BizRobo!でOAuthを設定してみた

# やりたいこと
BizRobo!でREST Webサービス呼出（Call REST Web Service）ステップを使ってスプレットシートを操作したいとき、追加ヘッダーにアクセストークンを指定する必要があります。
そのアクセストークンを取得する為にはOAathの設定をしなければなりません。
そこで本記事では、Google OAuth 2.0認証のアクセストークン取得をするための設定をやってみます。

# 背景
今までにAPIを利用したロボットを作成した経験はありますが、前段階としてAPIを使えるための設定をすることは初めてでした。
ただでさえAPIを用いたロボットの作成はとっつきにくいのに、OAuthの設定が必要となると混乱必至です、、、
どうにか利用しない方法はないかと思いましたがスプレッドシートを操作するロボットを作成するには必要なため覚悟を決めて設定に取り組みました。
今後の作業の備忘録として、同じような方への一助として、本記事が役に立つだろうと思い記事を作成しました。

:::note warn
本記事はサードパーティーのツールを利用するため、動作を保証するものではございません。
APIを利用するための参考としてお考え下さい。
:::


# 事前準備
## Google Cloudの認証情報
- Google Sheets API有効化
- OAuth 2.0 クライアント ID生成
※承認済みのリダイレクトURIにはMCのOAuthのアプリケーションのコールバックURLを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/275112f2-15a2-6b11-b061-71dfc76859c3.png)

参考資料
https://zenn.dev/yusuke49/articles/6c147bd6308912

## 利用バージョン
本記事で利用する各システムの情報は下記になります。
| 対象システム | 利用バージョン |
|:-----------|:-----------|
| BizRobo! | 11.3.0.2 |
| Google Sheets API | 2024/02/01時点 |

# MCのOAuth設定
## アプリケーション作成
MCにログインしてリポジトリ > OAuth から+をクリックしてOAuthアプリケーション作成画面を立ち上げます。
以下の必要事項が入力出来たらOKボタンを押します。

|プロパティ|設定値|補足|
|----|----|----|
|プロジェクト|test|ロボットを配置するプロジェクト選択|
|名前|googleSpreadSheets|任意の名前|
|サービスプロバイダ|Google|
|コンシューマーキー|***|OAuth 2.0 クライアント ID のクライアントID|
|コンシューマーシークレット|***|OAuth 2.0 クライアント ID のクライアントシークレット|
|コールバックURL|http://localhost:8080/mc/OAuthCallback|初期表示のまま|
|スコープ|https://www.googleapis.com/auth/spreadsheets|スプレットシートを利用する場合|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/72a60b49-ddc8-451c-7938-927dc68ab07b.png)

## ユーザー追加
作成したアプリケーションの3点リーダーからユーザーの追加をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/12b0916c-690b-9705-4bbb-a4215b59d342.png)

### ユーザー名入力
スプレットシートを操作するユーザのメールアドレスを入力して、次へをクリックします
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/b39e55c1-f656-144c-ec75-c03755f81c61.png" width="500px">

### 認証
外部リンクのアイコンをクリックします
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/469b8ee8-fc4c-7d7e-b5b2-7a34c7c6205e.png" width="500px">
Googleのログイン画面が表示されるのでログインします
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/789a2779-e1c4-dd4e-4636-0dd84ad3d5a8.png" width="400px">
続行をクリックします
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/602ca82e-ec3c-fa1b-23c1-6d22712594ff.png" width="400px">
続行をクリックします
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/e57cf35e-198b-e765-abb9-569ef24e6c90.png" width="400px">
コールバックURLにリダイレクトされるので「close this window」リンクをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/295e589f-cb7b-4768-9310-2ab4af6303a3.png)
MCの画面へ戻り、次へをクリックします
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/68c88c01-55aa-a796-b330-c94ddce7ddcd.png" width="500px">

### アクセストークンの取得
アクセストークンとトークンを更新の値をコピーします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/3ee19be5-979d-9611-bfdc-7d742d7c067c.png" width="500px">

:::note alert
終了ボタン押すと二度と見えなくなるので注意してください。
:::


終了ボタンを押してMCの設定は完了です

# ロボット作成
ここまででOAuthの設定ができましたので、それを用いたロボットの作成方法について説明します。
## ゴール
アクセストークンを取得するまで

## 手順
以下のステップを用いてロボットを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/bbce02fb-dded-0d91-be9f-004aa995c093.png)
各ステップごとの詳しい設定手順を説明していきます。

### ①タイプファイル作成
ロボットのステップを設定する前にタイプファイルを用意します。
OAuthCredentialsを選択します
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/15f295d1-8794-30a9-57bf-fe963154d42e.png" width="500px">
以下を指定して変数を追加します

|プロパティ|設定値|
|----|----|
|serviceProvider|Google|
|accessToken|MCでコピーしたアクセストークンの値|
|refreshToken|MCでコピーしたトークンの更新の値|
|consumerKey|OAuth 2.0 クライアント ID のクライアントID|
|consumerSecret|OAuth 2.0 クライアント ID のクライアントシークレット|

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/eb14de8d-c4fb-296c-f5f3-5eebdc566205.png" width="800px">

### ②REST Webサービス呼出（Call REST Web Service）
１つめのステップを作成します。
#### ステップを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/4dc5bab6-c767-6c31-4f00-069a82eeebd3.png)

#### 値を設定します

|プロパティ|設定値|
|----|----|
|URL|https://www.googleapis.com/oauth2/v4/token|
|リクエスト|POST|
||パラメータで指定|

#### パラメータ
|パラメータ名|値|型|
|----|----|----|
|client_secret|oAuthCredentials.consumerSecret|変数|
|grant_type|refresh_token|値|
|refresh_token|oAuthCredentials.refreshToken|変数|
|client_id|oAuthCredentials.consumerKey|変数|

パラメータの下

|プロパティ|設定値|
|----|----|
|エンコード|Form-urlencoded|
|出力値|ブラウザにロード|
|オプション|OAuth|
|変数|oAuthCredentials|

#####  ヘッダー
|ヘッダー|値|型|
|----|----|----|
|Content-Type| Content-Type:application/x-www-form-urlencoded|ヘッダーのテンプレート|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/ca76cf4e-c72e-5a51-ea77-098c0f43dbcd.png)

### ③JSONで開く
REST APIを実行してアプリケーションを右クリックして、開くをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/e8ba4b28-b3fb-8ef0-e684-8fcca7e501dc.png)
View as JSONステップが自動で追加されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/7c13b347-5fac-6e41-2108-5c6f926c0a8b.png)

### ④アクセストークン取得
oAuthCredentials.accessTokenを上書きします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/7dc0f58b-decd-ce5a-f46a-f38f19bb6cb9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/17de1fa0-a567-8a07-0214-a9971e8e03a0.png)

以上でロボットの作成は完了になります。

## NG例
MCのOAuthを使わずに、Google OAuth 2.0認証を行ってみます。
Chroniumから https://accounts.google.com/o/oauth2/auth を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/54b748c1-f4f0-c965-f277-19306fa5c3cc.png)
ログインユーザーを入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/1d811013-bb2a-2129-7d7a-e1cfd04c320d.png)
ボタンをクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570885/8f040db3-a3e2-7121-eeb6-0b725b951cbd.png)
ログインできません。
OAuthの設定が必要であることが分かります。

# まとめ
今回はMCのOAuthを使ったアクセストークンの取得ロボットを作成しました。
設定方法さえわかっていればさほど難しくはないものの、何も知らない状態からだと大変でした。
MyBizRobo!ユーザーは[ドキュメント](https://my.bizrobo.com/product/detail/068a4714-c30a-43c9-804c-e3f16c25d0af)もありますので参考にしてみてください。
分かりやすくまとまっていて非常に助けになります。

またRPAテクノロジーズでは、Google Sheetsを操作するコネクターをリリースしております。
より簡単に設定ができますのでぜひご利用ください。
利用する場合は[こちら](https://robot-hub.bizrobo.com/products/view/5157746f4e476331526c686d57467059626b464763465261536d64424f46687a53554651576c4635625531554d4442474b33633950513d3d)

APIを利用するとロボットの構築の幅が広がりメンテナンス性も向上できると思います。
APIを利用したロボットの開発のための一助となれば幸いです。