GASキャッシュでAPI制限突破
CacheServiceの概要
Google Apps Script では CacheService を利用して、スクリプト実行時に頻繁に参照されるデータをメモリ上に保持できます。これにより、外部 API へのリクエスト回数を削減し、高速化 と API制限対策 を同時に実現できます。CacheService はスクリプト全体で共有される キャッシュ を提供し、一時保存 に最適です。
getScriptCacheで取得するキャッシュ
キャッシュを取得するには CacheService.getScriptCache() を呼び出します。getScriptCache() はスクリプト単位で共有されるキャッシュを返し、GAS応用 の際に頻繁に使用されます。以下は基本的な取得例です。
var cache = CacheService.getScriptCache();
取得したキャッシュオブジェクトは put と get メソッドを持ち、キーと値でデータを管理します。
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 回だけで済みます。結果として、実行時間が短縮され、パフォーマンス が向上します。
コメント
コメントを投稿