[GAS] 主に初回実行時「承認が必要です」ダイアログが出た場合の承認作業とアクセス権限の確認プロセス

# はじめに

![000_accept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/41e6828f-5f6e-8928-34df-3f92445c02d1.png)

当方クライアント様へのＧＡＳプロジェクトの納品時、原則として避けて通れないのが初回実行時の承認作業です。ネット上では同様の情報に呆気なく辿り着くのですが、特に初心者向けの備忘録としても使えるよう、自前のマニュアルを残しておくことにしました。

作業自体はほぼ定型の内容となりますので、当方のクライアント様向けのテンプレートメッセージを元に大幅な補足を行い、再編集しました。[^1]

[^1]: Magicodeから記事移動後、若干の文言修正をしています。

# 承認手順について
## 何を承認するのか
概要としては、当該プロジェクトが要求する**アカウント情報**への**アクセス権限**を確認し、**アカウント情報**の利用を当該スクリプトに許可してよいか、というものです。

もっと簡単に言えば、「あなたに代わって実行しますがよろしいですか」という確認事項の承認です。

クラウドサービスならではの承認プロセスともいえます。

### アカウント情報とアクセス権限とは
細かなことは無視して、ごくごくシンプルに換言するなら、前者が**当該プロジェクトの関連ファイル**、後者が**関連ファイルへの編集権限**という認識でほぼ問題ないと思います。

具体的にはGASを設置したスプレッドシート、そこから連携するDriveやカレンダーなどが**アカウント情報**、それらへの編集権限が**アクセス権限**となります。あくまでも**細かなことは無視して理解しやすくした表現**です。（←ここ重要）

## 承認手順
主に個人用の無料のアカウント（gmail.com）と法人等の独自ドメイン運用前提の有料アカウント（Google Workspace）では若干手順が異なりますが、ダイアログや文言等はほぼ同じです。

### 無料のアカウント（gmail.com）の場合
#### 1. 承認が必要です

![00_accept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/919ee2fc-de26-dd68-6e83-9b6e7ef8dded.png)

アクセス権限確認のダイアログが表示されますので、**権限を確認**をクリックします。

#### 2. アカウントの選択

![01_accept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/872e4077-4556-7ae5-5905-0eefd1186482.png)

通常は現在ログイン中のアカウントが１つだけ表示されると思います。**マルチアカウントでChromeにログインしている場合**など、複数のアカウントが表示されている場合、GASを実行しようとしているアカウントを選択します。

#### 3. このアプリはGoogleで確認されていません

![02_accept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/12b230c4-54ae-f592-aa31-0b33a15dbfe2.png)

強気な警告メッセージには奥せず、左下の方にある**詳細**をクリックします。

#### 4. このアプリはGoogleで確認されていません（2）

![03_accept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/1e087841-0676-b4b2-db79-aa051ebe482e.png)

警告メッセージの詳細表示になります。こちらも気にすることなく、左下の**プロジェクト名（安全ではないページ）に移動**をクリックします。

#### 5. （プロジェクト名）がGoogleアカウントへのアクセスをリクエストしています

![04_accept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/dec850f3-a26e-589b-3edd-d8e32332c607.png)

許可をクリックすると、実行途中のスクリプトが再開されます。

ただし、ここまでのプロセスで６分経過した場合や実行途中の処理が重い場合、タイムアウトとなることもあります。

### 有料アカウント（Google Workspace）の場合
基本的な流れは無料アカウントの場合と同様ですが、3. 4. が省略されます。

![00_accept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/919ee2fc-de26-dd68-6e83-9b6e7ef8dded.png)

**権限を確認**をクリック↓

![01_accept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/872e4077-4556-7ae5-5905-0eefd1186482.png)

アカウントの選択のあと、Googleアカウントへのアクセスリクエストの許可へ飛びます↓

![04_accept.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/dec850f3-a26e-589b-3edd-d8e32332c607.png)

許可をクリックで実行途中のスクリプトが再開されます。

-----

## アクセス権限の確認ダイアログについて
### [補足 １] 一度承認したはずなのにまた表示された
冒頭の画像のようなダイアログは、主にGASプロジェクトの初回実行時（デバッグを含む）に表示されます。例外的なものとしては、記録されたマクロやカスタム関数、`onOpen`等のシンプルトリガー等のみのプロジェクトが挙げられます。

プロジェクトの更新や改修などで**アクセス権限の確認が必要な処理**を追加した場合、再度ダイアログが表示されます。一度承認したら以降も引き継がれる、ということではありませんので、その都度、承認作業が必要になります。

具体的には**外部連携するアプリケーション**（`DriveApp`や`MailApp`など）や**拡張サービス**を追加した場合などで、別ファイルへのアクセスや`UrlFetch`等、**外部サービスへの接続**も含みます。

-----

### [補足 ２] スコープ
GASではプロジェクトごとに**Authorization Scopes**が設定されていて、単にスコープと呼ばれることもあります。いわゆるプログラミングにおけるスコープとは意味合いが若干異なりますが、実行しようとしているスクリプトがアクセスできる**アカウント情報の範囲**という認識で良いと思います。

これに加え、スクリプトの処理内容（機能）によって、必要となるアカウント情報や利用範囲が異なります（Restricted scopes）。これらを説明しだすとかなりの長文になりますので、詳しくは以下をご確認ください。

[Authorization Scopes  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/concepts/scopes#setting_explicit_scopes)

つまり、**補足 １**のように、スコープに変更があった場合に、都度、**アクセス権の確認**が発生するということですね。

-----

### [補足 ３] このアプリはブロックされます
上記承認プロセス中、２. の**アカウントの選択**後に表示され、その後の承認作業が実行できなくなるという現象が発生することがあるようです。

![05_block.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111613/10cde556-2569-c260-dc97-7b070c707747.png)

当方環境はもとより当方クライアント様への納品後の動作検証でもこのような現象は未確認です。

恐らく、[こちらの解説](https://auto-worker.com/blog/?p=4542)で現象発生の大半の原因は説明できるかと思いますが、[一部例外](https://ja.stackoverflow.com/questions/86722/google-apps-script-%E3%81%A7%E3%81%93%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84)もあるようです。

現象を確認もしくは再現できれば当方でも検証してみたいので、明確な解決方法が見つかった際には折を見てまとめたいと思います。

# 最後に
誰かの役に立てば幸いです。

# [参考・引用]
- [Authorization Scopes  |  Apps Script  |  Google Developers](https://developers.google.com/apps-script/concepts/scopes#setting_explicit_scopes)
- [Google Apps Script(GAS)初回実行で認証ブロックされる事象の原因 | AutoWorker〜Google Apps Script(GAS)とSikuliで始める業務改善入門](https://auto-worker.com/blog/?p=4542)
- [Google Apps Script で"このアプリはブロックされます"と表示され実行できない。 - スタック・オーバーフロー](https://ja.stackoverflow.com/questions/86722/google-apps-script-%E3%81%A7%E3%81%93%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%81%A8%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84)
- [Google apps script This app is blocked error](https://stackoverflow.com/questions/69262189/google-apps-script-this-app-is-blocked-error)