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

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

はじまり#

リサちゃん avatar
リサちゃん
ああもう、いちいち認証画面出すのめんどくさいなあ・・・
135ml avatar
135ml
ああ、ときどき表示されるやつだな
リサちゃん avatar
リサちゃん
自動トリガーを付けてても、この認証切れで動かなくなっちゃうから困っちゃうよ!
135ml avatar
135ml
まあ一応ずっと動かすことは可能です。

※当ページはアフィリエイト広告を利用しています。

この記事の読者の想定#

  • 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の関連書籍#

Google Apps Script × ChatGPTのツボとコツがゼッタイにわかる本amzn.to
Amazon.co.jpで購入する
Google Apps Script Webアプリ開発 第4版amzn.to
Amazon.co.jpで購入する
Google Apps Script目的別リファレンス 実践サンプルコード付き 第3版amzn.to
Amazon.co.jpで購入する
Google Apps Script クローリング&スクレイピングのツボとコツがゼッタイにわかる本amzn.to
Amazon.co.jpで購入する

おしまい#

リサちゃん avatar
リサちゃん
ああ、設定できてしまえば、これはかなり快適かもしれない
135ml avatar
135ml
クドかったからなあ・・・

以上になります!

記事を共有

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

【GAS】「承認が必要です:このプロジェクトがあなたのデータへのアクセス権限を必要としています。」の表示工程を省くようにするスコープ設定
https://endorphinbath.com/posts/gas-scope-settings-to-skip-oauth-process/
著者
kinkinbeer135ml
公開日
2024-03-16
ライセンス
CC BY-NC-SA 4.0
関連記事 スマート
1
【GAS】スクリプトプロパティがGUIで確認できないのでJSONに入れることにした
Code GASのエディタでスクリプトプロパティを編集出来なくなる事象を回避するために、プロパティの値をJSONで格納するように実装していく記事です。
2
【GAS】「Exception: Invalid argument: id」が出た時の対処方法
Code Google Apps Scriptで開発を行っている際に、たまに遭遇するエラー文です。シートとかファイルのオブジェクトに関係してきます。
3
【GAS】クラスを作って外部ライブラリとして呼び出したい場合は、ファクトリメソッドを作ろう
Code Google Apps Scriptで、ライブラリ化したクラスメソッドを外部のライブラリから呼べなくなってしまっている場合に、「ファクトリメソッド」を使って解決するかもしれません。本記事の方法をお試し下さい。
4
【GAS】「We're sorry, a server error occurred while reading from storage. Error code NOT_FOUND.」というエラーメッセージが出てきた時。
Code Google Apps Scriptを使用した時に、「Error code NOT_FOUND」エラーに直面したときの体験談になります。
5
【GAS】Google Apps Scriptで作った自作関数に対してテストコードを書けるライブラリ「TestGAS」を作りました!
Code Google Apps Scriptで作った関数に対して、テストコードを使って動作を検証するためのツール「TestGAS」を作成および公開しました。初めて作ったテストツールですが、個人的にかなり便利なものになったので、ぜひ使ってみて下さい。
ランダム記事 ランダム
Profile Image of the Author
kinkinbeer135ml
SIerをやめて、プログラミングを勉強しています。※Amazonアソシエイトに参加しています。
お知らせ
私のブログへようこそ!これはサンプルのお知らせです。
音楽
カバー

音楽

再生中なし

0:00 0:00
歌詞なし
カテゴリ
タグ
サイト統計
記事
287
カテゴリー
8
タグ
93
総文字数
486,174
運用日数
0
最終活動
0 日前

目次