
GAS開発の落とし穴と対策! よくあるエラー事例と解決策
Google Apps Script(GAS)を活用すると、Google スプレッドシートの自動化や業務効率化が手軽に実現できます。しかし、実装中や運用中に思わぬエラーや落とし穴に遭遇し、スムーズに動作しないことも少なくありません。
本記事では、GAS開発でよくある落とし穴とエラーの具体例を挙げ、その対策やエラー確認方法を詳しく紹介します。GASを利用するWebマーケ担当者や経理担当者、エンジニア初心者の方もぜひ参考にしてください。
1. GAS開発のよくある落とし穴と対策
① 限界を超えたデータ処理(実行時間・リソースの制限)
🔹 落とし穴
GASには1回のスクリプト実行時間が6分という制限があるため、大量のデータ処理をしようとすると途中でエラーになります。
🔹 対策
処理を分割(1回の処理で1000行ずつ処理する など)
トリガーで分割実行(時間ベースのトリガーを設定)
バッチ処理を導入(関数を分けてスケジュール実行)
🔹 例:大量データを処理するバッチ処理
function processLargeData() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("データ");
var data = sheet.getDataRange().getValues();
for (var i = 0; i < data.length; i++) {
if (i % 500 === 0) {
Utilities.sleep(500); // 負荷を軽減
}
// データ処理
sheet.getRange(i+1, 2).setValue("処理済み");
}
}
② 「Exceeded maximum execution time(実行時間超過)」エラー
🔹 落とし穴
長時間実行されるスクリプトは、GASの6分制限を超えると強制終了されます。
🔹 対策
1回の処理を短縮し、小分けに実行
Utilities.sleep() で負荷を軽減
分割してトリガー実行する
③ TypeError: Cannot read property 'xxx' of null (Nullのプロパティ参照)
🔹 落とし穴
getSheetByName() でシートが見つからない場合など、null が返されるとエラーになります。
🔹 対策
シートの存在確認をする
エラーハンドリングを実装
🔹 例:シートが存在しない場合に新規作成する
function checkAndCreateSheet() {
var sheetName = "新しいシート";
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName(sheetName);
if (!sheet) {
sheet = spreadsheet.insertSheet(sheetName);
}
sheet.getRange("A1").setValue("シートが作成されました");
}
④ Quota Exceeded(クォータ超過)
🔹 落とし穴
GASには、APIリクエストやメール送信回数などの使用制限(クォータ)があります。
🔹 対策
APIの使用回数を抑える(キャッシュを活用)
処理を分割し、一定間隔で実行
エラーハンドリングを導入
🔹 例:キャッシュを活用し、APIリクエスト回数を抑える
function fetchDataWithCache() {
var cache = CacheService.getScriptCache();
var cachedData = cache.get("apiData");
if (cachedData) {
return JSON.parse(cachedData);
}
var url = "https://api.example.com/data";
var response = UrlFetchApp.fetch(url);
var data = response.getContentText();
cache.put("apiData", data, 600); // 10分間キャッシュ
return JSON.parse(data);
}
⑤ Service invoked too many times in a short time(サービス呼び出しの回数制限)
🔹 落とし穴
APIやDrive、スプレッドシートの処理を短時間で連続実行すると、制限に達することがあります。
🔹 対策
Utilities.sleep(1000); を適宜挿入(リクエスト間隔を空ける)
バッチ処理を活用し、連続リクエストを避ける
2. エラーの確認方法
① GASの「デバッグ」機能を活用
Apps Scriptのエディタを開く
デバッグ実行(関数名の横にある「虫アイコン」をクリック)
エラー内容を確認し、どこで発生しているか特定
② try-catch を活用してエラーをログに記録
function safeFunction() {
try {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("データ");
sheet.getRange("A1").setValue("成功");
} catch (e) {
Logger.log("エラー発生: " + e.toString());
}
}
③ Logger.log() を活用してデバッグ
Logger.log("変数の値:" + variable); を適宜挿入し、スクリプトの動作を確認する。
3. 活用できる業務事例
Google スプレッドシートのデータ処理自動化
Google Driveのファイル整理
Gmailの自動転送・通知
APIデータ取得・分析
まとめ
GASを使った自動化は便利ですが、実行時間の制限やAPIクォータの制約、Nullエラーなどの落とし穴があります。本記事で紹介した事例を参考に、適切なエラーハンドリングと対策を実施しましょう。
「GASのエラーが頻発して困っている…」という方は、ぜひ試してみてください!🚀