見出し画像

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の「デバッグ」機能を活用

  1. Apps Scriptのエディタを開く

  2. デバッグ実行(関数名の横にある「虫アイコン」をクリック)

  3. エラー内容を確認し、どこで発生しているか特定

② 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のエラーが頻発して困っている…」という方は、ぜひ試してみてください!🚀

いいなと思ったら応援しよう!