【GAS】「承認が必要です:このプロジェクトがあなたのデータへのアクセス権限を必要としています。」の表示工程を省くようにするスコープ設定
はじまり




※当ページはアフィリエイト広告を利用しています。
この記事の読者の想定
- Google Apps Script の認証がいちいちめんどくさいと思う人
- 個人で Google Apps Script を使って開発、そして利用している人
認証がクドい時ってありますよね
Google Apps Script (GAS)を利用している際に、 「承認が必要です:このプロジェクトがあなたのデータへのアクセス権限を必要としています」 というメッセージが表示されることがあります。

このメッセージは、 GAS が Google サービス内のユーザーのデータにアクセスしようとする時に、そのアクセスに必要な承認がまだ得られていない場合に表示されます。
この承認プロセスは、「OAuth」方式によって行われています。なので、 OAuth 認証情報の期限が切れていると再び認証プロセスを踏んで認証情報を更新して上げる必要があるわけです。
確かに、このメッセージはセキュリティを確保する上で重要です。
しかし、開発中や頻繁にアクセス権限の範囲を変更する必要がない場合は、この承認プロセスを簡素化もしくは省略したいと考えるかもしれません。少なくとも僕はそう考えました。
そこで、この承認プロセスを省略するための方法を紹介していきます。
1. GCPプロジェクトの設定を確認する
まず、承認プロセス省略のためにしなければならないことが、 GCP (Google Cloud Platform) プロジェクトとの連携です。
そこで、 GAS の「プロジェクトの設定」画面を開いて、「Google Cloud Platform(GCP)プロジェクト」の部分にあるプロジェクト番号が自分が紐つけたいプロジェクト番号と一致しているかどうかを確認します。

2. GCPプロジェクトでAPIを有効化する
そうしたら次に、その紐づけた GCP プロジェクトでAPIを有効化します。
GCP プロジェクトのダッシュボードを開いて、「APIとサービス」>「ライブラリ」と遷移します。

そこでライブラリを検索するページに遷移するのですが、検索する API の名称は、下記の「Google Identity」のスコープのリファレンスで確認します。
例えば、 GAS を実行して、認証プロセスのページが開いた時に表示された内容がこのような感じだったとします。

この場合、適用したい API の名称は、「Apps Script API, v1」になります。

なので、「Apps Script API」が有効になっていることを確認します。

これで有効化は完了です。
3. GAS内でスコープの明示
次に、 GAS プロジェクト内で OAuth のスコープを明示します。
そのために、「マニフェストファイル」というものを編集していきます。
appsscript.jsonを編集可にする
GAS の「プロジェクトの設定」画面を開いて、「全般設定」内の『appsscript.jsonマニフェストファイルをエディタで表示する』にチェックを付けます。

すると、appsscript.jsonというファイルが編集できるようになります。

appsscript.jsonを編集する
appsscript.jsonを開くと、色々なフィールドに対して設定が書かれていると思いますが、そのファイルの中に、"oauthScopes"フィールドを追加して OAuth スコープを明示していきます。
例えば、さっきのように、認証画面でこのように表示されていた場合・・・、

これらのスコープを加える必要があるでしょう。
{ "timeZone": "Asia/Tokyo", "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8",
...
"oauthScopes": [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/documents", "https://www.googleapis.com/auth/spreadsheets", "https://www.google.com/calendar/feeds", "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/script.container.ui", "https://www.googleapis.com/auth/spreadsheets.currentonly" ]}一部、別サイトに載っているスコープがある・・・
Google ドライブ、ドキュメント、スプレッドシートや Google カレンダーは、前節で挙げたスコープのリファレンスに載っているので比較的分かりやすいです。
しかし、「外部サービスへの接続」、「Googleアプリケーション内のプロンプトとサイドバーで、サードパーティのウェブコンテンツを表示、実行します」の項目はいまいちどのスコープで明示できるのかが分かりません・・・
それもそうです。なぜならば、先程挙げたスコープのリファレンスには載っていません。
まず、「外部サービスへの接続」なのですが、このスコープは別にあるスコープのリファレンスに載っています。

おそらく、「Other scopes」の部分で、発見できるかと思います。
{ "timeZone": "Asia/Tokyo", "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8",
// ...
"oauthScopes": [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/documents", "https://www.googleapis.com/auth/spreadsheets", "https://www.google.com/calendar/feeds", "https://www.googleapis.com/auth/script.external_request", // <- This is it! "https://www.googleapis.com/auth/script.container.ui", "https://www.googleapis.com/auth/spreadsheets.currentonly" ]}そして、また別のサイトに載っているスコープがある・・・
そして、「Googleアプリケーション内のプロンプトとサイドバーで、サードパーティのウェブコンテンツを表示、実行します」の項目なのですが、このスコープのリファレンスはまた別の場所で掲載されています・・・

このような記述が発見できたかと思います。
{ ... "oauthScopes": [ "https://www.googleapis.com/auth/script.container.ui", "https://www.googleapis.com/auth/spreadsheets.currentonly" ], ...}なので、appsscript.jsonの"oauthScopes"の中身はこのようになるでしょう。
{ "timeZone": "Asia/Tokyo", "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8",
...
"oauthScopes": [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/documents", "https://www.googleapis.com/auth/spreadsheets", "https://www.google.com/calendar/feeds", "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/script.container.ui", // <- This is it! "https://www.googleapis.com/auth/spreadsheets.currentonly" // <- This is it! ]}と、なると思うのですが、実際のところ、やりたいこととは少し違ってきます。
currentonlyをスコープに含めると結局認証プロセスが走ってしまう
currentonlyがあるスコープは、ざっと挙げると以下のものになります。
"https://www.googleapis.com/auth/documents.currentonly""https://www.googleapis.com/auth/spreadsheets.currentonly""https://www.googleapis.com/auth/presentations.currentonly"しかし、これらのスコープをappsscript.jsonに含めてしまうと、結局例の認証画面を開いて認証しなければならなくなりますので、今回はこれらのスコープは省きます。
{ "timeZone": "Asia/Tokyo", "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8",
...
"oauthScopes": [ "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/documents", "https://www.googleapis.com/auth/spreadsheets", "https://www.google.com/calendar/feeds", "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/script.container.ui", // <- This is it only! ]}そして、実行!
そして、編集したappsscript.jsonが保存されていれば、認証するためのクドい画面はもう出てこなくなるはずです。
しかし、 GAS プロジェクトを作成してから最初の実行時は、もしかしたら認証プロセスが必ず走るかもしれません。
まとめ
Google Apps Script (GAS) でOAuth認証プロセスを省略するためのスコープ設定方法を紹介しました。
本記事は、以下の流れで書かれました。
- GCP プロジェクトの設定確認
- 認証を省略したいスコープを担う API の有効化
appsscript.jsonファイルの設定方法
しかしながら、スコープの掲載場所が分かれていて探すのに苦労しました・・・
個人的には、もう、スコープは全部同じ場所に一覧で表示していてもらいたいです・・・
Google Apps Scriptの関連書籍
おしまい


以上になります!
記事を共有
この記事が役に立ったなら、ぜひ他の人と共有してください!