GEMINI LABEN
MODEL — Gemini 3.5 Flashが一般提供。エージェント・コーディング向けの最有力モデルとして公開されましたAGENT — Managed AgentsがGemini APIで公開プレビュー。隔離されたLinuxサンドボックスで自律エージェントを実行できますWEBHOOK — Event-driven WebhooksがBatch APIと長時間処理に対応し、ポーリングが不要になりましたSECURITY — 6/19以降、未制限APIキーからのリクエストが遮断されます。キーの制限設定を見直しましょうDEPRECATED — 画像プレビュー2モデルが6/25で停止します。preview依存のフローは早めに移行をCODEASSIST — 6/18より個人向けCode Assist拡張とCLIが、AI Pro/Ultra層への提供を停止しましたMODEL — Gemini 3.5 Flashが一般提供。エージェント・コーディング向けの最有力モデルとして公開されましたAGENT — Managed AgentsがGemini APIで公開プレビュー。隔離されたLinuxサンドボックスで自律エージェントを実行できますWEBHOOK — Event-driven WebhooksがBatch APIと長時間処理に対応し、ポーリングが不要になりましたSECURITY — 6/19以降、未制限APIキーからのリクエストが遮断されます。キーの制限設定を見直しましょうDEPRECATED — 画像プレビュー2モデルが6/25で停止します。preview依存のフローは早めに移行をCODEASSIST — 6/18より個人向けCode Assist拡張とCLIが、AI Pro/Ultra層への提供を停止しました
記事一覧/Workspace 連携
Workspace 連携/2026-06-29上級

Apps Script × Gemini 自動化の権限を最小に保つ — 明示スコープ設計とスコープ肥大の検知

Apps Script で Gemini 自動化を組むと OAuth スコープが静かに肥大します。appsscript.json に明示スコープを宣言し、肥大を CI で検知し、再同意の事故を避ける設計をまとめました。

Apps Script3Gemini API154OAuthセキュリティ4Google Workspace12

プレミアム記事

ある朝、半年ほど静かに動いていた Sheets 連携の自動化を少し直してデプロイしたところ、再認可の画面が出ました。そこに並んでいたのは「Gmail のすべてのメールの読み取り、作成、送信、完全な削除」。直したのは Sheets に一行書き足す処理だけで、Gmail には一切触れていません。

それでも、その権限を求められました。

理由は単純で、私が以前テストで GmailApp を一度呼び、その行をコメントアウトしただけで消し忘れていたからです。Apps Script はコードを静的に走査して「使われていそうな API」からスコープを自動推定します。コメントの中の一行が残っていれば、それを根拠に最大級のスコープを要求してくることがあります。

個人開発で、私はいくつもの自動化を Workspace 上に抱えています。そうなると、この「自動推定されたスコープ」が時間とともに静かに膨らみます。本稼働しているスクリプトが、本来必要のない読み書き権限をいつの間にか握っている。これは事故が起きたときの被害範囲(blast radius)を無自覚に広げる、地味ですが重い負債です。

その負債を断つために、Gmail・Sheets・Gemini API をまたぐ典型的な自動化を題材として、appsscript.json で必要最小限のスコープを宣言し、肥大を CI で検知し、スコープ変更時の再同意事故を避けるところまでを扱います。

なぜ自動推定スコープが危険なのか

Apps Script のスコープには、二つの決め方があります。

一つは、何も宣言しないとコードから自動推定される方法。もう一つは、appsscript.jsonoauthScopes フィールドに自分で明示する方法です。後者を書いた瞬間、自動推定は止まり、宣言したスコープ「だけ」が要求されます。

自動推定が危険なのは、次の三点が重なるからです。

問題具体的に何が起きるか
過大なスコープを引き当てるGmailApp.search() を1回呼ぶだけで「メールの完全な読み書き・削除」スコープが付く。読み取りだけのつもりでも削除権限まで握る
死んだコードが権限を生むコメントアウトや到達不能な分岐に残ったAPI呼び出しからもスコープが推定される。実際には使っていない権限を要求する
変化が見えない誰がいつどの権限を増やしたかが履歴に残らない。レビュー対象にならず、肥大に気づけない

最小権限(least privilege)の原則は「そのコードが今この瞬間に必要とする権限だけを持つ」ことです。自動推定はこの原則と本質的に相性が悪いのです。

題材にする自動化

具体例で考えます。次のような、私自身が実際に運用しているのに近い構成を想定します。

  • Gmail の特定ラベルの未読メールを読む(送信も削除もしない)
  • 本文を Gemini API に渡して要約・分類する
  • 結果を1枚のスプレッドシートに追記する

この自動化に「本当に必要な権限」は、突き詰めると次の三つだけです。

  1. Gmail を読むだけgmail.readonly
  2. 自分が作った特定のスプレッドシートへの読み書き(spreadsheets.currentonly)
  3. 外部 HTTP リクエスト(Gemini API を叩くため。script.external_request

メールの送信権限も、Drive 全体の権限も要りません。自動推定に任せると、ここに送信・削除権限まで紛れ込みます。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
gmail.readonly と spreadsheets.currentonly を appsscript.json の oauthScopes に明示し、Apps Script の自動付与スコープを締め出す具体手順
宣言済みスコープを許可リストと突き合わせ、肥大を検知する CI スクリプト(コピーして使える完全版)
スコープ変更で全ユーザーに再同意を強いる事故を避ける、段階的な権限移行の進め方
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Workspace 連携2026-04-09
Google Workspace × Gemini API 業務自動化の運用ノート — Apps Script 実装パターン12選と本番設計
Gemini API と Google Apps Script で Gmail・Docs・Sheets・Calendar を横断する業務自動化を組む実装パターン12選。4サイト運用とアプリ問い合わせ対応で踏んだ落とし穴を、429の握りつぶし・JSONフェンス・6分制限・モデル振り分けの実測付きで整理しました。
API / SDK2026-05-18
Apps Script から Gemini API を呼ぶと長い生成で止まる原因と対処 — UrlFetchApp タイムアウトと 6 分実行上限の壁
Apps Script から Gemini API を呼んだときに UrlFetchApp のタイムアウトと 6 分の実行上限のどちらで止まっているかを見分け、分割実行・チェックポイント・トリガー再開で乗り切る実用パターンをまとめます。
Workspace 連携2026-05-06
Google Workspace の Gemini 機能が突然使えなくなった:管理者・ユーザー別の原因と対処法
Google Workspace の Gemini 機能が急に消えた・使えなくなったときの原因を管理者側とユーザー側に分けて整理。ライセンス失効からブラウザキャッシュまで、7つのチェックポイントをコード不要で解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →