Amazonで見るセール会場へ

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

GASが止まったとき、出てくるメッセージは英語で、しかも短いです。

ただ、出るものはだいたい決まっています

先にメッセージから引ける表を置き、そのあとで多いものから順に対処を書きます。

出るメッセージ意味対処
Exceeded maximum execution time6分の上限を超えた処理を分ける。書き込みをまとめる
Authorization is required to perform that action承認されていないエディタから一度手で実行する
Service invoked too many times1日の回数上限を超えた翌日まで待つ。回数を減らす
TypeError: Cannot read properties of null取れなかったものを使ったシート名・IDを確かめる
ReferenceError: xxx is not defined名前が違う関数名・変数名の綴り
Server error occurred, please try againGoogle側の一時的な不調少し待って再実行
Library is missingライブラリの版が消えた版を選び直す。コードを写す
UrlFetch calls to ... are not permitted管理者が通信先を制限している管理者に許可を頼む
目次

まず実行ログを見る

何が起きたかは、左のメニューの「実行数」に残っています。

行を開くと、どの関数が、いつ、どの行で止まったかが出ます。

トリガーで動いたぶんもここに残ります。

「勝手に動いて失敗していた」を見つけられる唯一の場所なので、詰まったら最初にここを開いてください。

6分で止まる|Exceeded maximum execution time

GASは1回の実行が6分までです。

個人のアカウントでもWorkspaceでも同じです。

行数が多いシートを1行ずつ読み書きすると、ここに当たります。

いちばん効くのは「まとめて書く」

時間を食っているのは、たいていセルへの読み書きの回数です。

// 遅い:1行ごとにシートへ書きに行く
for (let i = 0; i < rows.length; i++) {
  sheet.getRange(i + 1, 1).setValue(rows[i]);
}

// 速い:配列を作ってから1回で書く
const values = rows.map(r => [r]);
sheet.getRange(1, 1, values.length, 1).setValues(values);

これだけで数十倍速くなることが珍しくありません。

getValuesetValue がループの中にあったら、まずここを疑ってください。

それでも足りないとき

どこまで進んだかをスクリプトプロパティに書いておき、トリガーで続きから回します。

ただしトリガーで動く時間は1日あたり90分(Workspaceは6時間)という別の上限があります。

「6分は超えていないのにエラーにならず止まる」という場合は、こちらの上限に当たっていることがあります。

承認されていない|Authorization is required

エディタから動かすと承認の画面が出ますが、トリガーからの実行では出ません

そのまま失敗します。

  1. エディタで、その関数を一度手で実行する
  2. 承認の画面が出たら許可する
  3. そのあとトリガーを動かす

新しいサービス(Gmailやドライブなど)をコードに足したときも、承認が増えるので同じことが起きます。

「昨日まで動いていたのに」というときは、直前に足したコードを疑ってください。

「このアプリは確認されていません」と出る

自分で書いたスクリプトでも、初回の承認でこの警告が出ます。

「詳細」を開くと、そのまま進むリンクがあります。

自分のスクリプトであれば進んで問題ありません。

回数の上限|Service invoked too many times

1日に使える回数が、サービスごとに決まっています。

個人アカウントGoogle Workspace
メール送信(宛先数)100 / 日1,500 / 日
URL Fetch の回数20,000 / 日100,000 / 日
トリガーの実行時間90分 / 日6時間 / 日
トリガーの数20 / ユーザー / スクリプト
同時実行30 / ユーザー

メールの100は「宛先の数」です。

1通に10人入れれば10と数えられるので、通知のスクリプトは思ったより早く当たります。

上限に当たると翌日までリセットされません。

残りは MailApp.getRemainingDailyQuota() で確認できます。

トリガーまわりの詰まり

失敗しても気づけない

トリガーの一覧で、各トリガーの右にある鉛筆を開くと「エラー通知設定」があります。

既定は毎日まとめてです。

すぐ知りたいものは「今すぐ通知」に変えておくと、失敗のたびにメールが来ます。

トリガーが見えない・消せない

トリガーは、作ったアカウントにしか見えません。

共同編集しているシートで「誰かが仕込んだトリガーが動いているのに一覧に無い」のはこのためです。

作った本人のアカウントで開いて消してもらってください。

保存できない

1つのスクリプトに作れるトリガーは、1人あたり20までです。

試しに作ったものが残っていないか、一覧を見直してください。

外部との通信|UrlFetchApp

出るもの意味
429相手側の回数制限。間隔を空ける
400送った中身の形が違う。パラメータとJSONを見直す
401 403鍵かトークンが違う、または期限切れ
DNS errorURLの綴り。または相手が落ちている
not permitted by your adminWorkspaceの管理者が通信先を絞っている

fetch は既定で、相手がエラーを返すと例外になります。

中身を見たいときは muteHttpExceptions: true を付けると、止まらずに応答を受け取れます。

const res = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
Logger.log(res.getResponseCode());   // 429 や 400 がここで分かる
Logger.log(res.getContentText());    // 相手が返した本文

ブラウザから呼ぶと CORS で弾かれる

GASをウェブアプリとして公開し、別のサイトのJavaScriptから呼ぶときに出ます。

原因はGAS側ではなく、ブラウザが送る事前確認(プリフライト)にGASが答えられないことです。

事前確認が飛ばない形で送れば通ります。

  • Content-Typetext/plain にする(application/json だと事前確認が飛ぶ)
  • 独自のヘッダーを付けない
  • 受け取る側は e.postData.contentsJSON.parse する

公開の設定が「自分のみ」だと、そもそも外から届きません。

「全員」にしてあるかも確かめてください。

コードのエラー

TypeError: Cannot read properties of null

いちばん多いのがこれです。

取れなかったもの(null)に対して、続きの操作をしたという意味です。

const sheet = ss.getSheetByName('シート1');   // 全角の1 → 見つからず null
sheet.getRange('A1');                           // ここで TypeError

シート名の全角と半角、末尾の空白、大文字と小文字を確かめてください。

getSheetByNamegetFolderByIdgetElementById の直後で出ていたら、ほぼこれです。

ReferenceError: xxx is not defined

その名前のものが存在しません。

綴りの間違いか、別のファイルで定義した変数をそのまま使っているかのどちらかです。

構文エラー

保存した時点で赤い線が出ます。

閉じ括弧の数と、全角の記号( )が混ざっていないかを見てください。

日本語入力のまま記号を打つと、見た目が似ていて気づきにくいです。

エラーの中身を自分で残す

トリガーで動かすものは、失敗したときに何が起きたか後から読めるようにしておくと楽です。

function main() {
  try {
    doWork();
  } catch (e) {
    console.error(e.message);   // 何が起きたか
    console.error(e.stack);     // どの行か
    throw e;                    // 握りつぶさない。トリガーの失敗として残す
  }
}

最後の throw e を忘れると、失敗が「成功」として記録されます。

エラー通知も来なくなるので、記録だけして投げ直す形にしてください。

Googleスプレッドシートのほかの操作は、まとめからご覧いただけます。

まとめ

  • まず「実行数」を開く。トリガーの失敗もここに残る
  • 6分で止まるなら読み書きをまとめる。トリガーには1日90分の別の上限がある
  • 承認エラーはエディタから一度手で実行。サービスを足したら毎回
  • メールの上限100は宛先の数。翌日までリセットされない
  • トリガーは作った人にしか見えない。エラー通知は「今すぐ」にしておく
  • null のエラーは、シート名の全角・半角と空白を疑う
  • try/catch で記録したら throw で投げ直す

上限の数字は2026年9月10日時点のGoogle公式の割り当て表にもとづいています。

値は変わることがあるので、当たったときは公式の表もあわせて確認してください。

Google Workspace を学べる本と、作業が捗る機材

スプレッドシートもドキュメントも、基本の型を知ると作業時間が目に見えて減ります。

Google Workspace を学べる本

技術評論社
¥1,870 (2026/09/15 20:36時点 | Amazon調べ)
\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング
\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング
インプレス
¥2,803 (2026/09/15 20:36時点 | Amazon調べ)
\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング

作業が捗る機材

\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング
\Amazonで商品を見る/
Amazon
\楽天市場で商品を見る/
楽天市場
\Yahoo!ショッピングで商品を見る/
Yahooショッピング

選び方をもっと詳しく

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

WAZAの有料記事のサブスクリプションも開始しました。

目次