【GAS】オーナー権限と実行者の関係

こんにちは、フリーランスエンジニアの太田雅昭です。

GASのオーナー権限

GASはオーナー権限と実行者が分かれています。これをちゃんと理解できていないと思わぬ事故に遭いそうですので、今回調べてみました。

ウェブアプリ

ウェブアプリで、以下の条件で調査しました。

  • 次のユーザーとして実行:自分
  • アクセスできるユーザー:全員

コードは以下です。sessionとgmailの両方を出力します。

function doGet() {
  const userString = getUserString();
  console.log(userString);
  return ContentService.createTextOutput(userString);
}

function getUserString() {
  const session = getSessionUser();
  const gmail = getGmailAccount();
  return JSON.stringify({ session, gmail });
}

function getSessionUser() {
  return Session.getActiveUser().getEmail();
}

function getGmailAccount() {
  const threads = GmailApp.getInboxThreads(1,1);
  return threads[0].getMessages()[0].getTo();
}

結果は以下のようになりました。

デプロイ者アクセス者sessiongmail
オーナーオーナーオーナーオーナー
オーナーオーナー以外空文字列オーナー
BBBB
BB以外空文字列B

オーナーかそうでないかに関わらず、デプロイした人に関連づけられています。またセッションは、本人以外の場合は空文字列になりました。

トリガー

トリガーについては、以下のようになりました。

トリガー設定者sessiongmail
オーナーオーナーオーナー
BBB

こちらは、session含め完全にトリガー設置者に関連づけられています。

まとめ

今回、ChatGPTに振り回されました。デプロイ実行者はオーナーになると言っていましたので、おかしいなと思い、実際にテストしてみたわけです。ハルシネーションは怖いですね。