【GAS】APIを使って業務を自動化!基本の連携方法を徹底解説

基本解説

「Google Apps Script(GAS)をコピーして使ったことはあるけれど、もっと活用してみたい」
「スプレッドシートのデータを、外部のサービスと連携できないだろうか?」

そんな風に感じていませんか?

GASの大きな魅力の一つに、API(Application Programming Interface)を利用した外部サービスとの連携があります。API連携を使いこなせば、これまで手作業で行っていた情報収集やデータ入力を自動化し、業務を劇的に効率化できます。

この記事では、APIの基本的な概念から、GASを使ってAPIに接続する基本、返ってくる値の扱い方、そして実践で欠かせない注意点を解説します。

閲覧の前に

この記事は、GASの基本的な操作をご存知の方を対象としています。もしGASを一度も使ったことがない場合は、まずはGASの基本操作からお読みいただくことをお勧めします。

そもそもAPIとは?

API連携の解説に入る前に、「APIとは何か」を簡単にご説明します。

APIを身近なものに例えるなら、「レストランのウェイター」のような存在です。

私たちがレストランで料理を注文するとき、厨房に直接入ってシェフに伝えることはしませんよね。ウェイターに「この料理が欲しい」と注文を伝え、ウェイターが厨房に注文を届け、出来上がった料理を席まで運んできてくれます。

この一連の流れにおいて、

  • 私たち(利用者):プログラム
  • ウェイター:API
  • 厨房(シェフ):外部のサービスやソフトウェア

と置き換えることができます。プログラムが「このデータが欲しい」とAPIにリクエスト(注文)を送ると、APIが外部サービスにその内容を伝え、結果(データ)をプログラムに返してくれるのです。

このように、APIはプログラムやサービス同士が情報をやり取りするための窓口やルールの役割を担っています。

GASのAPI連携の基本 UrlFetchApp

GASでAPIを利用する際の中心的な役割を担うのが、UrlFetchApp という組み込みのサービスです。これを使うことで、指定したURLにアクセスし、情報を取得したり送信したりできます。

最も基本的な形は、情報を取得するGETリクエストです。

// 指定したURLにリクエストを送信し、応答(レスポンス)を受け取る
const response = UrlFetchApp.fetch("取得したい情報のURL");

今回はこのUrlFetchAppを使い、テスト用の公開APIからデータを取得してスプレッドシートに書き出す、という流れを体験してみましょう。

【実践】テストAPIでデータを取得してみよう

今回は、APIの学習によく利用される「JSONPlaceholder」という無料のテスト用APIサービスを使います。APIキーの登録などが不要で、すぐに試すことができるため、基礎を学ぶのに最適です。

出典: JSONPlaceholder – https://jsonplaceholder.typicode.com/

Step1. スクリプトを作成する

お手元のスプレッドシートに紐づいたGASのスクリプトエディタを開き、以下のコードをコピー&ペーストしてください。

function getSampleData() {
  // データを取得したいAPIのURL
  const url = 'https://jsonplaceholder.typicode.com/posts/1';

  // UrlFetchAppを使ってAPIにリクエストを送信
  const response = UrlFetchApp.fetch(url);

  // 取得したテキストデータをコンソールに出力して確認
  Logger.log(response.getContentText());
}

Step2. 実行して結果を確認する

コードが書けたら、実行ボタンを押して関数を実行します。
実行後、エディタ下部の「実行ログ」に以下のようなテキストが表示されていれば成功です。

{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}

このように{}や””で囲まれ、項目名と値がペアで記述されたテキストデータの形式を JSON(JavaScript Object Notation)形式と呼びます。多くのAPIでは、このJSON形式でデータのやり取りが行われます。

APIからの応答(レスポンス)を理解する

UrlFetchApp.fetch() を実行すると、APIサーバーからの応答が「HTTPResponse」というオブジェクトで返ってきます。

オブジェクトとは?

GASにおけるオブジェクトとは、{キー: 値} のように、名前(キー)と値がペアになったデータの集まりのことです。
例えば、{ “name”: “田中”, “age”: 30 } のような形式を指します。この形式のおかげで、後から「name」というキーを指定して「田中」という値を簡単に取り出すことができます。

ここで、「さっき見たJSONと何が違うの?」と疑問に思うかもしれません。 重要な違いは、JSONはあくまで “テキスト(文字列)” であり、オブジェクトはGASが “プログラムの部品”として扱えるデータである、という点です。

JSONは見た目がオブジェクトに似ていますが、そのままでは単なる長い文字列なので、そのままではキーを指定しても中身を取り出すことはできません。
取得したJSON形式のテキストは、GASが扱えるオブジェクトに変換する作業が必要になります。

HTTPResponseオブジェクトには、この処理に必要な命令(メソッド)が含まれています。

  • getContentText():先ほども使用した、応答の本体(ボディ)をテキスト形式で取得する命令です。APIから返されるデータの多くは、上記のような JSON(JavaScript Object Notation)形式のテキストです。
  • getResponseCode():応答のステータスコードを数値で取得します。リクエストが成功したか(200)、ページが見つからなかったか(404)などを判断できます。

先ほどのコードを少し改造して、取得したJSONデータの中から「ユーザーID」「タイトル」「本文」を抽出し、スプレッドシートのA1セル、A2セル、A3セルにそれぞれ書き出してみましょう。

function getAndSpreadData() {
  const url = 'https://jsonplaceholder.typicode.com/posts/1';
  const response = UrlFetchApp.fetch(url);

  // ステータスコードが200(成功)の場合のみ処理を実行
  if (response.getResponseCode() === 200) {
    // JSONテキストをGASが扱えるオブジェクトに変換
    const jsonData = JSON.parse(response.getContentText());

    // 必要なデータを取り出す
    const userId = jsonData.userId;
    const title = jsonData.title;
    const body = jsonData.body;

    // スプレッドシートに書き出す
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    sheet.getRange('A1').setValue(userId);
    sheet.getRange('A2').setValue(title);
    sheet.getRange('A3').setValue(body);

  } else {
    Logger.log('エラーが発生しました: ' + response.getResponseCode());
  }
}

このコードの重要な点は JSON.parse() です。これが先程登場した「JSON形式のテキストをGASが扱えるオブジェクトに変換する」命令です。この命令を使うことで、JSONデータを jsonData.title のように中身を取り出せる便利なオブジェクト形式に変換しています。

APIキーの安全な管理方法

多くの実用的なAPIでは、誰がアクセスしているかを識別するために「APIキー」という認証情報が必要になります。このAPIキーは、パスワードのように重要な情報であり、コードに直接書き込むのは非常に危険です。

もしコードが外部に漏れた場合、第三者にAPIキーを不正利用されてしまう可能性があります。

そこでGASでは、プロパティサービス を使ってAPIキーを安全に保管することが推奨されています。

プロパティサービスの使い方

  1. スクリプトエディタの左側メニューにある歯車マーク(プロジェクトの設定)をクリックします。
  2. 表示された画面の下部にある「スクリプト プロパティ」の「プロパティを追加」ボタンを押します。
  3. 「プロパティ」にキーの名前(例:API_KEY)、「値」に実際のAPIキーを入力して保存します。

保存したAPIキーは、以下のコードで呼び出せます。

// プロパティサービスを取得
const scriptProperties = PropertiesService.getScriptProperties();

// 'API_KEY'という名前で保存した値を取得
const apiKey = scriptProperties.getProperty('API_KEY');

// これでapiKeyという変数に、安全な場所からキーを読み込める
// const url = 'https://jsonplaceholder.typicode.com/posts/1' + apiKey;

GASでAPIを利用する際の注意点

1. APIの利用規約を必ず確認する

APIを利用する際は、必ず提供元の利用規約を確認しましょう。APIの取得方法はサービスによって異なり、多くは開発者向けのページにドキュメントとして公開されています。「(サービス名) API」などで検索すると見つかります。

規約を確認せずに、無許可で過度なアクセスを行うと、サイトに大きな負荷をかけてしまったり、規約違反としてアクセスをブロックされたりする可能性があります。必ずルールを守って利用しましょう。

2. 制限(クォータ)

GASのUrlFetchAppには、1日に実行できる回数や、1回の実行時間などに上限が設けられています。この上限は、利用しているGoogleアカウントの種類(無料のGmailアカウントか、有料のGoogle Workspaceアカウントか)によって異なります。

大量のデータを頻繁に取得するような処理を実装する際は、現在のクォータを確認しておくことが重要です。

詳細は公式ドキュメントで確認できます。

3. 認証(OAuth2)が必要なAPI

APIの中には、APIキーだけでなく、ユーザーが「このプログラムに自分のデータの操作を許可します」という承認を行う「OAuth2」という認証方式が必要なものがあります。

このようなAPIを利用する場合、UrlFetchAppだけで連携するのは複雑になります。一般的には、「OAuth2 for Apps Script」という有志が作成したライブラリ(特定の複雑な処理を簡単に行うために、あらかじめ用意されたプログラムの集まり)を導入して連携を実装します。

これは応用的な内容になるため、まずは本記事で解説した基本的なAPI連携に慣れることから始めましょう。

まとめ:API連携で業務自動化の可能性を広げよう

今回は、GASのUrlFetchAppを使ったAPI連携の基本を、より安全かつ汎用的な形で解説しました。

  • GASのAPI連携は UrlFetchApp.fetch() が基本。
  • 返ってきたJSONデータは JSON.parse() でGASが扱える形式に変換する。
  • APIキーなどの重要な情報は、コードに直接書かずプロパティサービスに保管する。
  • APIを利用する前には、必ず利用規約を確認する。
  • GASには実行回数などの制限があり、APIによってはOAuth2という高度な認証が必要な場合もある。

API連携の基本をマスターすれば、チャットツールへの通知、顧客管理システム(CRM)へのデータ登録、Webサイトの情報収集など、GASで実現できることの幅が大きく広がります。

まずは今回のサンプルコードを参考に、身近な業務で活用できそうなAPIを探してみてはいかがでしょうか。この一歩が、あなたの業務をよりスマートに変えていくはずです。

※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。