GASエラー:「Exception: Service error: Drive」とは何が起きている状態か

この記事の内容について、業務や開発でお困りの場合は個別に対応できます。

Google Apps Script(GAS)で DriveApp や SpreadsheetApp を使った処理をしていると、次のようなエラーが突然出ることがあります。

Exception: Service error: Drive

このエラーは、エラーメッセージ自体が抽象的で、公式ドキュメントを読んでも原因が特定しづらいため、実務では特に厄介です。さらに、同じスクリプト内で「Exceeded maximum execution time」と交互に出ることも多く、混乱しやすいエラーでもあります。

この記事では、設計論に寄せすぎず、実際の業務でこのエラーに遭遇したときに何が起きていたのか、どの判断で切り替え、どう対処したかを、ZIDOOKA!の実務ログベースで整理します。


「Exception: Service error: Drive」とは何が起きている状態か

このエラーは、Google Drive 関連のサービス(DriveApp / SpreadsheetApp など)を使った処理が、Google 側で内部的に失敗したときに返されます。

重要なのは、

  • ファイルIDやパスが間違っているとは限らない
  • 権限設定が正しくても発生することがある
  • 一時的に再実行すると成功する場合もある

という点です。

実務では「コードは合っているはずなのに失敗する」「昨日までは動いていた」という形で現れることがほとんどです。


実際に起きたケース:Drive操作を含む夜間トリガーが不安定になった

ある業務で、次のような処理を行っていました。

  • 時間主導トリガーで夜間に実行
  • Drive フォルダ内のファイルを順に走査
  • ファイルをコピー・移動し、スプレッドシートに結果を書き込む

処理量が少ないうちは問題なく動いていましたが、ファイル数が増えるにつれて、実行結果が不安定になり始めました。

  • ある日は正常終了
  • ある日は Exceeded maximum execution time
  • ある日は Exception: Service error: Drive

同じコード・同じトリガーにもかかわらず、エラーの種類が変わる状況でした。


このエラーで最初に疑いがちな点と、実際に違った点

最初に疑ったのは、次のような点です。

  • Drive の権限が足りていないのではないか
  • フォルダIDやファイルIDが間違っているのではないか
  • Google 側の一時的な障害ではないか

もちろん、これらが原因になるケースもありますが、今回のケースではどれも該当しませんでした。

ログを確認すると、処理は途中まで進んでおり、特定のファイルで毎回落ちるわけでもありませんでした。


判断を変えたポイント:Driveエラーではなく「処理量」を疑う

この時点で気づいたのは、「Drive のエラー」というよりも、「Drive を使いすぎている状態」ではないか、という点でした。

  • フォルダ内のファイル数が増えている
  • ループ内で DriveApp を何度も呼び出している
  • 実行時間が 5 分前後まで伸びている

つまり、Google Apps Script の実行時間制限や内部的な API 制限に近づいた結果、

  • 実行時間側で落ちると Exceeded maximum execution time
  • Drive API 側で落ちると Exception: Service error: Drive

という形で、表に出るエラーが変わっているだけでした。


実務で有効だった対処法①:Drive操作を分割する

最も効果があったのは、Drive 操作を一度にまとめて行わないことでした。

  • フォルダ内の全ファイルを一気に処理しない
  • 1 回の実行で扱うファイル数を制限する
  • 処理位置をスクリプトプロパティで保持する

これにより、1 回あたりの実行時間を短く保つことができ、Drive エラーも発生しなくなりました。


実務で有効だった対処法②:DriveApp呼び出し回数を減らす

次に効果があったのは、DriveApp の呼び出し回数を減らす工夫です。

  • 同じファイルを何度も getFileById しない
  • ループ内で不要な Drive 操作をしない
  • 取得済みの情報は変数に保持する

Drive 系の操作は見た目以上に重いため、呼び出し回数を減らすだけで安定性が大きく変わります。


Exceeded maximum execution time と同時に出る理由

このエラーが「Exceeded maximum execution time」とセットで出やすいのは、どちらも同じ限界点に近づいた結果だからです。

  • 実行時間の上限に達すると時間切れエラー
  • Drive サービス側が先に失敗すると Drive エラー

どちらが出るかは、処理の進み具合やタイミングによって変わるため、同じスクリプトでも日によって表示が変わることがあります。


それでも発生する場合に確認すること

分割・削減を行ってもエラーが出る場合は、次の点を確認します。

  • 本当に夜間トリガーで実行する必要があるか
  • GAS 以外の手段(別サービス)を検討すべき規模ではないか
  • ファイル構成が肥大化していないか

この段階では、無理に GAS に寄せ続けない判断も重要になります。


まとめ

「Exception: Service error: Drive」は、Drive 自体が壊れているエラーではありません。

実務では、

  • Drive 操作を一度にやりすぎている
  • 実行時間や内部制限に近づいている

ことへの警告として現れるケースが非常に多いエラーです。

同時に「Exceeded maximum execution time」が出る場合は、コードの修正ではなく、作業の切り方を見直すタイミングと考えると、解決しやすくなります。

ZIDOOKA!

この記事の内容について、対応できます

この記事に関連する技術トラブルや開発上の問題について個別対応を行っています。

個別対応は3,000円〜 内容・工数により事前にお見積りします
最後までお読みいただきありがとうございました

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

AI活用に関するポリシー

当サイトでは、記事の執筆補助にAIを活用する場合がありますが、全面的な委任は行いません。