スキップしてメイン コンテンツに移動

GASキャッシュでAPI制限突破

GASキャッシュでAPI制限突破

CacheServiceの概要

Google Apps Script では CacheService を利用して、スクリプト実行時に頻繁に参照されるデータをメモリ上に保持できます。これにより、外部 API へのリクエスト回数を削減し、高速化API制限対策 を同時に実現できます。CacheService はスクリプト全体で共有される キャッシュ を提供し、一時保存 に最適です。

getScriptCacheで取得するキャッシュ

キャッシュを取得するには CacheService.getScriptCache() を呼び出します。getScriptCache() はスクリプト単位で共有されるキャッシュを返し、GAS応用 の際に頻繁に使用されます。以下は基本的な取得例です。

var cache = CacheService.getScriptCache();

取得したキャッシュオブジェクトは putget メソッドを持ち、キーと値でデータを管理します。

putとgetで一時保存

キャッシュにデータを保存するには put(key, value, expirationInSeconds) を使用します。expirationInSeconds はキャッシュの有効期限を秒単位で指定します。取得は get(key) で行い、存在しない場合は null を返します。

var cache = CacheService.getScriptCache();
cache.put('userList', JSON.stringify(users), 300); // 5分間保持
var cached = cache.get('userList');
if (cached) {
  var users = JSON.parse(cached);
}

このように 一時保存 を活用することで、同じデータを何度も取得する必要がなくなり、処理時間を短縮できます。

高速化とAPI制限対策

外部 API へのリクエストは GAS の実行時間や API 制限に影響します。キャッシュを使うことで、同じデータへのアクセスをキャッシュから取得できるため、高速化API制限対策 が同時に実現します。例えば、天気情報や株価データを取得するスクリプトでは、1 分ごとに更新するだけで十分なケースが多く、キャッシュを 60 秒に設定すれば API 呼び出しを大幅に削減できます。

さらに、キャッシュは スクリプト全体で共有 されるため、複数のトリガーや関数から同じデータを参照する際に重複したリクエストを防げます。

実践例とパフォーマンス改善

以下は、Google スプレッドシートで定期的に外部 API からデータを取得し、キャッシュを利用してパフォーマンスを向上させるサンプルです。

function fetchData() {
  var cache = CacheService.getScriptCache();
  var cached = cache.get('apiData');
  if (cached) {
    return JSON.parse(cached);
  }
  var response = UrlFetchApp.fetch('https://api.example.com/data');
  var data = JSON.parse(response.getContentText());
  cache.put('apiData', JSON.stringify(data), 300); // 5 分保持
  return data;
}

このスクリプトを時間ベースのトリガーで 5 分ごとに実行すると、外部 API への呼び出しは 5 分に 1 回だけで済みます。結果として、実行時間が短縮され、パフォーマンス が向上します。

この記事はAIによって作成されました。

コメント