GASの時間主導トリガーがデプロイ版に固定される罠 — 「成功したのに何も起きない」の切り分け
clasp push しても時間主導トリガーは旧バージョンのコードを実行し続ける。エラーも出ず戻り値もOKなため原因が特定できない。新関数プローブで実行中のコードを確定させ、clasp deploy -i でURLを変えずに直す手順。
約3.3万トークンの節約 (API料金換算で約49円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「GASの時間主導トリガーがデプロイ版に固定される罠 — 「成功したのに何も起きない」の切り分け」は、Google WorkspaceカテゴリのAI指示書(MDファイル)です。clasp push しても時間主導トリガーは旧バージョンのコードを実行し続ける。エラーも出ず戻り値もOKなため原因が特定できない。新関数プローブで実行中のコードを確定させ、clasp deploy -i でURLを変えずに直す手順。この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3.3万トークン(API料金換算で約49円)・93%のトークンを節約できます。
- カテゴリ
- Google Workspace
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約3.5万トークン
- この巻物使用時
- 約2,500トークン
- 節約量
- 約3.3万トークン (約49円)
- 更新日
- 2026-09-01
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/gas-7/raw を読み込んで、この指示書どおりに実装して"
中身
GAS の時間主導トリガーがデプロイ版に固定される罠 — 「成功したのに何も起きない」の切り分け
何が起きるか
Apps Script の時間主導トリガー(ScriptApp.newTrigger("fn").timeBased().everyMinutes(1).create())は、そのトリガーを作成した実行が属していたバージョンのコードで動き続ける。
ウェブアプリのデプロイ(バージョン付き)経由でトリガー設置関数が実行された場合、以後 clasp push で HEAD を何度更新しても、トリガーは古いバージョンを実行し続ける。
この罠が厄介なのは症状の出方である。
- トリガーは正常に動いている(実行され、結果も返る)
- 返り値は
OK。例外も出ない - しかし新しいコードの副作用(列の追加、データ移行など)が一切起きない
clasp pullでサーバー上のコードを確認すると、新しいコードは確かに上がっている
「コードは上がっている」「トリガーは動いている」「エラーも出ない」が同時に成立するため、原因がキャッシュ・権限・ロジックのバグのどれなのか見当がつかなくなる。
同種の罠にウェブアプリの /exec がバージョン付きデプロイを参照する件があるが、トリガー経路はウェブアプリを一度も呼ばないので、/exec を叩く検証では発見できない。別の罠として扱う必要がある。
決定的な切り分け方(推測を止める)
新しいバージョンにしか存在しない関数を、意図的に失敗する引数で呼ぶ。
// 新バージョンで追加した関数を、存在しないIDで呼ぶ
{"fn":"newFunctionName","args":[{"id":"__PROBE_NOT_EXIST__"}]}
返ってくるメッセージで、どちらのコードが動いているかが確定する。
| 返り値 | 判定 |
|---|---|
許可されていないコマンドです: newFunctionName(=関数が存在しない) | 旧コードが動いている |
その関数の中のエラー(例: 指定されたレコードが見つかりません) | 新コードが動いている |
スタックトレースの行番号も新旧でずれるので、併せて確認するとより確実になる。
この切り分けの要点は3つ。
- データを壊さない引数を使う。存在しないIDを渡せば、検証は必ず失敗側で終わり、副作用が残らない
- 成功ではなく失敗の種類を見る。「OK が返るか」ではなく「どのエラーが返るか」が情報を持つ
- 待ち時間を先に排除しておく。キャッシュや索引の遅延を疑う前に、まず 10〜15 分待って同じ結果になることを確認する。それでも変わらなければ遅延ではない
直し方
clasp push の後に、既存のデプロイIDを指定して新しいバージョンを反映する。
clasp push -f
clasp list-deployments
clasp deploy -i <既存のデプロイID> -d "<変更内容>"
-i を付けるのが要点である。付けないと新しいURLが発行されるため、利用者に配布済みのURLを貼り替えてもらう手間が発生する。既存IDを指定すればURLは変わらないままバージョンだけが上がる。
clasp list-deployments は通常2件返す。
- AKfycb...xxxx @HEAD
- AKfycb...yyyy @8 - v8
利用者が実際に踏んでいるのは @<数字> の方である。@HEAD の方を更新しても利用者の環境は変わらない。
注意 — -i での上書きが効かない環境もある
clasp deploy -i <既存ID> は Deployed ... @9 と表示されても、実際には旧コードが配信され続けたという報告がある。「Deployed と表示された」を成功判定にしてはいけない。
-i を実行したら、必ず上のプローブをもう一度実行して、新コードが動いていることを確認してから「反映しました」と報告する。プローブが旧コードのままなら、新規デプロイ(-i なし)を作る必要があるが、その場合はURLが変わるので配布物の差し替えが伴う。
チェックリスト
GAS を変更して「反映されない」と感じたら、上から順に潰す。
clasp pullして、サーバー上のコードが本当に新しいかを確認する(ここが古ければ push の失敗)- 10〜15 分待って再試行する(キャッシュ・索引遅延の排除)
- 新関数プローブで、実行されているコードが新旧どちらかを確定させる
- 旧コードなら
clasp deploy -i <既存デプロイID>を実行する - プローブをもう一度実行して、新コードに切り替わったことを確認する
- そこで初めて、本来やりたかった処理を実行する
この罠を最初から避ける設計
- トリガー設置関数は、必ずデプロイ後に実行し直す運用にする。変更のたびに
deploy → トリガー再設置をセットで行えば固定は解消される - 副作用のある移行処理は、必ず「実行した証拠」を返す。
Logger.logだけでなく、戻り値に「何行移行したか」を含める。戻り値がundefinedだと、実行されたのか素通りしたのかが区別できない - 移行関数は冪等にする。ヘッダーの内容などで現在の形を判定し、既に新形式なら何もしない。何度実行しても壊れない状態を作っておけば、切り分け中に安心して何度でも叩ける
よくある質問
+「GASの時間主導トリガーがデプロイ版に固定される罠 — 「成功したのに何も起きない」の切り分け」とは何ですか?
clasp push しても時間主導トリガーは旧バージョンのコードを実行し続ける。エラーも出ず戻り値もOKなため原因が特定できない。新関数プローブで実行中のコードを確定させ、clasp deploy -i でURLを変えずに直す手順。
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約3.5万トークンかかりますが、この巻物を使えば約2,500トークンで済みます。差し引き約3.3万トークン(API料金換算で約49円)・93%の節約です。
+どうやって使いますか?
無料です。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 既定・適用前バックアップ・触っていないセルの数式不変検査で安全に書き換える設計手順。列ごとの数式復元と、テストが緑のまま壊れる典型例つき。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア