GASのエラーは、コードの誤り、実行時間、承認、サービスの割り当て、トリガーの実行条件を分けて調べます。
エラーの全文だけでなく、実行した関数・時刻・実行方式・変更範囲を記録します。
まず実行方式とエラーの発生箇所を確認する
Apps Script左側の「実行数」で、失敗した実行と関数名を確認します。
セル内カスタム関数は、セルのエラー表示と記載された行も確認します。
行番号はプロジェクトごとに違うため、本稿の番号と一致させる必要はありません。
ログを共有するときは、認証情報、個人情報、ファイルID、URLの秘密パラメータを除きます。
TypeErrorとReferenceErrorを練習表で再現する
専用の練習表のApps Scriptに次の2関数を保存します。
A8へ =debugMissingSheet()、A9へ =debugMissingVariable() を入力すると、それぞれ意図的にエラーが出ます。
業務用コードやトリガーへ追加する練習ではありません。
function debugMissingSheet() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('存在しない練習シート');
return sheet.getRange('A1').getValue();
}
function debugMissingVariable() {
return missingPracticeValue;
}
| 症状 | 確認と修正 |
|---|---|
| Cannot read properties of null | getSheetByNameがnullを返したのにgetRangeを呼んだ。シート名と存在確認を修正する |
| missingPracticeValue is not defined | 定義されていない変数を参照した。名前の誤り・宣言・スコープを修正する |
| SyntaxError | 構文が不正。括弧や引用符などを直し、保存できる状態にする |
シート不存在は、取得直後に if (!sheet) で停止させると対象名を含むエラーにできます。
Googleスプレッドシート│GASでスプレッドシートのA1セルの値を取得する方法のガードを使って、練習表でこの違いを確認できます。
DriveApp.getFolderByIdなどが例外を投げるケースまで、すべてnullチェックで直せるわけではありません。
呼び出すサービスの仕様を確認します。
練習後はA8・A9の式と、故意にエラーを起こす関数を削除します。
エラーをcatchして握りつぶすと、成功したように見えて原因が残るため、必要な状態を記録したうえで停止させます。
6分制限と30秒制限を混同しない
2026年10月2日に確認した公式の割り当てでは、一般のスクリプト実行は1回6分、カスタム関数は1回30秒です。
onEditなどの単純トリガーにも30秒の制約があります。
時間主導などのインストール型トリガーは、1回の時間に加えて1日の合計実行時間も確認します。
Exceeded maximum execution timeなら、セルごとのサービス呼び出しを、範囲のgetValues・setValuesへまとめられるか確認します。
長い処理は、処理済み位置を保存して次回へ分割します。
再開時の重複書き込みを防ぎ、LockServiceで並行実行を制御します。
改善率は入力件数と実測時間がないと判断できません。
利用回数の上限と短時間の連続呼び出しを区別する
Service invoked too many timesの対象サービスと、in a short timeなどの追記を確認します。
日次割り当てはユーザー単位で、最初のリクエストから24時間後にリセットされる仕様です。
暦の翌日になれば必ず復帰する、という意味ではありません。
短時間の呼び出し過多は、呼び出し削減や制限を設けた再試行を検討します。
日次上限に達した処理を連続で再実行しても解決しません。
承認エラーでは要求権限と実行者を確認する
Authorization is requiredなら、編集者、トリガー作成者、実行アカウント、要求権限を確認します。
カスタム関数と単純トリガーは、実行中に承認を求められないため、承認が必要な処理を移しただけでは動きません。
Drive操作やメールなどは、目的に合った承認付きの実行方式へ分けます。
未確認アプリの警告が出ても、無条件に先へ進まないでください。
自作したコードか、アクセス先と要求権限を説明できるか、組織の制限に触れないか確認します。
手動実行で動いても、別のアカウントが作ったトリガーでは権限が異なる場合があります。
トリガーを作り直す前に、既存の設定と実行履歴を控え、二重起動を防ぎます。
UrlFetchとCORSは別の実行場所の問題
UrlFetchAppはGASのサーバー側で実行するHTTPリクエストです。
HTTPの状態コード、相手のAPI仕様、認証、割り当てを確認し、レスポンス全文に秘密が含まれる場合はログへ出しません。
ブラウザーからWebアプリへfetchするときのCORSは、リダイレクト、認証画面、レスポンスヘッダーも関係します。
Content-Typeをtext/plainに変えただけで、必ず応答を読めるようになるとは限りません。
公開範囲を広げる前に、必要な呼び出し方式を見直します。
確認した範囲と、まだ実行していない範囲
本稿のTypeError、ReferenceError、シート不存在のガードは、Google Sheets上の読み取りカスタム関数で実際に確認しました。
承認後のDrive処理、トリガー、実際の上限超過、WebアプリのCORS通信は未検証です。
上限を故意に使い切るテストはしていません。
Google公式:割り当てと制限、Google公式:単純トリガー、Google公式:カスタム関数を参照します。
操作・GAS・claspの練習ZIPをダウンロードできます。
関連記事と既存の案内
関連する操作は各記事へのリンクから確認できます。
練習ZIPと本文の検証範囲を優先し、旧実装や外部の例をそのまま業務ファイルへ適用しないようにします。

