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」が出る場合は、コードの修正ではなく、作業の切り方を見直すタイミングと考えると、解決しやすくなります。