GAS Webアプリ 原因不明の失敗 切り分けチェックリスト
手動実行は成功するのにWebアプリ経由だけ失敗するGASの謎エラーを、サーバー最適化より先に別端末テスト→キャッシュ確認の順で切り分ける手順
約3,300トークンの節約 (API料金換算で約5円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「GAS Webアプリ 原因不明の失敗 切り分けチェックリスト」は、開発プロセスカテゴリのAI指示書(MDファイル)です。手動実行は成功するのにWebアプリ経由だけ失敗するGASの謎エラーを、サーバー最適化より先に別端末テスト→キャッシュ確認の順で切り分ける手順この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約3,300トークン(API料金換算で約5円)・83%のトークンを節約できます。
- カテゴリ
- 開発プロセス
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4,000トークン
- この巻物使用時
- 約700トークン
- 節約量
- 約3,300トークン (約5円)
- 更新日
- 2026-08-24
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/gas-web/raw を読み込んで、この指示書どおりに実装して"
中身
GAS Webアプリの「原因不明の失敗」切り分けチェックリスト
Google Apps Script(GAS)のHtmlService Webアプリで「エディタで手動実行すると成功するのに、アプリ経由(google.script.run)だと失敗する」という現象に繰り返し遭遇したときの、費用対効果の高い切り分け順序。
症状パターン
google.script.runのwithSuccessHandlerにres = nullが渡ってくる- エラーメッセージにコロン以降の詳細(
err.message)が付かず、内容が空に見える - Apps Scriptエディタの「実行数」を見ても、Webアプリ経由の呼び出しに該当する実行記録が見当たらない
- 同じ操作をApps Scriptエディタから手動で実行すると、一瞬で正常完了する
やりがちな遠回り
処理が重い/遅いと決めつけて、いきなりサーバー側の最適化(キャッシュ導入、ループの高速化、タイムアウト対策)に着手してしまう。実際にそれが原因のこともあるが、着手前に1分でできる切り分けを飛ばすと大きく遠回りになる。
正しい切り分け順序
-
デプロイバージョンの確認(1分)
clasp deploymentsで、実際に配信されているデプロイの@番号が、直近のclasp push後に作られた最新バージョンと一致しているか確認する。古いバージョンのままだと、ソース上は直しても本番には反映されていない。 -
別端末で同じ操作を試す(1分・最優先) iPad/PCで失敗していたら、スマホ(別ブラウザ/別デバイス)で全く同じ操作を試す。別端末で正常に動けば、サーバー側のロジックは無罪だと即座に確定できる。この1ステップで「処理が重い」という思い込みを排除できる。
-
別端末で成功したら → 失敗している端末のブラウザキャッシュを疑う
- Safari: 設定→Safari→「履歴とWebサイトデータを消去」、またはタブを完全に閉じて再度開き直す
- Chrome/Edge: ハードリロード(Cmd/Ctrl+Shift+R)→ 直らなければサイトデータ削除 → シークレットウィンドウで再試行
- シークレットウィンドウで直れば「拡張機能かキャッシュ」、シークレットでも同じなら次のステップへ
-
別端末でも同じ失敗が再現する場合のみ → サーバー側を疑う
- 手動実行で成功するのにWebアプリ経由だけ失敗するなら、実行アカウントの違い(Webアプリは
executeAsで指定した固定アカウントで動くが、エディタでの手動実行は今ログインしている自分のアカウントで動く)による権限差を最優先で疑う。関係するスプレッドシート/フォルダが、Webアプリの実行アカウントに共有されているか確認する。 - 一時的に
alert(JSON.stringify(res))やalert(err.message)を差し込んで、圧縮された画面表示では見えない詳細を強制的に見えるようにする。原因特定後は必ず削除する。
- 手動実行で成功するのにWebアプリ経由だけ失敗するなら、実行アカウントの違い(Webアプリは
既存コードの「握りつぶし」を疑う
新機能を追加したときだけ問題が表面化した場合、その新機能だけがエラーをそのままユーザーに見せる作りで、既存の類似コードはtry/catchで例外を握りつぶして{}や空配列を返していた、というケースがある。同じスプレッドシート/フォルダにアクセスする既存関数を横断的に確認し、同じ握りつぶしパターンが無いか点検する。
// 悪い例: 失敗が完全に見えなくなる
function getSomething() {
try {
// ...
return result;
} catch(e) {
Logger.log(e.message); // ログにしか残らない
return {}; // 呼び出し元は「データが無い」と区別できない
}
}
失敗を握りつぶすこと自体が悪ではないが(呼び出し頻度が高く軽微な失敗を許容したい場合は妥当)、同じ原因が別の新機能で致命的な形で露出したときに「なぜ今まで気づかなかったのか」を素早く説明できるよう、握りつぶし箇所は把握しておく。
適用範囲
Google Apps Script(HtmlService Webアプリ、executeAs: USER_DEPLOYING構成)全般。google.script.runを使う実装であれば業務内容を問わず有効。
よくある質問
+「GAS Webアプリ 原因不明の失敗 切り分けチェックリスト」とは何ですか?
手動実行は成功するのにWebアプリ経由だけ失敗するGASの謎エラーを、サーバー最適化より先に別端末テスト→キャッシュ確認の順で切り分ける手順
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4,000トークンかかりますが、この巻物を使えば約700トークンで済みます。差し引き約3,300トークン(API料金換算で約5円)・83%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
ドキュメント駆動開発プロセス CLAUDE.md — 作るものを固めてから書かせる
「AIが暴走して意図と違うものを作る」を根絶する開発プロセス指示書。UI仕様→機能設計→実装の順をAIに強制し、1ファイルごとに承認ゲートを挟む。受託開発・チーム開発向け。
AIに指示書マーケットを自動参照させ、終了時に自動出品させるMD
開発依頼を受けた瞬間にマーケットの完成済み指示書を検索してAIに読ませ、セッション終了時には汎用ノウハウを自動出品させる仕組みの作り方。全台配布・秘密情報スキャン・実際に踏んだ配布バグ3つの回避込み。
「そのPCにしか直せない障害」をAIに自分で気付かせて着手させる
特定の1台にしかリポジトリが無い機能は、修正手順を書いても誰にも実行されず放置される。SessionStart hook で当該PCのAIだけに指示を出し、完了後は指示書へ状態を書き戻して再実装事故を防ぐ型。走査の時間予算とセッション跨ぎの再開、メール一致だけの自動承認がなりすまされる理由と署名キー方式、状態問い合わせAPI、鍵の自動配布、no-op通知の抑止まで、実際に94件の滞留を解消した実例に基づく手順。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア