Amazon10/19まで!プライム感謝祭開催中!セール会場へ

GAS│エラーの意味と対処法|6分制限・承認・回数上限・トリガー

GASのエラーは、コードの誤り、実行時間、承認、サービスの割り当て、トリガーの実行条件を分けて調べます。

エラーの全文だけでなく、実行した関数・時刻・実行方式・変更範囲を記録します。

目次

エラーメッセージ逆引き早見表

画面に出ている文字列から探してください。各行の「見る場所」が、この記事の該当する節です。

出ているメッセージ起きていること見る場所
TypeError: Cannot read properties of null (reading ‘…’)取得しようとしたものが見つからず null が返っている(シート名の違い、要素の不在)TypeErrorとReferenceErrorの節
TypeError: Cannot read properties of undefined配列の範囲外、オブジェクトのキー名違いTypeErrorとReferenceErrorの節
ReferenceError: … is not defined変数・関数の名前違い、宣言の抜け、スコープ外TypeErrorとReferenceErrorの節
SyntaxError: …括弧・引用符・カンマの対応が崩れている。全角スペースの混入TypeErrorとReferenceErrorの節
Exceeded maximum execution time1回の実行が実行時間の上限を超えた6分制限と30秒制限の節
Exceeded maximum execution time(セル内の関数で)カスタム関数の上限(30秒)を超えた。スクリプトの上限とは別6分制限と30秒制限の節
承認が必要です / このアプリは Google で確認されていません初回実行の権限付与が終わっていない承認エラーの節
アクセス権がありません / You do not have permission to call …実行者に対象ファイル・サービスの権限がない承認エラーの節
Service invoked too many times for one dayその日の利用回数の上限に達した利用回数の上限の節
Service invoked too many times in a short time / 429短時間に呼び出しが集中した(日次上限とは別)利用回数の上限の節
Service using too much computer time for one dayその日の処理時間の合計が上限に達した利用回数の上限の節
CORS policy / blocked by CORSブラウザ側からの通信の問題。GAS 側のコードのエラーではないUrlFetchとCORSの節

「Service using too much computer time for one day」「Script invoked too many times per second for this Google user account」は、Google の公式ドキュメントが制限超過時に投げられる例外の例として挙げている文面です(Quotas for Google Services)。

まず実行方式とエラーの発生箇所を確認する

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;
}
存在しないシートにgetRangeを呼んだときのTypeError
2026年10月2日、Web版Google Sheetsの専用練習表で撮影。行番号はこの練習プロジェクト内の番号です。
症状確認と修正
Cannot read properties of nullgetSheetByNameがnullを返したのにgetRangeを呼んだ。シート名と存在確認を修正する
missingPracticeValue is not defined定義されていない変数を参照した。名前の誤り・宣言・スコープを修正する
SyntaxError構文が不正。括弧や引用符などを直し、保存できる状態にする

シート不存在は、取得直後に if (!sheet) で停止させると対象名を含むエラーにできます。

Googleスプレッドシート│GASでスプレッドシートのA1セルの値を取得する方法のガードを使って、練習表でこの違いを確認できます。

DriveApp.getFolderByIdなどが例外を投げるケースまで、すべてnullチェックで直せるわけではありません。

呼び出すサービスの仕様を確認します。

練習後はA8・A9の式と、故意にエラーを起こす関数を削除します。

エラーをcatchして握りつぶすと、成功したように見えて原因が残るため、必要な状態を記録したうえで停止させます。

6分制限と30秒制限を混同しない

実行時間の上限は「スクリプトとして実行する場合」と「セルの中のカスタム関数として実行する場合」で別です。Google の公式ドキュメントの値は次のとおりです(Quotas for Google Services)。

項目無料の Google アカウントGoogle Workspace アカウント
スクリプトの実行時間(Script runtime)6分 / 1回6分 / 1回
カスタム関数の実行時間(Custom function runtime)30秒 / 1回30秒 / 1回
同時実行(Simultaneous executions per user)30 / ユーザー30 / ユーザー
トリガーの合計実行時間(Triggers total runtime)90分 / 日6時間 / 日

セルに =MYFUNC(A1) のように書いて使う関数は30秒で止まります。同じコードをエディタの実行ボタンから動かせば6分まで使えるため、「シートでは落ちるのにエディタでは動く」という食い違いはここで説明が付きます。

6分に近づいたときに効く書き換え(1セルずつ読み書きをやめる)

時間を使っているのはたいてい計算ではなく、シートへの読み書きの回数です。1行ずつ getRange().getValue() / setValue() を呼ぶ形を、まとめて1回にします。

// 遅い:1行ごとにシートへアクセスする
for (var i = 2; i <= lastRow; i++) {
  var v = sheet.getRange(i, 1).getValue();
  sheet.getRange(i, 2).setValue(v * 2);
}

// 速い:まとめて読み、配列で処理し、まとめて書く
var values = sheet.getRange(2, 1, lastRow - 1, 1).getValues();
var out = values.map(function (row) { return [row[0] * 2]; });
sheet.getRange(2, 2, out.length, 1).setValues(out);

getValues() は二次元配列を返し、setValues() は二次元配列を受け取ります。行数・列数が合っていないとエラーになるため、out.length のように書き込む配列から行数を渡すのが安全です。それでも時間が足りない場合は、処理する範囲を分割して複数回に分ける方法に切り替えます。

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時間後にリセットされる仕様です。

暦の翌日になれば必ず復帰する、という意味ではありません。

短時間の呼び出し過多は、呼び出し削減や制限を設けた再試行を検討します。

日次上限に達した処理を連続で再実行しても解決しません。

承認エラーでは要求権限と実行者を確認する

自分で書いたスクリプトを初めて実行するときは、Google に審査を出していないアプリとして扱われるため、確認の画面が挟まります。エラーではなく、権限を付ける手続きが終わっていない状態です。おおむね次の順に進みます。

  1. 実行すると、権限の確認を求めるダイアログが出る
  2. アカウントを選ぶ
  3. 審査前のアプリである旨の警告画面になるので、詳細を開く(「詳細」「Advanced」などの表記)
  4. 自分のプロジェクトへ進む案内のリンクを選ぶ
  5. スクリプトが求めている権限の一覧を確認して許可する

つまずきやすい点は次の3つです。

  • 複数のアカウントにログインしている:スクリプトの持ち主と違うアカウントで承認すると、そのアカウントの権限で動こうとして権限不足になります。承認画面でアカウント名を必ず見ます。
  • 求められている権限が広すぎると感じる:権限はコードが呼んでいるサービスから決まります。使っていないサービスの呼び出しが残っていないか確認します。
  • トリガーで動かす場合:トリガーは登録した人の権限で動きます。手動では通るのにトリガーだと権限エラーになる場合は、誰が登録したトリガーかを確認します。

Authorization is requiredなら、編集者、トリガー作成者、実行アカウント、要求権限を確認します。

カスタム関数と単純トリガーは、実行中に承認を求められないため、承認が必要な処理を移しただけでは動きません。

Drive操作やメールなどは、目的に合った承認付きの実行方式へ分けます。

未確認アプリの警告が出ても、無条件に先へ進まないでください。

自作したコードか、アクセス先と要求権限を説明できるか、組織の制限に触れないか確認します。

手動実行で動いても、別のアカウントが作ったトリガーでは権限が異なる場合があります。

トリガーを作り直す前に、既存の設定と実行履歴を控え、二重起動を防ぎます。

UrlFetchとCORSは別の実行場所の問題

UrlFetchAppはGASのサーバー側で実行するHTTPリクエストです。

HTTPの状態コード、相手のAPI仕様、認証、割り当てを確認し、レスポンス全文に秘密が含まれる場合はログへ出しません。

ブラウザーからWebアプリへfetchするときのCORSは、リダイレクト、認証画面、レスポンスヘッダーも関係します。

Content-Typeをtext/plainに変えただけで、必ず応答を読めるようになるとは限りません。

公開範囲を広げる前に、必要な呼び出し方式を見直します。

確認した範囲と、まだ実行していない範囲

本稿のTypeError、ReferenceError、シート不存在のガードは、Google Sheets上の読み取りカスタム関数で実際に確認しました。

本記事で実際に実行して確認したのは、練習表での TypeError・ReferenceError の再現までです。承認後の Drive 処理、トリガーの発火、実際に上限を超えたときの挙動、Web アプリの CORS 通信は当サイトでまだ実行していません。上限値と例外のメッセージは Google の公式ドキュメントの記載に基づいて書いており、実行して再現したものではありません。

上限を故意に使い切るテストはしていません。

Google公式:割り当てと制限、Google公式:単純トリガー、Google公式:カスタム関数を参照します。

操作・GAS・claspの練習ZIPをダウンロードできます。

関連記事と既存の案内

関連する操作は各記事へのリンクから確認できます。

練習ZIPと本文の検証範囲を優先し、旧実装や外部の例をそのまま業務ファイルへ適用しないようにします。

よくある質問:GASのエラーで迷ったときのチェックリスト

GASのエラーは、何から調べますか?

コードの誤り、実行時間、承認、サービスの割り当て、トリガーの実行条件を分けて調べます。エラーの全文だけでなく、実行した関数・時刻・実行方式・変更範囲を記録します。

「Cannot read properties of null」と出るのは、なぜですか?

記事の早見表では、取得しようとしたものが見つからず、nullが返っていることが原因として挙げられています(シート名の違い、要素の不在など)。

「Exceeded maximum execution time」と出たときは?

1回の実行が、実行時間の上限を超えた場合です。セルの中の関数(カスタム関数)で出た場合は、カスタム関数の上限(30秒)を超えており、スクリプトの上限とは別です。セルごとのサービス呼び出しを、範囲のgetValues・setValuesへまとめられるか確認します。

実行時間の上限は、いくつですか?

記事では、2026年10月2日に確認した公式の割り当てとして、スクリプトの実行は1回6分、カスタム関数は1回30秒、トリガーの合計実行時間は無料アカウントで90分/日、Google Workspaceで6時間/日と説明しています。最新の数値は、公式で確認してください。

「シートでは落ちるのに、エディタでは動く」のは、なぜですか?

セルに関数として書いて使う場合は30秒で止まりますが、同じコードをエディタの実行ボタンから動かせば、6分まで使えるためです。

6分に近づいたときは、どう書き換えますか?

時間を使っているのは、たいてい計算ではなく、シートへの読み書きの回数です。1行ずつ読み書きする形を、getValues・setValuesで、まとめて1回にします。それでも足りない場合は、処理する範囲を分割して、複数回に分けます。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

スプレッドシート・GASのおすすめ書籍

作業環境の作り方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次