GASエラーで急に止まった時の確認順

記事
IT・テクノロジー
先月まで動いていたGASが、今月は途中で止まる。月末の集計中に起きると、作業も確認もそこで止まってしまいます。私は会社のバックオフィスで給与・勤怠・経費を担当していますが、こういう時は、止まった理由を探す前に手作業へ戻したくなります。

ただ、思いつくままコードを直すと、最初の原因が分からなくなることがあります。まずは「いつ、どこまで動いて、何と表示されたか」を残すと、確認する場所を絞りやすくなります。

■ 最初にエラーの記録を残す

Apps Scriptの「実行数」画面で、止まった実行の日時と実行した関数、表示されたエラーを確認します。最後に成功した実行と比べると、毎回止まるのか、特定の日だけ止まるのかも分かります。エラーの文面は途中を省略せず控え、行番号があれば一緒に残してください。

次に、最後に動いた時から変えたことを書き出します。シート名の変更、列の追加、見出しの書き換え、入力件数の増加、利用するアカウントの変更などです。コードを触っていなくても、読み取る表が変われば動かなくなることがあります。

修正前のスクリプト全文と、確認に使う表のコピーも保存します。実行すると通知や転記が行われる処理では、同じボタンを何度も押す前に、どこまで処理済みかを確かめておくと安心です。

■ 表の変更とデータの中身を確かめる

確認する時は、次の順に一つずつ見ます。

1. コードが指定しているシート名と、現在のシート名を比べる。
2. 読み取る列の順番と、見出しの位置を比べる。
3. 止まった付近の行に、空欄や文字の入った数値欄がないかを見る。
4. 最後に成功した時より、行数が大きく増えていないかを見る。

例えば、金額の列の前に備考欄を追加すると、列番号で読み取る処理が備考を金額として扱う可能性があります。見た目では一列増えただけでも、コードが参照している位置を確かめる必要があります。

TypeErrorと表示された場合も、空欄が原因と決めつけないことが大切です。必要なシートが見つからず、その後の処理で止まることもあります。エラーが出た行で「何を取り出し、何の操作をしようとしているか」を見ます。意味が分からない命令を削除して先へ進めると、必要な検査までなくなるおそれがあります。

■ 小さな見本で一つずつ試す

原因の候補が見つかったら、架空の数行を入れた確認用の表で試します。通常の行、空欄のある行、月末の日付の行などを用意し、本来の結果を先に手で書いておきます。変更は一か所ずつ行い、結果が一致するかを比べます。

実行時間に関するエラーなら、少ない行では完了するか、件数を増やすと止まるかを確認します。件数が関係していそうでも、制限の値を勝手に書き換えて解決しようとせず、繰り返しの中で同じ表を何度も読み書きしていないかを見るのが次の確認です。

手動では動くのに自動実行だけ止まる場合は、トリガーに設定した関数と、失敗した実行の記録を照らし合わせます。権限に関する表示があれば、利用するアカウントも確認します。むやみにトリガーを追加すると、同じ処理が二重に動く原因になります。

直った後は、結果の行数と合計、処理済みの範囲まで確かめます。「エラーが出ない」と「必要な結果がそろう」は別の確認です。私も月末の作業では、最後の一行が抜けていないかまで見るようにしています。

■ 直すのを頼みたい方へ

既存GASの不具合について、原因の調査と修正、確認結果、元に戻す手順をお届けしています。表示されたエラーと本来の動きを、個人情報を伏せてココナラ内のメッセージでお知らせください。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す