【Googleスプレッドシート】UrlFetchAppで外部APIを呼ぶ!HTTPリクエストの基本

【Googleスプレッドシート】UrlFetchAppで外部APIを呼ぶ!HTTPリクエストの基本
🛡️ 超解決

Googleスプレッドシートで外部のAPIからデータを取得したいと思ったことはありませんか。天気情報や株価、SNSのデータなどをスプレッドシートに取り込めると、業務の自動化が一気に進みます。この記事では、Apps ScriptのUrlFetchAppを使ってHTTPリクエストを送信し、外部APIと通信する基本手順を解説します。実際のコード例とともに、データの取得方法やエラーハンドリングまで丁寧に説明しますので、初心者の方でも安心して進められます。

【要点】UrlFetchAppを使えば、スプレッドシートから直接外部APIを呼び出せる

  • UrlFetchApp.fetch(url, params): 指定したURLにHTTPリクエストを送信し、レスポンスを取得します。
  • GETリクエストの実装: パラメータ付きのURLを組み立てて、APIからデータを取得します。
  • JSONのパース: レスポンスをJSON.parse()で変換し、シートに書き出します。
  • POSTリクエストの実装: method:’post’とpayloadを指定して、データを送信します。
  • エラーハンドリング: ステータスコードや例外をキャッチして、安定した処理を実現します。

ADVERTISEMENT

UrlFetchAppの概要とHTTPリクエストの仕組み

UrlFetchAppは、Google Apps Scriptに組み込まれたサービスで、外部のURLに対してHTTPリクエストを送信できます。これにより、スプレッドシート上からREST APIを呼び出し、データの取得や送信が可能になります。HTTPリクエストには主にGETとPOSTという2つのメソッドがあります。GETはデータを取得する際に使い、POSTはデータを送信する際に使います。UrlFetchApp.fetch()関数の第1引数にURLを渡し、第2引数にオプションとしてメソッドやヘッダー、ペイロードを指定します。返り値はHTTPResponseオブジェクトで、getContentText()などで本文を取得します。

UrlFetchAppでGETリクエストを実行する手順

まずは基本的なGETリクエストの手順を、実際のコードを交えて解説します。例として、公開APIのJSONPlaceholderからユーザー情報を取得します。

  1. Apps Scriptエディタを開く
    スプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。新しいスクリプトファイルが作成されます。
  2. コードを記述する
    以下のコードをエディタに貼り付けます。
    function fetchUsers() {
    var url = 'https://jsonplaceholder.typicode.com/users';
    var response = UrlFetchApp.fetch(url);
    var data = JSON.parse(response.getContentText());
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.clear();
    data.forEach(function(user, i) {
    sheet.getRange(i+1, 1).setValue(user.name);
    sheet.getRange(i+1, 2).setValue(user.email);
    });
    }
  3. 実行する
    関数を選択して実行ボタンを押します。初回は権限の確認画面が表示されるので、承認してください。シートにユーザー名とメールアドレスが書き込まれます。

このように、UrlFetchApp.fetch()でレスポンスを取得し、JSON.parse()でオブジェクトに変換してからシートに書き出すのが基本パターンです。

POSTリクエストでデータを送信する方法

次に、POSTリクエストを使って外部APIにデータを送信する方法を説明します。例として、JSONPlaceholderの/postsエンドポイントに新しい記事を投稿します。

  1. POSTリクエストのコード
    以下の関数を追加します。
    function createPost() {
    var url = 'https://jsonplaceholder.typicode.com/posts';
    var payload = {
    title: 'foo',
    body: 'bar',
    userId: 1
    };
    var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
    };
    var response = UrlFetchApp.fetch(url, options);
    var result = JSON.parse(response.getContentText());
    Logger.log(result);
    }
  2. オプションの指定
    methodに’post’、contentTypeに’application/json’、payloadにJSON文字列を指定します。重要なので必ずJSON.stringify()で変換してください。
  3. 実行と確認
    関数を実行後、ログに作成されたオブジェクトのIDなどが表示されます。スプレッドシートに書き込む場合は、同様にrangeにsetValueしてください。

ADVERTISEMENT

UrlFetchApp使用時の注意点とよくあるトラブル

認証が必要なAPIを呼び出す場合

APIキーやアクセストークンが必要なAPIでは、ヘッダーに付与します。optionsにheadersオブジェクトを追加します。
headers: { 'Authorization': 'Bearer YOUR_TOKEN' }
キーをコードに直接書くと漏洩リスクがあるので、スクリプトプロパティやスプレッドシートのセルに保存し、取得する方法をおすすめします。

タイムアウトとレート制限

UrlFetchApp.fetch()のデフォルトタイムアウトは30秒です。大規模データの処理にはmuteHttpExceptionsオプションやfollowRedirectsの調整が必要な場合があります。また、多くの無料APIには1分あたりのリクエスト数制限があるので、ループ内で呼び出す場合はUtilities.sleep()などで間隔を空けてください。

エラーハンドリングの実装

ネットワークエラーやAPIエラーに対応するため、try…catch構文を使います。以下のようにレスポンスコードも確認します。
try {
var response = UrlFetchApp.fetch(url);
var code = response.getResponseCode();
if (code !== 200) throw new Error('HTTP error ' + code);
} catch(e) {
Logger.log(e.message);
}

GETとPOSTの違い比較表

項目 GET POST
目的 データの取得 データの送信や作成
パラメータの指定 URLのクエリ文字列 ペイロード(リクエストボディ)
オプションの例 method:’get'(省略可)、muteHttpExceptions:true method:’post’、contentType:’application/json’、payload:JSON.stringify(data)
データの制限 URL長に制限あり(通常2048文字程度) ペイロードのサイズは比較的大きく可能
キャッシュ ブラウザ等でキャッシュされる可能性あり 基本的にキャッシュされない

まとめ

この記事では、GoogleスプレッドシートのApps Scriptが持つUrlFetchAppを使って外部APIと連携する基本を解説しました。GETリクエストでデータを取得し、POSTリクエストでデータを送信する手順を実装しました。また、認証やエラーハンドリングなどの注意点も押さえました。次は、実際に天気APIや株価APIを呼び出して、定期的にデータを自動更新する仕組みを作ってみましょう。UrlFetchAppをマスターすれば、スプレッドシートが強力なデータ連携ツールに変わります。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。