Googleユーザーデータを認証なしローカルアプリに出す — GAS→公開HTTPS橋渡し
自作ダッシュにGoogleタスク/カレンダー等を、アプリにOAuthを持たせずGAS→公開HTTPS ingestへPOST→ローカルキャッシュ→Widgetで表示。Web App公開/clasp run/SA不要。funnel実ポート確認・秘密の置き場・basePath・本番再ビルド等の実測ハマりどころ付き
約3.6万トークンの節約 (API料金換算で約54円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「Googleユーザーデータを認証なしローカルアプリに出す — GAS→公開HTTPS橋渡し」は、Google WorkspaceカテゴリのAI指示書(MDファイル)です。自作ダッシュにGoogleタスク/カレンダー等を、アプリにOAuthを持たせずGAS→公開HTTPS ingestへPOST→ローカルキャッシュ→Widgetで表示。Web App公開/clasp run/SA不要。funnel実ポート確認・秘密の置き場・basePath・本番再ビルド等の実測ハマりどころ付きこの巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3.6万トークン(API料金換算で約54円)・90%のトークンを節約できます。
- カテゴリ
- Google Workspace
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4万トークン
- この巻物使用時
- 約4,000トークン
- 節約量
- 約3.6万トークン (約54円)
- 更新日
- 2026-08-20
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/google-gas-https/raw を読み込んで、この指示書どおりに実装して"
中身
Googleユーザーデータを「認証なしの自作ローカルアプリ」に表示する — GAS→公開HTTPS橋渡し
これは何を解決するか
自分で立てたダッシュボード(Next.js 等、社内や自宅で動く)に、**Google タスク / カレンダー / Keep など「本人のGoogleユーザーデータ」**を表示したい。だがアプリに Google OAuth を実装したくない/できない。しかも組織の Workspace ポリシーで Apps Script の Web App 公開共有 や clasp run が禁止、サービスアカウントは DWD 無しでは本人のタスクを読めない——という詰みがち構成。
解決: 認証をアプリに持たせず、**GAS を「本人権限を持つ橋」**として使う。GAS が Google データを読み、既に公開されている HTTPS 経路(トンネル等)でアプリの受け口に POST するだけ。
全体像
[GAS(本人権限: tasks/calendar 等)] --毎時トリガー--> データ取得
└─ UrlFetchApp.fetch(POST, 共有シークレット) ──▶ [公開HTTPS: 例 トンネル/リバースプロキシ]
└─▶ [アプリ /api/<name>/ingest]
└─ ローカルキャッシュ(JSON)に保存
[アプリ Widget] --GET /api/<name>--> キャッシュを読むだけで描画
- Web App 公開デプロイ不要(ポリシーで塞がれていても回避できる)
- clasp run 不要(機微スコープの認可が通らない環境でもOK)
- GCP サービスアカウント/ DWD 不要
実装(要点のみ・言語非依存で読み替え可)
アプリ側 A) 受け口 /api/<name>/ingest(POST)
- ヘッダ
x-<name>-secretを環境変数の共有シークレットと定数時間比較。不一致は 403。 - body(JSON) を検証し、
~/<状態ディレクトリ>/<name>-cache.jsonに保存して{ok:true, count}を返す。
アプリ側 B) 表示用 /api/<name>(GET)
- 認証(アプリ既存の仕組み)→ 上記キャッシュを読んで返すだけ。
mtimeで鮮度(stale)も返すと良い。
アプリ側 C) Widget
- GET を叩いてリスト表示。1分間隔でポーリング。空/未同期の状態表示も用意。
GAS 側
var INGEST_URL = 'https://<公開ホスト>/<basePathがあれば>/api/<name>/ingest'; // URLは非機密→コード直書き可
function pushToApp(){
var secret = PropertiesService.getScriptProperties().getProperty('<NAME>_INGEST_SECRET'); // 秘密はここ
if (!secret) return {ok:false, error:'secret未設定'};
var payload = { updatedAt:new Date().toISOString(), items: /* Tasks/Calendar 等を読んで整形 */ [] };
var res = UrlFetchApp.fetch(INGEST_URL, {
method:'post', contentType:'application/json',
headers:{'x-<name>-secret': secret},
payload: JSON.stringify(payload), muteHttpExceptions:true
});
return { ok:res.getResponseCode()===200, code:res.getResponseCode() };
}
function installPushTrigger(){ // handler名でフィルタしてから作る(他トリガーを巻き添え削除しない)
ScriptApp.getProjectTriggers().forEach(function(t){ if(t.getHandlerFunction()==='pushToApp') ScriptApp.deleteTrigger(t); });
ScriptApp.newTrigger('pushToApp').timeBased().everyHours(1).create();
}
appsscript.jsonのoauthScopesに 外部リクエスト権限(.../auth/script.external_request)と、読むデータのスコープ(tasks 等)を追加。追加後は再承認1回。
ハマりどころ(実測)
- 公開URLの実ポート/経路を思い込みで書かない。 トンネルの status を必ず確認する。実測では「公開443 → 別アプリ(ポートX) が
/subpath/*を本体(ポートY) にリバースプロキシ」しており、想定していた別ポートは 404 だった。POST もプロキシされるかを先にcurlで確かめてから GAS の URL を確定する。 - 秘密(共有シークレット)を中継ファイルやキューに入れない。 自動化のコマンドキュー等に秘密を載せると安全機構に正しくブロックされる。GAS 側は Script Property に手で1回だけ登録、アプリ側は
.env.local。URL は非機密なのでコードに直書きでよい。 - フレームワークの basePath。 ルーティングに接頭辞が付くと公開パスも変わる。GET/POST 両方のパスに反映する。
- 本番モードは再ビルドが要る。 本番起動(例:
next start)は新しい API ルートや新 env をホットリロードしない。ビルド→プロセス再起動して初めて反映される。dev の自動反映を本番と混同しない。 - 検証は3点で完結させる。 ①GAS の push 戻り値(HTTP 200+件数)②ローカルキャッシュ JSON の件数 ③Widget の実描画。どれか1つでも欠けたら「動いた」と言わない。
使わない方が良いケース
- アプリが最初から Google OAuth を持っている / 持たせてよい → 直読みの方が素直。
- データが機密で外部公開が絡む操作(例: 財務諸表を「リンクを知っている全員」に公開)→ これは安全機構が自動実行を止める。人手(正規UI)に委ねるのが正しい。
応用
Tasks を Calendar / Keep / スプレッドシートの抽出結果などに差し替えれば同じ型で横展開できる。「本人権限の読み取り」を GAS に集約し、アプリはキャッシュを読むだけの薄い表示層に保つのが要。
よくある質問
+「Googleユーザーデータを認証なしローカルアプリに出す — GAS→公開HTTPS橋渡し」とは何ですか?
自作ダッシュにGoogleタスク/カレンダー等を、アプリにOAuthを持たせずGAS→公開HTTPS ingestへPOST→ローカルキャッシュ→Widgetで表示。Web App公開/clasp run/SA不要。funnel実ポート確認・秘密の置き場・basePath・本番再ビルド等の実測ハマりどころ付き
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4万トークンかかりますが、この巻物を使えば約4,000トークンで済みます。差し引き約3.6万トークン(API料金換算で約54円)・90%の節約です。
+どうやって使いますか?
無料です。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 既定・適用前バックアップ・触っていないセルの数式不変検査で安全に書き換える設計手順。列ごとの数式復元と、テストが緑のまま壊れる典型例つき。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア