UrlFetchAppを使いこなす:GASでの外部API連携の基本と実践

UrlFetchAppを使いこなす:GASでの外部API連携の基本と実践

記事
IT・テクノロジー
こんにちは、GASおじです。今回はGoogle Apps Script(以下GAS)で外部APIと連携する際の基本と実践的な使い方を解説するよ。中小企業の経営者さんやフリーランスの皆さんが、GASを使って効率的にデータを取得・保存しつつ、コスト面でも賢く運用できるようにおじさん流のノウハウをお伝えするぜ。

おじさんもSaaSの課金にはシビアだから、無駄なコストは極力抑えたい。GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしで使えるけど、quotaや実行時間の上限があることは頭に入れておこう。


■ UrlFetchAppの基本と初期設定

GASで外部APIを呼び出すには「UrlFetchApp」を使うのが基本中の基本。HTTPリクエストを飛ばして、JSONやXMLなどのデータを取得できるんだ。


□ 初期設定と必要権限

・GASのスクリプトエディタを開いて新規プロジェクトを作成。
・外部APIにアクセスするため、「インターネットにアクセスする」権限(スクリプトのOAuth認証)が必要になる。
・APIによってはAPIキーやOAuth認証が求められるので、事前に発行・設定しておこう。


□ 個人情報の取り扱い

外部APIに送るデータや取得した情報は個人情報や機密情報の場合が多い。GASプロジェクトのアクセス権は最小限にし、保存先のスプレッドシートも共有設定に注意しよう。


■ 実践コード例:APIデータ取得と日時付き新規シートへの保存

ここでは外部APIからJSONデータを取得し、新しいシートを作成して日時を名前に含めて保存する例を紹介するよ。既存のシートは更新せず、過去のデータは残す運用を意識してる。

function fetchAndSaveApiData() {
// 接続先URLはスクリプトプロパティ「API_URL」に保存しておく
const apiUrl = PropertiesService.getScriptProperties().getProperty('API_URL');
if (!apiUrl) {
throw new Error('API_URLが未設定です');
}
const ss = SpreadsheetApp.getActiveSpreadsheet();

try {
// URLFetchAppでGETリクエスト
const response = UrlFetchApp.fetch(apiUrl, {method: 'get', muteHttpExceptions: true});
if (response.getResponseCode() !== 200) {
throw new Error('APIリクエスト失敗: ' + response.getResponseCode());
}

// JSONデコード
const data = JSON.parse(response.getContentText());

// バッチ書き込み用の2次元配列を生成(ヘッダー+データ)
const values = [['userId', 'id', 'title', 'body']];
data.forEach(item => {
// 入力検証:必須キーの存在チェック
if (item.userId && item.id && item.title && item.body) {
values.push([item.userId, item.id, item.title, item.body]);
}
});

// 新しいシート名に日時を付与(例:APIデータ_2026-07-20_14-30)
const now = new Date();
const sheetName = Utilities.formatDate(now, Session.getScriptTimeZone(), "yyyy-MM-dd_HH-mm-ss");
const newSheet = ss.insertSheet('APIデータ_' + sheetName);

// バッチで書き込み(1回だけのsetValues)
newSheet.getRange(1, 1, values.length, values[0].length).setValues(values);

} catch (e) {
Logger.log('エラー発生: ' + e.message);
}
}

このコードは、

・APIのレスポンスコードをチェックし
・JSONの構造を検証しつつ必要なデータのみ抽出
・新規シートに日時付きで保存(既存データは消さない)
・バッチ書き込みでパフォーマンス最適化
というポイントを押さえてる。


■ バックアップ・ロールバックの考え方と復元手順

GASでデータを扱うとき、既存データを直書きで消しちゃうのは怖い。だからおじさんは「新規シート作成+日時保存」で履歴を残す運用をオススメしてる。万が一不具合があっても、過去のシートに戻せば済むからね。

・バックアップ方法:新規シートを自動生成してデータを保存
・ロールバック:問題があった時は手動で前のシートをコピーし直すか、必要に応じて新シートを作り直す
Googleスプレッドシート自体もバージョン管理があるけど、APIデータの履歴はスクリプト側で管理しておくほうが安全だ。


■ トリガー設定と実行上限に注意

外部API連携は定期実行したいことが多い。GASの「installable trigger(時間主導型トリガー)」を設定すれば、毎日や毎時間の自動実行ができるね。

ただし、

・1日の実行回数制限や
・1回の実行時間制限(6分程度)
があるから、取得データが多すぎるバッチ処理は分割する工夫が必要だ。APIのレスポンスサイズや頻度に応じてスケジュールを調整しよう。


■ コスト削減のイメージと計算例

例えば、外部のSaaSを使って月額1万円かかっていたAPI連携をGASで自動化した場合を考えよう。

・GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なし(ただしquotaあり)
・月額1万円のSaaSを解約できれば、単純計算で年間12万円のコスト削減
・ただしGASの実行時間が増えすぎるとquota超過リスクあり。効率的なコード設計が不可欠
計算式は、

年間コスト削減額 = (SaaS月額料金 × 12) - GASの運用コスト(主に工数)

工数削減や運用自動化効果も合わせて考えると、かなりのメリットになるはずだ。


□ まとめ

・UrlFetchAppはGASで外部API連携するための基本API
・取得したデータは新規日時付きシートに保存し既存データを消さない運用が安全
・入力検証、バッチ書き込みで安定性・効率アップ
・トリガー設定やquota制限に注意しつつコスト圧縮を狙う
・個人情報管理と権限設定は慎重に

■ GASの相談や導入サポートを見たい方へ

この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。

■ 関連サービス

GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す