【GAS初心者講座#7】GAS初学者向け:HTTP通信・API入門 - 外部サービスとデータをやり取りする技術
こんにちは!ノンプロ研でGASコースのTAをしているTaroです。
今回は、GAS(Google Apps Script)で「HTTP通信・API」を学びます。外部サービスと連携する技術を習得します!この記事は、ノンプロ研初心者講座【GASコース】第7回の内容をもとに作成しています。
この記事で学べること
HTTP通信:インターネットを経由してデータをやり取りする仕組み
UrlFetchApp:HTTP通信を行うGASのサービス
JSON:データを交換するための形式
API:外部サービスをプログラムから操作する仕組み
郵便番号API:実践的な外部サービスとの連携
なぜこの回が重要なのか?
これまでの6回で学んだこと:
変数、制御構文、関数、配列、オブジェクト(第1-4回)
スプレッドシート操作(第5-6回)
でも、これだけではスプレッドシート内のデータしか扱えません。
今回学ぶHTTP通信とAPIで、できることが爆発的に広がります:
❌ これまで:スプレッドシート内のデータだけ
✅ 今回から:インターネット上のあらゆるサービスと連携
具体例:
郵便番号を入力すると、自動で住所を取得
天気情報を毎朝自動取得してスプレッドシートに記録
SlackやChatworkに自動通知
外部データベースと連携
各種Webサービスのデータを取得・加工
実務での切実なニーズ: 「顧客リストに郵便番号だけ入力されている...住所を1件ずつ調べて入力するのは大変...自動化できないかな?」
→ この問題を解決するのが、今回学ぶ郵便番号APIです。
今日のゴール
3つの目標を達成しましょう:
目標1:HTTP通信の基本を理解する
リクエストとレスポンスの仕組み
UrlFetchApp.fetch()の使い方
ステータスコードとエラーハンドリング
目標2:JSONを扱えるようになる
JSONとは何か理解する
JSON.parse()でJSONをオブジェクトに変換
JSON.stringify()でオブジェクトをJSONに変換
目標3:実践的なAPIを使う
郵便番号APIを使って住所を取得
スプレッドシートに連携
カスタム関数を作成
この3つができれば、GASで「外の世界」とつながります。
あなたのGASスキルは、次のステージに進みます。
アジェンダ
HTTP通信とUrl Fetchサービス - Webの仕組みを理解する
POSTリクエストとJSON - データを送信・受信する
API - 外部サービスを活用する
第1部:HTTP通信とUrl Fetchサービス
このセクションでできるようになること
HTTP通信の仕組み(リクエストとレスポンス)を理解する
UrlFetchApp.fetch()でWebページを取得する
GETリクエストとPOSTリクエストの違いを理解する
ステータスコード(200, 404, 500など)を読み取る
try...catch文でエラーを適切に処理する
実務での例: 「Webサイトが正常に動いているか定期的にチェックして、エラーが出たら通知する」 → これがHTTP通信とエラーハンドリングで実現できます。
HTTP通信とは?
HTTP通信とは、インターネットを経由して通信をする様式です。
HTTP = Hyper Text Transfer Protocol
「ハイパーテキストを転送するルール」という意味です。
身近な例:
Webサイトを見る
検索する
ネットショッピングをする
YouTubeを見る
TwitterやLINEを使う
これらすべてがHTTP通信で行われています。
なぜGASでHTTP通信を学ぶのか?
実は、あなたが毎日使っているWebサービスは、すべてHTTP通信で動いています。
GASでHTTP通信ができるようになると:
郵便番号APIを使って住所を自動取得
天気APIを使って天気情報を取得
Slack APIを使って自動通知
各種Webサービスのデータを取得・加工
つまり、インターネット上のあらゆるサービスとGASが連携できるようになります。
これまではスプレッドシート内で完結していましたが、今回から「外の世界」とつながります。
HTTP通信の仕組み
HTTP通信は、「お願い(リクエスト)」と「返事(レスポンス)」の往復です。
基本的な流れ:
あなた(ブラウザ) Webサーバー
│ │
│ リクエスト → │
│ 「このページを見せて」 │
│ │
│ ← レスポンス │
│ 「はい、どうぞ」 │
│ │
レストランに例えると:
あなた ウェイター 厨房
│ │ │
│「ラーメンください」│ │
│ ────────→ │ │
│ (リクエスト) │「ラーメン1つ」 │
│ │ ────────→ │
│ │ (注文) │
│ │ │
│ │ ←──────── │
│ │ (料理) │
│ ←──────── │ │
│ (レスポンス) │ │
│ 「お待たせしました」│ │
Webサイトを見る場合:
あなた(ブラウザ):「https://tonari-it.com のページを見せてください」(リクエスト)
サーバー:「はい、こちらがページのデータ(HTML)です」(レスポンス)
ブラウザ:受け取ったHTMLを画面に表示
GASでも同じことができます:
// GASから「このページを見せて」とリクエスト
const response = UrlFetchApp.fetch('https://tonari-it.com');
// サーバーから返ってきたデータ(レスポンス)を取得
const html = response.getContentText();
console.log(html); // HTMLが表示される
重要なポイント:
HTTP通信は必ず「リクエスト」→「レスポンス」の順番
リクエストなしにレスポンスは来ない
GASは「リクエストを送る側」になれる
GASでHTTP通信を行う
GASでは、UrlFetchAppというサービスを使ってHTTP通信を行います。
UrlFetchAppサービスとは、HTTPリクエスト&レスポンスを提供するサービスです。
HTTPリクエストを行う
基本構文:
UrlFetchApp.fetch(url, params)
引数:
url:アクセスしたいURL(文字列)
params:オプション設定(オブジェクト)※省略可
戻り値:
HTTPResponseオブジェクト
リクエストの種類(HTTPメソッド)
HTTP通信には、主に2つの「メソッド」があります。
1. GETリクエスト
用途:
Webページのデータを要求するとき
例:
ブラウザでWebページを閲覧する
検索結果を表示する
APIからデータを取得する
イメージ:
あなた:「このページを見せてください」
サーバー:「はい、どうぞ」
2. POSTリクエスト
用途:
情報をWebサーバーに送信するとき
例:
フォームで情報を送信する
ログインする
データを登録する
イメージ:
あなた:「このデータを受け取ってください」
サーバー:「受け取りました」
初学者の方へ:
最初はGETリクエスト(データを取得)から理解しましょう。POSTリクエスト(データを送信)は、後半で学びます。
HTTPResponseオブジェクト
HTTPResponseとは、HTTPレスポンスを表すオブジェクトです。
主なメソッド:
メソッド 説明 戻り値 getHeaders() ヘッダー情報を取得 オブジェクト getResponseCode() ステータスコードを取得 数値 getContentText() レスポンスの本文を取得 文字列
実際に試してみよう(演習7-01)
function myFunction7_01() {
const url = 'https://tonari-it.com';
const response = UrlFetchApp.fetch(url);
console.log(response.getHeaders());
console.log(response.getResponseCode());
console.log(response.getContentText().slice(0, 300));
}
処理の流れ:
UrlFetchApp.fetch(url)でリクエストを送信
responseにHTTPResponseオブジェクトが返される
各メソッドで情報を取得してログ出力
ポイント:
slice(0, 300):最初の300文字だけ取り出す(全部表示すると長すぎるため)
getContentText():HTMLのソースコードが返される
実行すると:
ヘッダー情報(サーバーの情報など)
ステータスコード:200(成功)
HTML本文の最初の300文字
が表示されます。
ステータスコード
ステータスコードとは、リクエストの結果を表す3桁の数値です。
主なステータスコード:
コード 意味 説明 200 OK 成功 301 Moved Permanently ページが移動した 400 Bad Request リクエストが不正 404 Not Found ページが見つからない 500 Internal Server Error サーバーエラー
覚え方:
200番台:成功
300番台:リダイレクト
400番台:クライアント(あなた)のエラー
500番台:サーバーのエラー
エラーが発生する場合(演習7-02)
function myFunction7_02() {
const url = 'https://tonari-it.com/not-exists'; // 存在しないページ
const response = UrlFetchApp.fetch(url);
console.log(response.getResponseCode());
console.log(response.getContentText().slice(0, 300));
}
実行すると:
エラーが発生してスクリプトが止まります。
なぜ?
存在しないページにアクセスしたため、404エラーが発生します。
問題点:
エラーが発生すると、プログラムがそこで止まってしまう。これでは困ります。
解決策:
エラーを「キャッチ」して、適切に処理する必要があります。
try...catch文:エラーをキャッチする
try...catch文とは、例外(エラー)をキャッチして処理を行う構文です。これを「例外処理」といいます。
構文:
try {
// エラーが発生するかもしれない処理
} catch (e) {
// エラーが発生したときに実行する処理
}
動き:
tryブロックの処理を実行
エラーが発生したら、catchブロックに移動
eにErrorオブジェクトが格納される
エラーが発生しなかったら、catchブロックはスキップ
Errorオブジェクト
Errorオブジェクトとは、例外を表すJavaScriptの組み込みオブジェクトです。
主なプロパティ:
name:エラーの種類(例:Exception)
message:エラーメッセージ(例:Request failed for https://... returned code 404.)
実際に試してみよう(演習7-03)
function myFunction7_03() {
const url = 'https://tonari-it.com/not-exists';
try {
const response = UrlFetchApp.fetch(url);
console.log(response.getContentText().slice(0, 300));
} catch (e) {
console.log('例外が発生しました: ' + e.name);
console.log(e.message);
}
}
実行すると:
例外が発生しました: Exception
Request failed for https://tonari-it.com/not-exists returned code 404.
ポイント:
エラーが発生しても、スクリプトは止まらない
catchブロックで、エラー情報をログ出力できる
エラーメッセージから、何が問題かわかる
演習7-04:エラーをスプレッドシートに記録
演習7-03について、例外を検知したら、スプレッドシートに以下を記入するスクリプトを作成しましょう。
A1セル:「例外が発生しました: 」 + エラー名
A2セル:エラーメッセージ
解答例:
function myFunction7_04() {
const url = 'https://tonari-it.com/not-exists';
const sheet = SpreadsheetApp.getActiveSheet();
try {
const response = UrlFetchApp.fetch(url);
console.log(response.getContentText().slice(0, 300));
} catch (e) {
sheet.getRange('A1').setValue('例外が発生しました: ' + e.name);
sheet.getRange('A2').setValue(e.message);
}
}
実務での使い方:
APIアクセスが失敗したときに、エラーログを記録
定期実行で失敗したときに、通知を送る
エラーの原因を後で確認できるようにする
第1部のまとめ:HTTP通信の基本
学んだこと
1. HTTP通信とは
インターネットを経由した通信の仕組み
リクエスト(お願い)とレスポンス(返事)の往復
すべてのWebサービスがこれで動いている
2. UrlFetchApp.fetch()
const response = UrlFetchApp.fetch(url);
GASでHTTP通信を行う基本メソッド
URLを指定すると、そのページのデータを取得できる
3. HTTPメソッド
GET:データを取得(「見せて」)
POST:データを送信(「受け取って」)
4. HTTPResponseオブジェクト
response.getContentText() // 本文を取得
response.getResponseCode() // ステータスコードを取得
response.getHeaders() // ヘッダーを取得
5. ステータスコード
200:成功
404:ページが見つからない
500:サーバーエラー
6. エラーハンドリング
try {
// HTTP通信
} catch (e) {
// エラー処理
}
重要なポイント
外部サービスは不安定
ネットワークエラーが起きる
サーバーがダウンすることもある
だからtry...catchは必須
実務での鉄則
HTTP通信を使うときは、必ずtry...catchでエラー処理
ステータスコードを確認する
エラーログを記録する
次は、POSTリクエストとJSONを学びます。データを「送信」して「受信」する方法です。
第2部:POSTリクエストとJSON
このセクションでできるようになること
POSTリクエストでデータを送信する
JSONとは何かを理解する
JSON.stringify()でオブジェクトを文字列に変換
JSON.parse()で文字列をオブジェクトに変換
APIから返ってきたJSONデータを扱う
実務での例: 「外部APIにデータを送信して、結果をスプレッドシートに記録する」 → これがPOSTリクエストとJSONで実現できます。
なぜJSONが重要?
ほとんどのWeb APIは、データのやり取りにJSONを使います。
天気API → JSONで天気情報を返す
郵便番号API → JSONで住所情報を返す
Slack API → JSONでメッセージを送受信
JSONを理解しないと、APIを使えません。今回しっかり習得しましょう。
POSTリクエスト
GETリクエストは「データをください」でしたが、POSTリクエストは「このデータを受け取ってください」です。
イメージ:
あなた → サーバー
「名前:Bob、電話:090-0000、コメント:よろしく!」
サーバー → あなた
「受け取りました!」
実際の例:
お問い合わせフォーム
会員登録
ログイン
POSTリクエストの書き方
構文:
const params = {
method: 'post',
payload: data // 送信するデータ(オブジェクト)
};
UrlFetchApp.fetch(url, params);
ポイント:
method: 'post'でPOSTリクエストを指定
payloadに送信したいデータをオブジェクトで指定
httpbin.orgで練習する
httpbin.orgとは、HTTP通信のテストができるサービスです。
今回は、以下のURLを使います:
https://httpbin.org/post
このURLにPOSTリクエストを送ると、送ったデータをそのまま返してくれます。練習に最適です。
実際に試してみよう(演習7-05)
function myFunction7_05() {
const url = 'https://httpbin.org/post';
const params = {
method: 'post',
payload: {
custname: 'Bob',
custtel: '0900000',
comments: 'よろしく!'
}
};
const response = UrlFetchApp.fetch(url, params);
console.log(response.getContentText());
}
処理の流れ:
payloadにデータを設定
method: 'post'でPOSTリクエストを指定
UrlFetchApp.fetch()でリクエスト送信
レスポンスを受け取ってログ出力
実行すると:
たくさんの情報が返ってきます。その中に、送ったデータが含まれています。
JSON形式
レスポンスを見ると、こんな形式のデータが返ってきます:
{
"form": {
"comments": "\u3088\u308d\u3057\u304f\uff01",
"custname": "Bob",
"custtel": "0900000"
},
...
}
気づきましたか?
日本語が\uXXXXという形式になっている(Unicode文字)
オブジェクトのような形式
これがJSON形式です。
JSONとは
JSON = JavaScript Object Notation
「JavaScriptのオブジェクト記法」という意味です。
JSONの特徴:
データを交換するための形式
JavaScriptのオブジェクトに似ている
でも、文字列です!(これが最重要)
重要な理解:
// JavaScriptのオブジェクト(データ型:オブジェクト)
const obj = {name: 'Bob', age: 25};
console.log(typeof obj); // "object"
// JSON(データ型:文字列)
const json = '{"name":"Bob","age":25}';
console.log(typeof json); // "string"
見た目は似ていますが、JSONは文字列です。
なぜ文字列なのか?
データをやり取りするとき、文字列にしないと送れないからです。
HTTP通信でデータを送るとき → 文字列にする必要がある
ファイルに保存するとき → 文字列にする必要がある
なぜJSONを使う?
異なるプログラム言語間でデータを交換できる
Webサービス間でデータをやり取りする標準的な形式
ほぼすべてのWeb APIがJSONを使っている
実務でのJSON:
GAS → APIにリクエスト → APIからJSONで返ってくる → JSONを解析 → データ活用
JSONを理解しないと、APIから返ってきたデータを使えません。
JSONオブジェクト
JSONオブジェクトとは、JSONを操作する機能を提供するJavaScriptの組み込みオブジェクトです。
主なメソッド:
メソッド 説明 例 JSON.stringify(value) オブジェクト→JSON文字列 JSON.stringify({name: 'Bob'}) JSON.parse(text) JSON文字列→オブジェクト JSON.parse('{"name":"Bob"}')
覚え方:
stringify:オブジェクトを「文字列化」する
parse:文字列を「解析」してオブジェクトにする
実際に試してみよう(演習7-06)
function myFunction7_06() {
// オブジェクト → JSON文字列
const value = {name: 'Bob', age: 32};
const text = JSON.stringify(value);
console.log(`${text}: [${typeof text}]`);
// JSON文字列 → オブジェクト
const obj = JSON.parse(text);
console.log(`${obj}: [${typeof obj}]`);
}
実行結果:
{"name":"Bob","age":32}: [string]
[object Object]: [object]
ポイント:
JSON.stringify()で、オブジェクトが文字列になる
JSON.parse()で、文字列がオブジェクトに戻る
typeofで型を確認できる
POSTリクエストのレスポンスを処理する
JSONを理解したので、POSTリクエストのレスポンスを正しく処理できます。
実際に試してみよう(演習7-07):
function myFunction7_07() {
const url = 'https://httpbin.org/post';
const params = {
method: 'post',
payload: {
custname: 'Bob',
custtel: '090-0000',
comments: 'よろしく!'
}
};
const response = UrlFetchApp.fetch(url, params);
const text = response.getContentText(); // JSON文字列を取得
const obj = JSON.parse(text); // オブジェクトに変換
const formData = obj.form; // formプロパティを取得
console.log(formData.custname); // Bob
console.log(formData.custtel); // 090-0000
console.log(formData.comments); // よろしく!
}
処理の流れ:
POSTリクエストを送信
レスポンスをJSON文字列として取得
JSON.parse()でオブジェクトに変換
オブジェクトのプロパティにアクセス
これが重要:
API連携では、この流れが基本パターンです。
演習7-08:データをスプレッドシートに書き込む
演習7-07のPOSTリクエストのレスポンスで取得したJSONのcustname、custtel、commentsのプロパティと値の組をスプレッドシートのB1:C3セルに入力するスクリプトを作成しましょう。
解答例:
function myFunction7_08() {
const url = 'https://httpbin.org/post';
const params = {
method: 'post',
payload: {
custname: 'Bob',
custtel: '090-0000',
comments: 'よろしく!'
}
};
const response = UrlFetchApp.fetch(url, params);
const obj = JSON.parse(response.getContentText());
const formData = obj.form;
// データを二次元配列で作成
const data = [
['custname', formData.custname],
['custtel', formData.custtel],
['comments', formData.comments]
];
// スプレッドシートに書き込み
const sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange('B1:C3').setValues(data);
}
ポイント:
プロパティ名と値を二次元配列に格納
setValues()で一度に書き込み
第2部のまとめ:POSTとJSON
学んだこと
1. POSTリクエスト
const params = {
method: 'post',
payload: {データ}
};
UrlFetchApp.fetch(url, params);
GETは「見せて」、POSTは「受け取って」
データを送信するときに使う
2. JSON(最重要)
// オブジェクト → JSON文字列
const json = JSON.stringify({name: 'Bob'});
// JSON文字列 → オブジェクト
const obj = JSON.parse('{"name":"Bob"}');
JSONは文字列(オブジェクトではない)
データ交換の標準形式
ほぼすべてのAPIがJSONを使う
3. JSON.stringify()
オブジェクトを文字列化
APIにデータを送るときに使う
4. JSON.parse()
文字列をオブジェクトに変換
APIから返ってきたJSONを使うときに必須
重要なポイント
JSONは「文字列」
見た目はオブジェクトに似ている
でも実際は文字列
だからJSON.parse()が必要
実務でのパターン
// 1. APIにリクエスト
const response = UrlFetchApp.fetch(url);
// 2. JSON文字列を取得
const jsonText = response.getContentText();
// 3. JSONをオブジェクトに変換(これ必須!)
const data = JSON.parse(jsonText);
// 4. データを使う
console.log(data.name);
次は、実践的なAPIを使います。郵便番号から住所を取得する、実務で使えるテクニックです。
第3部:API - 外部サービスを活用する
このセクションでできるようになること
APIとは何かを理解する
郵便番号APIを使って住所を自動取得
JSONレスポンスからデータを抽出
スプレッドシートのカスタム関数を作成
実務で使える自動化ツールを作る
実務での例: 「顧客リストに郵便番号だけある。住所を1件ずつ調べて入力するのは大変...」 → 郵便番号APIで一瞬で解決できます!
今回の目標:
スプレッドシートに「=ZIPCODE("1000001")」と入力すると、自動で「東京都千代田区千代田」と表示される機能を作ります。
これができれば、実務で即戦力です。
APIとは
API = Application Programming Interface
「アプリケーションをプログラムで操作する仕組み」です。
身近な例:
天気予報API:天気情報を取得
郵便番号API:郵便番号から住所を取得
翻訳API:テキストを翻訳
Slack API:メッセージを投稿
APIの便利さ:
手作業でやっていたことを自動化
大量のデータを一瞬で処理
複数のサービスを連携
Web APIとは
Web APIとは、Webの仕組み(HTTP通信)を使ったAPIです。
イメージ:
あなた → API
「郵便番号 783-0060 の住所を教えて」
API → あなた
「高知県南国市蛍が丘です」
特徴:
各サービスで決められたURL(リクエストURL)にアクセス
データをJSON形式で受け取る
HTTPリクエストで操作する
APIが用意されているサービス
無料で使えるAPI(例):
郵便番号検索API
天気予報API
為替レートAPI
祝日API
有料APIや認証が必要なAPI(例):
Google Maps API
Slack API
ChatGPT API
LINE API
今日は、無料で使える「郵便番号検索API」を使います。
郵便番号検索API
提供元:
zipcloud (http://zipcloud.ibsnet.co.jp/doc/api)
機能:
郵便番号を送ると、住所を返してくれる
リクエストURL:
https://zipcloud.ibsnet.co.jp/api/search?zipcode={zipcode}
例:東京都千代田区(郵便番号:100-0000)
https://zipcloud.ibsnet.co.jp/api/search?zipcode=1000000
注意点:
ハイフン(-)は入れない
7桁の数字のみ
実際に試してみよう(演習7-09)
function myFunction7_09() {
const url = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060';
const response = UrlFetchApp.fetch(url);
const text = response.getContentText();
const obj = JSON.parse(text);
console.log(obj);
}
実行結果(一部):
{
status: 200,
message: null,
results: [
{
zipcode: '7830060',
prefcode: '39',
address1: '高知県',
address2: '南国市',
address3: '蛍が丘',
...
}
]
}
JSONの構造:
status:ステータスコード(200=成功)
message:エラーメッセージ(成功時はnull)
results:結果の配列
address1:都道府県名
address2:市区町村名
address3:町域名
APIのJSON定義を理解する
郵便番号APIのレスポンスから、必要なデータを取り出すには:
const obj = JSON.parse(response.getContentText());
// ステータスコード
obj.status
// メッセージ
obj.message
// 都道府県名
obj.results[0].address1
// 市区町村名
obj.results[0].address2
// 町域名
obj.results[0].address3
なぜresults[0]?
resultsは配列
通常は1件の結果なので、最初の要素(インデックス0)を取得
実際に試してみよう(演習7-10)
function myFunction7_10() {
const url = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060';
const response = UrlFetchApp.fetch(url);
const obj = JSON.parse(response.getContentText());
console.log(`ステータスコード: ${obj.status}`);
const result = obj.results[0];
console.log(`都道府県名: ${result.address1}`);
console.log(`市区町村名: ${result.address2}`);
console.log(`町域名: ${result.address3}`);
}
実行結果:
ステータスコード: 200
都道府県名: 高知県
市区町村名: 南国市
町域名: 蛍が丘
ポイント:
obj.results[0]で最初の結果を取得
それをresultという変数に格納
各プロパティにアクセスして住所を取得
演習7-11:スプレッドシート関数を作る
引数に郵便番号7桁を指定すると、都道府県名+市区町村名+町域名を返すスプレッドシート関数ZIPCODEを作成してみましょう。
解答例:
function ZIPCODE(zipcode) {
// ハイフンを削除して7桁にする
const zip = String(zipcode).replace(/-/g, '');
const url = `https://zipcloud.ibsnet.co.jp/api/search?zipcode=${zip}`;
try {
const response = UrlFetchApp.fetch(url);
const obj = JSON.parse(response.getContentText());
if (obj.status === 200 && obj.results) {
const result = obj.results[0];
return `${result.address1}${result.address2}${result.address3}`;
} else {
return 'エラー: 郵便番号が見つかりません';
}
} catch (e) {
return 'エラー: ' + e.message;
}
}
使い方(スプレッドシート):
A1セル: 783-0060
B1セル: =ZIPCODE(A1)
結果: 高知県南国市蛍が丘
ポイント:
String(zipcode).replace(/-/g, '')でハイフンを削除
テンプレート文字列でURLを動的に生成
try...catchでエラーハンドリング
ステータスコードを確認してからデータを取得
これが実務での使い方です!
スプレッドシートのセルに郵便番号を入力するだけで、自動で住所が表示されます。
アクセスキー・トークン
多くのAPIは、アクセスキーやトークンが必要です。
アクセスキー・トークンとは、APIを使用する際の「許可証」です。
なぜ必要?
誰が使っているか識別するため
使用量を制限するため
有料プランを管理するため
セキュリティを守るため
例:
const apiKey = 'YOUR_API_KEY';
const url = `https://api.example.com/data?key=${apiKey}`;
注意点:
APIキーは秘密情報
コードに直接書かない(スクリプトプロパティに保存)
GitHubなどに公開しない
郵便番号APIは:
アクセスキーが不要なので、初心者でも簡単に使えます。
まとめ:今日学んだこと
第1部:HTTP通信とUrl Fetchサービス
HTTP通信は「リクエスト」と「レスポンス」
UrlFetchApp.fetch(url)でリクエスト送信
HTTPResponseオブジェクトでレスポンスを受け取る
try...catchでエラーハンドリング
ステータスコードでリクエストの結果を確認
第2部:POSTリクエストとJSON
POSTリクエストでデータを送信
method: 'post'とpayloadを指定
JSONはデータ交換の標準形式
JSON.stringify():オブジェクト → JSON文字列
JSON.parse():JSON文字列 → オブジェクト
第3部:API
APIは外部サービスをプログラムで操作する仕組み
Web APIはHTTP通信を使う
リクエストURL + パラメータでデータを取得
レスポンスをJSON形式で受け取る
スプレッドシート関数として活用できる
発展:実務での活用例
今日学んだ知識を使うと、こんなことができます:
例1:Slackに自動通知
function sendSlackNotification(message) {
const webhookUrl = 'YOUR_SLACK_WEBHOOK_URL';
const payload = {
text: message
};
const params = {
method: 'post',
contentType: 'application/json',
payload: JSON.stringify(payload)
};
UrlFetchApp.fetch(webhookUrl, params);
}
// 使い方
sendSlackNotification('処理が完了しました!');
例2:天気情報を取得してスプレッドシートに記録
function getWeather() {
const apiKey = 'YOUR_API_KEY';
const city = 'Tokyo';
const url = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${apiKey}&units=metric&lang=ja`;
try {
const response = UrlFetchApp.fetch(url);
const data = JSON.parse(response.getContentText());
const sheet = SpreadsheetApp.getActiveSheet();
const row = [
new Date(),
data.name,
data.weather[0].description,
data.main.temp,
data.main.humidity
];
sheet.appendRow(row);
} catch (e) {
console.log('エラー: ' + e.message);
}
}
例3:複数の郵便番号を一括変換
function convertZipCodes() {
const sheet = SpreadsheetApp.getActiveSheet();
const zipCodes = sheet.getRange('A2:A10').getValues(); // A2:A10に郵便番号
const addresses = [];
for (const row of zipCodes) {
const zipcode = String(row[0]).replace(/-/g, '');
const url = `https://zipcloud.ibsnet.co.jp/api/search?zipcode=${zipcode}`;
try {
const response = UrlFetchApp.fetch(url);
const obj = JSON.parse(response.getContentText());
if (obj.status === 200 && obj.results) {
const result = obj.results[0];
addresses.push([`${result.address1}${result.address2}${result.address3}`]);
} else {
addresses.push(['エラー']);
}
Utilities.sleep(100); // APIへの連続アクセスを避ける
} catch (e) {
addresses.push(['エラー: ' + e.message]);
}
}
sheet.getRange(2, 2, addresses.length, 1).setValues(addresses); // B2以降に書き込み
}
ポイント:
Utilities.sleep(100):100ミリ秒待機(APIへの連続アクセスを避ける)
エラーハンドリングで、一部が失敗しても処理を続行
学習のコツ
1. APIドキュメントを読む習慣
各APIには「ドキュメント」があります。リクエストURL、パラメータ、レスポンスの形式が書かれています。最初は難しく感じますが、慣れれば読めるようになります。
2. JSONの構造を理解する
console.log(obj)でオブジェクト全体を表示して、構造を確認しましょう。ドット記法でどうアクセスするか、少しずつ理解できます。
3. 小さく試す
いきなり複雑なAPIを使わず、まずは郵便番号APIのような簡単なものから。成功体験を積み重ねましょう。
4. エラーハンドリングを忘れない
APIは外部サービスなので、いつ失敗するかわかりません。必ずtry...catchを使いましょう。
5. レート制限に注意
多くのAPIには「1日○○回まで」という制限があります。ループで大量にアクセスすると、制限に引っかかることがあります。
全体のまとめ:HTTP通信・API入門
今日学んだこと
第1部:HTTP通信
リクエストとレスポンスの仕組み
UrlFetchApp.fetch()の使い方
GETとPOSTの違い
ステータスコード(200, 404, 500)
try...catchでエラーハンドリング
第2部:JSON
JSONは「文字列」(オブジェクトではない)
JSON.stringify():オブジェクト → 文字列
JSON.parse():文字列 → オブジェクト
APIとのデータ交換に必須
第3部:API
外部サービスをプログラムで操作
郵便番号APIで実践
カスタム関数の作成
一括処理の実装
できるようになったこと
✅ 外部Webサイトからデータを取得
✅ APIを使って外部サービスと連携
✅ JSONデータを解析して活用
✅ スプレッドシートにカスタム関数を追加
✅ 実務で使える自動化ツールを作成
実務での活用
今日学んだスキルで、こんなことができます:
郵便番号から住所を自動入力
顧客リストの作成が楽に
入力ミスを防ぐ
天気情報の自動取得
毎朝の天気をスプレッドシートに記録
トリガーで自動実行
Slack/ChatWorkへの自動通知
スプレッドシートの更新を通知
エラー発生時のアラート
外部データベースとの連携
在庫情報の取得
価格情報の更新
重要なポイント
1. エラーハンドリングは必須
try {
const response = UrlFetchApp.fetch(url);
// 処理
} catch (e) {
console.log('エラー: ' + e.message);
}
2. JSONは必ず解析する
const obj = JSON.parse(response.getContentText());
3. APIドキュメントを読む
リクエストURL
パラメータ
レスポンスの形式
4. レート制限に注意
連続アクセスは避ける
Utilities.sleep()で待機
学習のコツ
APIドキュメントを読む習慣
最初は難しいですが、慣れれば読めるようになりますJSONの構造を理解する
console.log()で確認しながら進める小さく試す
簡単なAPIから始めて、成功体験を積むエラーハンドリングを忘れない
外部サービスはいつ失敗するかわからないレート制限に注意
大量アクセスは制限に引っかかる
次のステップ
今回の内容を復習したら:
他のAPIも試してみる(天気API、為替APIなど)
自分の業務で使えるAPIを探す
複数のAPIを組み合わせる
GASの可能性は無限大です!
HTTP通信とAPIを習得したあなたは、もう初心者ではありません。実務で使える強力なツールを作れるようになりました。
ハッシュタグ:#ノンプロ研 #GAS初心者講座
最後に
HTTP通信・API、お疲れさまでした!
今日は「GASの可能性が広がる」回でした:
スプレッドシートの中だけでなく、外の世界とつながる
天気、郵便番号、翻訳、通知...様々なサービスと連携できる
手作業でやっていたことを、一瞬で自動化できる
最初は難しく感じるかもしれません:
「HTTP通信って何?」
「JSONって文字列なの?オブジェクトなの?」
「APIのドキュメント、読めない...」
でも大丈夫。これは誰もが通る道です。
実際に手を動かしてみてください:
郵便番号APIを使ってみる
自分でスプレッドシート関数を作ってみる
他のAPIも試してみる
これを繰り返すうちに、自然と「API連携」の感覚が身につきます。
あなたはもう「API連携」ができる人です:
HTTP通信の基本、JSONの扱い、エラーハンドリング。この基本ができれば、あとは応用するだけです。
