◉GEMINI LABEN
●3.8 FLASH — 3.7 Flash は 10/08 に非推奨に。旧モデルへの要求は 3.8 Flash へ自動で回されます●NANO 2.1 — gemini-nano-banana-2.1 が GA。gemini-3.1-flash-image は非推奨で停止日は未発表●DEADLINE — veo-3.1 の preview と gemini-omni-flash-preview は 10/22、Deep Research エージェントは 10/23 に停止(残り12〜13日)●Q&A — Gemini CLI でサブエージェントが MAX_TURNS で止まっても成功と報告される、という報告が出ています●TTS/LIVE — 2.5 系の音声・TTS 系プレビューは 11/17 に停止、残り38日●NEW — 停止日のない非推奨をどう扱うか。画像モデルの移行先を3つの条件で選び直す●3.8 FLASH — 3.7 Flash は 10/08 に非推奨に。旧モデルへの要求は 3.8 Flash へ自動で回されます●NANO 2.1 — gemini-nano-banana-2.1 が GA。gemini-3.1-flash-image は非推奨で停止日は未発表●DEADLINE — veo-3.1 の preview と gemini-omni-flash-preview は 10/22、Deep Research エージェントは 10/23 に停止(残り12〜13日)●Q&A — Gemini CLI でサブエージェントが MAX_TURNS で止まっても成功と報告される、という報告が出ています●TTS/LIVE — 2.5 系の音声・TTS 系プレビューは 11/17 に停止、残り38日●NEW — 停止日のない非推奨をどう扱うか。画像モデルの移行先を3つの条件で選び直す
記事一覧/Workspace 連携
◧ Workspace 連携/2026-06-29上級

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

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

Apps Script12Gemini API246OAuthセキュリティ8Google Workspace21

✦ プレミアム記事

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

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

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

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

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

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

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

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

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

問題具体的に何が起きるか
過大なスコープを引き当てる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/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

◧ Workspace 連携2026-10-03
Sheets から呼ぶ Gemini の月額を、年末の値上げ日をまたいで Apps Script で割り出す
スプレッドシートから Gemini API を呼んでいる方へ。呼び出しごとのトークン数を台帳タブに残し、2026年12月31日で終わる導入価格と2027年1月1日からの標準価格の二段で月額を見積もる Apps Script を、動かした出力つきで書き残します。
◧ Workspace 連携2026-09-01
Gemini の新機能が Workspace に出てこないとき、待ちと不具合を切り分ける順序
告知された Gemini の新機能が自分の Workspace に現れないとき、それが段階展開の途中なのか設定の問題なのかを、リリーストラックと展開ペースから機械的に判定する手順と Apps Script の台帳をまとめました。
◧ Workspace 連携2026-09-22
Workspace の外部サービス接続は既定でオンでした。管理者側と利用者側、二つの画面で確かめます
2026年9月15日から、Gemini in Workspace が Asana や Salesforce など7つの外部サービスと MCP でつながるようになりました。既定はオンです。管理コンソールと利用者のサイドパネル、二つの画面で今の状態を数える手順を書き残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます