GASバッチ処理でAPI削減
GAS応用とパフォーマンス最適化
Google Apps Script(GAS)は、Google Workspace の自動化に最適な言語ですが、スクリプトが大規模になると実行時間が長くなり、API 呼び出し数が増えることで課金や制限に直面します。まずは、コードの構造を見直し、不要なループや重複処理を排除することが基本です。例えば、SpreadsheetApp.getActiveSpreadsheet() を毎回呼び出すのではなく、変数に保持して再利用するだけで数ミリ秒の差が出ます。
さらに、GAS では「バッチ処理」が有効です。複数のセルを書き込む際に setValues() を一度だけ呼び出すことで、API 呼び出しを大幅に削減できます。これにより、パフォーマンス最適化と API 呼び出し削減が同時に実現します。
API呼び出し削減とキャッシュ活用
GAS で頻繁に利用される API は、実行時間の約 70% を占めることが多いです。そこで、CacheService を活用して結果をキャッシュし、同じデータへの再呼び出しを避けます。キャッシュは 1 日間有効に設定することで、同一スクリプト内での重複処理を防げます。
また、UrlFetchApp.fetch() を使う場合は、ヘッダーに「Cache-Control: no-cache」を設定し、必要に応じてキャッシュをクリアすることで、外部 API への負荷を軽減します。これらのテクニックは、実行時間短縮とメモリ管理にも寄与します。
配列操作とバッチ処理
配列操作は GAS のパフォーマンスに直結します。forEach ではなく for ループを使うことで、オブジェクト参照のオーバーヘッドを減らせます。また、配列を一括で取得・更新する際は、getValues() と setValues() を併用し、行単位で処理することで API 呼び出しを最小化します。
さらに、配列を分割してバッチ処理することで、メモリ使用量を抑えつつ実行時間を短縮できます。例えば、1 万件のデータを 1,000 件ずつ処理し、途中で CacheService に一時保存することで、スクリプトのタイムアウトを回避します。
実行時間短縮とメモリ管理
GAS の実行時間は 6 分を超えると自動で停止します。実行時間短縮の鍵は、不要な変数を削除し、スコープを限定することです。ローカル変数は GC(ガベージコレクション)により自動で解放されますが、グローバル変数は残り続けるため注意が必要です。
また、スクリプトの最後に clear() を呼び出して CacheService のデータを削除することで、次回実行時のメモリ使用量を抑えます。これにより、効率化とチューニングが一体化し、安定した動作が保証されます。
コメント
コメントを投稿