INDEX

    Googleスプレッドシートは多くのビジネスやプロジェクトで活用されていますが、そのデータをAPI経由でアクセスできるようにすることで、他のシステムやアプリケーションと統合することが可能になります。この記事では、Google Apps Script(GAS)を使ってスプレッドシートのデータをAPIとして公開し、そのデータをJSON形式で取得できるAPIを作成する方法をステップバイステップで説明します。

    ステップ 1: スプレッドシートの準備

    まず、APIで公開したいデータを含むGoogleスプレッドシートを用意します。

    下記の項目でシートを作成しています。

    ・ID

    ・新規事業

    ・印象、よく言われるキーワード

    ・トンマナ(複数選択可)

    ・作りたいジャンル(複数選択可)

    ・カラー

    ・一言コピー(テキスト形式)

    ※入力データの利用目的は、入力データをリアルタイムに近い形でAPIで公開させます。

    ステップ 2: Google Apps Script でスクリプトを作成

    次に、スプレッドシートにGoogle Apps Scriptを追加して、データを取得し、APIとして公開するスクリプトを作成します。

    以下の手順で進めます。

    1. GASエディタの起動

    1. スプレッドシートを開きます。

    2. メニューの「拡張機能」から「Apps Script」をクリックします。

    2. スクリプトの作成

    以下のスクリプトをApps Scriptエディタに貼り付けます。このスクリプトは、スプレッドシートのデータを取得し、JSON形式で出力するAPIを生成します。

    // スプレッドシートのデータを JSON 形式に変換する関数
    function makeJson() {
     const cache = CacheService.getScriptCache(); // スクリプトのキャッシュサービスを使用
     const cachedData = cache.get('jsonData');  // 'jsonData' というキーでキャッシュを取得
    
     // キャッシュが存在する場合は、キャッシュされたデータを返す
     if (cachedData) {
      return JSON.parse(cachedData); // キャッシュをJSONとしてパースして返す
     }
    
     // アクティブなスプレッドシートの現在のシートを取得
     const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    
     // 2行目から最後の行まで、A列からI列までのデータを取得
     const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, 9); // 2行目以降、A~I列を指定
     const data = range.getValues(); // 各行のデータを配列として取得
    
     // 1行目(ヘッダー)のデータを取得
     const headers = sheet.getRange(1, 1, 1, 9).getValues()[0]; // A1~I1の範囲のヘッダー行
     let jsonData = []; // 結果を保存するための配列
    
     // 各行のデータをループ
     for (let i = 0; i < data.length; i++) {
      const row = data[i];
      // 「選択してください」または空の「一言コピー」が含まれる行をスキップ
      if (
       row[headers.indexOf('新規事業')] === '選択してください' ||
       row[headers.indexOf('印象、よく言われるキーワード')] === '選択してください' ||
       row[headers.indexOf('トンマナ(複数選択可)')] === '選択してください' ||
       row[headers.indexOf('作りたいジャンル(複数選択可)')] === '選択してください' ||
       row[headers.indexOf('カラー')] === '選択してください' ||
       row[headers.indexOf('一言コピー(テキスト形式)')] === ''
      ) {
       continue; // 条件に該当する行をスキップ
      }
    
      // 各行のデータをJSON形式でオブジェクトに変換
      let obj = {
       id: row[headers.indexOf('ID')],           // ID列の値
       business: row[headers.indexOf('新規事業')],      // 新規事業列の値
       keyword: row[headers.indexOf('印象、よく言われるキーワード')], // 印象、キーワード列の値
       toneStyle: row[headers.indexOf('トンマナ(複数選択可)')],   // トンマナ列の値
       genre: row[headers.indexOf('作りたいジャンル(複数選択可)')], // ジャンル列の値
       color: row[headers.indexOf('カラー')],        // カラー列の値
       copy: row[headers.indexOf('一言コピー(テキスト形式)')],    // コピー列の値
       postDate: row[headers.indexOf('投稿日時')]       // 投稿日時列の値
      };
    
      // 作成したオブジェクトを jsonData 配列に追加
      jsonData.push(obj);
     }
    
     // 生成したJSONデータをキャッシュに保存(キャッシュの有効期限は5分 = 300秒)
     cache.put('jsonData', JSON.stringify(jsonData), 300);
    
     // 生成されたJSONデータを返す
     return jsonData;
    }
    
    // GETリクエスト時のAPIエントリーポイント
    function doGet(e) {
     const jsonData = makeJson(); // makeJson関数を実行してJSONデータを取得
     return ContentService.createTextOutput(JSON.stringify(jsonData)) // JSONデータを返す
      .setMimeType(ContentService.MimeType.JSON); // MIMEタイプをJSONに設定
    }
    

    ステップ 3: APIとして公開

    スクリプトが完成したら、次はAPIとして公開します。

    1. デプロイ

    1. エディタの上部メニューにある「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。

    2. デプロイの種類として「ウェブアプリ」を選択し、アクセスを「全員(匿名ユーザーを含む)」に設定します。

    3. デプロイ後、公開されたURLが表示されるので、このURLがAPIエンドポイントになります。

    2. APIの動作確認

    ブラウザやPostmanなどのツールを使って、公開されたURLにアクセスします。正常に動作していれば、スプレッドシートのデータがJSON形式で返ってくるはずです。

    例えば、ブラウザで以下のように表示されます。

    [
     {
      "id": 1,
      "business": "カフェ",
      "keyword": "奇跡が奇跡を呼んだ",
      "toneStyle": "モダン, コミカル",
      "genre": "WEBサイト, ポスター",
      "color": "グリーン",
      "copy": "ほんとに歯が痛い",
      "postDate": "2024.10.02.14.49.47"
     },
     {
      "id": 2,
      "business": "レストラン",
      "keyword": "なんでもない日常",
      "toneStyle": "ナチュラル, レトロ",
      "genre": "名刺, チラシ",
      "color": "パープル",
      "copy": "最高のレストラン体験",
      "postDate": "2024.10.02.14.50.32"
     }
    ]
    

    ステップ 4: 最適化とキャッシュの活用

    APIのレスポンス速度を改善するために、キャッシュを利用する方法をスクリプトに組み込みました。スクリプト内でデータが変更されない限り、毎回同じデータを再生成するのではなく、キャッシュに保存されたデータを再利用します。これにより、同じデータが頻繁にリクエストされる場合でもパフォーマンスを向上させることができます。