📘 Google Apps Scriptで外部API連携(UrlFetchApp)完全ガイド
「GASを使ってもっと自動化したい!」と思ったときに避けて通れないのが、外部API連携です。実務で使うなら、ただHTTP通信するだけじゃなく、GASをシステムのハブとして使いこなすことが重要です。
① 外部APIとは?
ざっくり言うと、Web上のサービスをプログラムから操作できる仕組みです。GASで外の世界にアクセスするための窓口みたいなものですね。
✅ 代表例
- 天気情報取得
- Slack通知
- LINE通知
- AI連携(ChatGPTなど)
- 社内APIとの連携
要するに、「GASの外にあるデータや機能を使う」ための方法です。
② UrlFetchAppの基本
GASでは、UrlFetchApp.fetch()を使って簡単にAPIへリクエストを送れます。
✅ GETリクエスト
const response = UrlFetchApp.fetch("https://api.example.com");
const text = response.getContentText();
Logger.log(text);
返ってくるのはHTTPレスポンスで、JSONならオブジェクトに変換できます。
✅ JSON取得
const data = JSON.parse(response.getContentText());
③ HTTP構造を理解しよう
API連携の本質は「リクエスト → サーバ → レスポンス」の流れです。
✅ 主なHTTPメソッド
| メソッド | 目的 |
|---|---|
| GET | 取得 |
| POST | 作成 |
| PUT | 更新 |
| DELETE | 削除 |
④ POST送信(実務で必須)
const url = "https://api.example.com";
const options = {
method: "post",
contentType: "application/json",
payload: JSON.stringify({
name: "鈴木",
age: 30
})
};
const response = UrlFetchApp.fetch(url, options);
APIにデータを送るときに使います。
⑤ ヘッダー設定(認証)
認証が必要なAPIでは、ヘッダーにAPIキーを設定します。
✅ 例:APIキー付きGET
const options = {
method: "get",
headers: {
"Authorization": "Bearer API_KEY"
}
};
⑥ 実務パターン
✅ パターン①:外部APIからデータ取得
function getApiData() {
const url = "https://api.example.com/data";
const res = UrlFetchApp.fetch(url);
const data = JSON.parse(res.getContentText());
Logger.log(data);
}
✅ パターン②:Slack通知
function sendSlack() {
const url = "Webhook URL";
const payload = { text: "処理が完了しました" };
UrlFetchApp.fetch(url, {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
});
}
✅ パターン③:LINE通知
function sendLine() {
const url = "https://notify-api.line.me/api/notify";
const options = {
method: "post",
headers: { "Authorization": "Bearer TOKEN" },
payload: { message: "通知です" }
};
UrlFetchApp.fetch(url, options);
}
✅ パターン④:API → シート保存
function apiToSheet() {
const res = UrlFetchApp.fetch("https://api.example.com");
const data = JSON.parse(res.getContentText());
const output = data.map(item => [ item.name, item.value ]);
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange(1, 1, output.length, 2).setValues(output);
}
⑦ JSONの扱い(超重要)
APIから返ってくるJSONはオブジェクトに変換して操作します。
✅ 例
{
"users": [
{ "name": "鈴木", "age": 30 }
]
}
✅ アクセス方法
data.users[0].name;
⑧ エラー処理(必須)
✅ ステータス確認
const res = UrlFetchApp.fetch(url);
const code = res.getResponseCode();
if (code !== 200) {
throw new Error("APIエラー");
}
✅ try-catch
try {
const res = UrlFetchApp.fetch(url);
} catch (e) {
Logger.log(e);
}
⑨ パフォーマンス・設計
- リクエスト削減 → APIはまとめて呼ぶ
- レート制限対応 →
Utilities.sleep(1000) - キャッシュ活用 →
CacheService.getScriptCache()
⑩ トリガー連携(実務)
毎日・毎時の定期API取得も簡単に設定できます。
function batchApi() {
// 外部API呼び出し
}
⑪ よくあるミス
- JSON解析忘れ → responseは文字列
- contentTypeミス → application/json 必須
- 認証漏れ → APIキー忘れ
- POST形式違い → JSON or form-data注意
⑫ 実務テンプレ(完成形)
function externalApiFlow() {
const url = "https://api.example.com";
try {
const res = UrlFetchApp.fetch(url);
const data = JSON.parse(res.getContentText());
const output = data.map(item => [ item.name, item.value ]);
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.getRange(1, 1, output.length, 2).setValues(output);
} catch (e) {
Logger.log(e);
}
}
🔚 まとめ(エンジニア視点)
- 本質:GAS ↔ API ↔ 外部システム
- できること:
- 外部データ取得
- 他システムへのデータ送信







0 件のコメント:
コメントを投稿