0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

九州コーディシステム株式会社Advent Calendar 2024

Day 1

Spreadsheet &GAS のUrlFetchApp.fetch ではまった話

Last updated at Posted at 2024-11-30

Google Spreadsheet&GASで勤怠管理のシートを作成していた際に、
祝日カレンダーの取得処理実装で30分ほどはまったのでメモ。

現象

gasのonEdit()から祝日取得の関数を呼び出す際に、以下のエラーで怒られる。

Exception: UrlFetchApp.fetch を呼び出す権限がありません。必要な権限: https://www.googleapis.com/auth/script.external_request


祝日取得の関数は以下がメインの処理。
var response = UrlFetchApp.fetch("https://holidays-jp.github.io/api/v1/" + year + "/date.json");

やったこと その1

appscript.json に、oauthScopes を追加。

  "oauthScopes" : [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/spreadsheets",
    "https://www.googleapis.com/auth/script.external_request"
  ]

少しはまったところ

appscript.json が保存できない。。
image.png

→原因はカンマ追加漏れ(oauthScopesを一番最後に追加したので)。
 嘘と思うかもしれないが、日頃から使っていないとこんなところでハマる

やったこと その2

権限追加したし、うまくいくやろーと思ってSpreadsheetのセル編集(onEdit関数キック)したが、動かない。
ログを見ると、先ほどと同じエラーが吐かれている。
ちなみに、デバッグで祝日取得の関数を実行すると、問題なく動く。

ダメ元でGeminiさんに聞いてみると、以下の回答。

Google Apps Script (GAS) の onEdit トリガーで UrlFetchApp.fetch を使用する場合に権限エラーが発生する問題は、GASの Simple Trigger と Installable Trigger の違いに起因しています。

なるほど、、わからん。

Simple Trigger

スプレッドシートの編集など、特定のイベントが発生したときに自動的に実行されるトリガーです。
onEdit はSimple Triggerの一種です。
Simple Triggerで実行される関数は、実行ユーザーの権限で動作します。
スクリプトが UrlFetchApp.fetch のような外部サービスにアクセスする権限を必要とする場合、実行ユーザーが事前にその権限を承認している必要があります

Installable Trigger

スクリプトエディタから手動で設定するトリガーです。
Installable Triggerで実行される関数は、スクリプトのオーナーの権限で動作します。
スクリプトのオーナーが外部サービスへのアクセスを承認していれば、実行ユーザーが承認していなくても UrlFetchApp.fetch を使用できます

ふむふむ、Installable Triggerでトリガーイベントを作っておけば、よさげと。

ちなみに、追加の仕方は以下のとおり。

  1. スクリプトエディタで、[トリガー] > [トリガーを追加] を選択
  2. イベントソースを「スプレッドシート」、イベントの種類を「編集時」、関数を選択して保存

サクッとトリガ追加してSpreadsheetの編集したら、無事に祝日取得処理が動作した!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?