動かなくなったGASの原因、よくある3つ

記事
IT・テクノロジー
昨日まで動いていたスプレッドシートの自動化が、今朝から止まっている。エラーの意味もわからないし、作った人はもう社内にいない。
こういうご相談を受けることが多いので、実際によくある原因を3つ、直し方と一緒にまとめました。ご自身で確認できるところまで書いています。

■ 1. シートに列を1つ追加したら壊れた

いちばん多い原因です。スクリプトが「5列目の値を読む」という書き方になっていると、シートの途中に列を1つ挿入した瞬間、5列目は別の項目に変わります。エラーは出ないのに、入る値だけがおかしくなるのが厄介なところです。

【確認するところ】最近シートの列を追加・削除しませんでしたか。心当たりがあれば、まずここを疑ってください。

【直し方】列番号を直接書くのをやめて、見出しの名前から列を探す作り方に変えます。こうしておくと、あとで列が増えても壊れません。
■ 2. 同じメールが何通も届く

「毎朝9時に通知を送る」といった定期実行の設定が、いつの間にか何個も登録されている状態です。設定用の関数を実行するたびに1個ずつ増えていくため、5回押していれば5通届きます。

【確認するところ】スクリプトエディタの左側にある時計マーク(トリガー)を開いてください。同じ関数名が何行も並んでいたら、これが原因です。

【直し方】設定用の関数の冒頭で「同じ名前の既存トリガーを全部消してから、1個だけ作る」ようにします。これで何回実行しても増えません。

■ 3. データが増えたら途中で止まるようになった

GASには1回の実行が6分までという上限があります。以前は動いていたのに、行数が増えてから止まるようになった場合はこれです。原因はほぼ決まっていて、1行ずつシートを読み書きしている書き方です。1000行あれば1000回の読み書きが発生し、これがとにかく遅い。

【確認するところ】実行ログに「Exceeded maximum execution time」と出ていませんか。出ていればこれです。

【直し方】1行ずつではなく、範囲をまとめて一度に読み込む書き方に変えます。3000回あった読み書きが1回になり、数分かかっていた処理が数秒で終わるようになります。
■ 原因がわからないときに見る場所

上のどれにも当てはまらない場合は、スクリプトエディタの左側にある「実行数」を開いてください。赤い失敗の行をクリックすると、いつ・どの関数で・何が起きたかが出ます。ここに出ているエラー文の全文が、原因を特定するいちばんの手がかりです。意味がわからなくても、そのままコピーしておけば大丈夫です。

■ 自分で直すのが難しいときは

原因の切り分けから修正までを承っています。ご相談いただくときは、次の3つがあると早いです。

・いつから動かなくなったか
・エラー文が出ていれば、その全文
・直前に何か変更したか(列の追加、権限の変更など)

ファイルは、中身をダミーに差し替えたコピーでも構いません。構造が同じであれば原因は特定できます。出品ページに、症状をお伺いする質問をまとめてあります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す