Domain-Wide Delegation の許可済みスコープを管理画面を見ずにトークン取得で実測する
SAのDWDでスコープを1つずつ単独要求し unauthorized_client の有無で許可リストを確定。既存+追加の完全な値を管理者に渡し、反映もループで自動検知する
約3.8万トークンの節約 (API料金換算で約56円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「Domain-Wide Delegation の許可済みスコープを管理画面を見ずにトークン取得で実測する」は、Google WorkspaceカテゴリのAI指示書(MDファイル)です。SAのDWDでスコープを1つずつ単独要求し unauthorized_client の有無で許可リストを確定。既存+追加の完全な値を管理者に渡し、反映もループで自動検知するこの巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3.8万トークン(API料金換算で約56円)・94%のトークンを節約できます。
- カテゴリ
- Google Workspace
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4万トークン
- この巻物使用時
- 約2,500トークン
- 節約量
- 約3.8万トークン (約56円)
- 更新日
- 2026-10-14
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/domain-wide-delegation/raw を読み込んで、この指示書どおりに実装して"
中身
Google Workspace の Domain-Wide Delegation で「今どのスコープが許可されているか」を管理画面を見ずに実測する
何に使うか
- サービスアカウント(SA)に DWD でスコープを足したいが、管理コンソールの既存設定を見られない(自分は管理者でない/スクショ往復を避けたい)。
- 「上書き」で既存スコープを消さないよう、既存スコープ+追加分の完全な値を管理者に渡したい。
- 管理者が設定した後に「反映されたか」を自動で検知したい(反映は最大24時間かかることがある)。
原理
DWD のトークン交換(JWT Bearer)は、要求したスコープが全部許可リストに含まれる時だけ成功し、1つでも欠けると 401 unauthorized_client を返す。
→ スコープを1つずつ単独で要求すれば、各スコープの許可有無が確定できる。API 呼び出しは一切行わずトークン発行だけなので副作用はない。
手順(Node 18+、依存なし)
- SA の JSON 鍵(
client_email,private_key,client_id)と、なりすます Workspace ユーザー(sub)を用意する。鍵の値はログに出さない。 - 調べたいスコープの候補を列挙する(よく使うもの: gmail.send / gmail.readonly / gmail.modify / gmail.compose / gmail.metadata / gmail.settings.basic / spreadsheets / spreadsheets.readonly / drive / drive.readonly / drive.file / calendar / calendar.readonly / admin.directory.user.readonly /
https://mail.google.com/)。 - 各スコープについて下のスクリプトで 1 回ずつトークン取得を試す。
// dwd-probe.mjs usage: SA_KEY_PATH=key.json SUBJECT=user@<自社ドメイン> node dwd-probe.mjs
import fs from 'node:fs';
import crypto from 'node:crypto';
const key = JSON.parse(fs.readFileSync(process.env.SA_KEY_PATH, 'utf8'));
const subject = process.env.SUBJECT;
const scopes = ['gmail.send', 'gmail.readonly', 'spreadsheets.readonly' /* … */]
.map((s) => (s.startsWith('https://') ? s : `https://www.googleapis.com/auth/${s}`));
console.log('client_id', key.client_id);
for (const scope of scopes) {
const now = Math.floor(Date.now() / 1000);
const enc = (o) => Buffer.from(JSON.stringify(o)).toString('base64url');
const unsigned = `${enc({ alg: 'RS256', typ: 'JWT' })}.${enc({
iss: key.client_email, sub: subject, scope,
aud: 'https://oauth2.googleapis.com/token', iat: now, exp: now + 300,
})}`;
const sig = crypto.createSign('RSA-SHA256').update(unsigned).sign(key.private_key).toString('base64url');
const r = await fetch('https://oauth2.googleapis.com/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer', assertion: `${unsigned}.${sig}` }),
});
const j = await r.json();
console.log(scope.split('/').pop(), '→', r.status, j.access_token ? 'OK' : `${j.error}`); // トークン本体は出さない
}
OKだったスコープ=現在の許可リスト(候補に挙げた範囲での実測)。これに追加分を足したカンマ区切りの完全な値を作り、管理者に「該当 Client ID の行を編集 → OAuth スコープ欄を丸ごとこの値に置換 → 承認」と渡す。- 反映待ちは同じスクリプトをループ(例: 5分おき・最長24時間)で回し、追加スコープが
OKになった時点で次の処理(初回取込など)へ進む。
注意点
- 候補に無いスコープは検出できない。**未許可と出たものは「候補の中では未許可」**であって、全スコープの一覧ではない。重要な既存連携がある場合は候補を広めに取る。
sub無し(なりすましなし)でのトークン取得は DWD を通らないので、この判定には使えない。- 管理コンソールの「新しく追加」で同じ Client ID を登録すると既存行を上書きしうる。既存行の「編集」を使うよう案内する。
- DWD のスコープを変更する公開 API は無い(Google 公式ヘルプも管理コンソールの手順のみ)。変更そのものは特権管理者の操作になる。
- アプリ側では、DWD で許可されていないスコープを1つでも JWT に混ぜると全リクエストが失敗する。用途別(送信用・読取用)にトークンのキャッシュを分け、許可済みスコープだけを要求する。
よくある質問
+「Domain-Wide Delegation の許可済みスコープを管理画面を見ずにトークン取得で実測する」とは何ですか?
SAのDWDでスコープを1つずつ単独要求し unauthorized_client の有無で許可リストを確定。既存+追加の完全な値を管理者に渡し、反映もループで自動検知する
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4万トークンかかりますが、この巻物を使えば約2,500トークンで済みます。差し引き約3.8万トークン(API料金換算で約56円)・94%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
GAS完全自動化テンプレ — Driveコマンドキュー方式
Google Apps Script の「毎回エディタで▶実行」を根絶。Drive 経由のコマンドキューで、初回1クリック以降は AI がすべての GAS 関数をリモート実行できるようになるテンプレート指示書。
人間の手入力台帳を壊さずに自動更新する — GAS Web App upsert 設計
各PC/各拠点の点検結果を、人間が手運用しているスプレッドシート台帳へ自動反映する。手入力列とコメントを絶対に壊さない突合設計、タブ/列の解決、並行POST対策、配布シークレットの落とし穴まで。
数式まみれの業務スプレッドシートを、Webアプリから壊さずに編集させる型
ArrayFormula と per-row 数式が混在する台帳を、セル単位 allowlist・dry-run 既定・適用前バックアップ・触っていないセルの数式不変検査で安全に書き換える設計手順。列ごとの数式復元と、テストが緑のまま壊れる典型例つき。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア