Google Apps ScriptでAPIを作成しよう!

2025/01/01に公開

はじめに

この記事はこんな人におすすめ!

  • 開発経験があまりない人
  • 無料でAPIを作成したい人
  • GASでHTTPリクエストを受信したい人

概要

  • GASで、HTTPリクエスト(GET・POST)を受信
  • GASで、HTTPリクエストのテストを実行
  • GASのウェブアプリをデプロイ
  • 外部のJavaScriptから、GASにHTTPリクエストを送信

1. GASのプロジェクトを新規作成

  1. PCのブラウザでGoogle Driveを開きます。
  2. GASのプロジェクトを作成したいフォルダに移動します。
  3. 「新規 > その他 > Google Apps Script」を選択し、プロジェクトを新規作成します。
  4. 以下の画像のようなプロジェクトが作成されます。
    GAS新規作成

2. doGet(e)関数、doPost(e)関数を作成

  1. doGet(e)関数、doPost(e)関数を作成することで、HTTPリクエスト(GET・POST)を受信することができます。
    コード.gs
    function doGet(e) {
    
    }
    
    function doPost(e) {
    
    }
    
  2. 以下のように変更すると、レスポンスをJSONにできます。
    コード.gs
        function doGet(e) {
    +       const result = {};
    
    +       return ContentService.createTextOutput(JSON.stringify(result))
    +       .setMimeType(ContentService.MimeType.JSON);
        }
    
        function doPost(e) {
    +       const result = {};
    
    +        return ContentService.createTextOutput(JSON.stringify(result))
    +       .setMimeType(ContentService.MimeType.JSON);
        }
    
  3. 以下のように変更すると、HTTPリクエストのパラメータを取得できます。
    ここでは例として、パラメータからuserというキーの値を取得し、newUserという変数に代入しています。また、newUser変数をレスポンスとして返しています。
    コード.gs
        function doGet(e) {
    +       const parameters = e.parameter;
    +       const newUser = parameters.user;
            
                const result = {
    +           user: newUser
            };
    
            return ContentService.createTextOutput(JSON.stringify(result))
            .setMimeType(ContentService.MimeType.JSON);
        }
    
        function doPost(e) {
    +       const parameters = e.parameter;
    +       const newUser = parameters.user;
    
                const result = {
    +           user: newUser
            };
    
            return ContentService.createTextOutput(JSON.stringify(result))
            .setMimeType(ContentService.MimeType.JSON);
        }
    

3. GASでHTTPリクエストのテスト

  1. GASで、HTTPリクエスト(GET・POST)のテストを実行することができます。
    ここでは例として、testDoGet()関数とtestDoPost()関数を作成しています。Logger.log()でログを出力できます。
    コード.gs
    function testDoGet() {
        const e = {
            parameter: {
                user: "kinako"
            }
        };
        const response = doGet(e).getContent();
        Logger.log(response);
    }
    
    function testDoPost() {
        const e = {
            parameter: {
                user: "kinako"
            }
        };
        const response = doPost(e).getContent();
        Logger.log(response);
    }
    
    ここまでのコード全文
    コード.gs
    function doGet(e) {
      const parameters = e.parameter;
      const newUser = parameters.user;
    
      const result = {
        user: newUser
      };
    
      return ContentService.createTextOutput(JSON.stringify(result))
        .setMimeType(ContentService.MimeType.JSON);
    }
    
    function doPost(e) {
      const parameters = e.parameter;
      const newUser = parameters.user;
    
      const result = {
        user: newUser
      };
    
      return ContentService.createTextOutput(JSON.stringify(result))
        .setMimeType(ContentService.MimeType.JSON);
    }
    
    function testDoGet() {
        const e = {
            parameter: {
                user: "kinako"
            }
        };
        const response = doGet(e).getContent();
        Logger.log(response);
    }
    
    function testDoPost() {
        const e = {
            parameter: {
                user: "kinako"
            }
        };
        const response = doPost(e).getContent();
        Logger.log(response);
    }
    
  2. プルダウンから「testDoGet」または「testDoPost」を選択し、「実行」ボタンを押下します。
    GASテスト実行
  3. Logger.log()でresponseがログに出力されます。
    GASテスト実行結果

4. GASのウェブアプリをデプロイ

  1. 「デプロイ > 新しいデプロイ」を選択します。
    GAS新しいデプロイ
  2. 歯車アイコンを押下します。
    「ウェブアプリ」を選択します。
    GASウェブアプリデプロイ
  3. 「アクセスできるユーザー」は「全員」を選択します。
    「デプロイ」ボタンを押下します。
    GASアクセスできるユーザー
  4. ウェブアプリのURLをコピーします。

5. 外部から、GASにHTTPリクエストを送信

  1. 以下のコードは、外部のJavaScriptからGASにHTTPリクエストを送信するソースコードの例です。
    url変数に、先ほどのGASのウェブアプリのURLを貼り付けてください。
    index.html
    <!DOCTYPE html>
    <html lang="ja">
    
    <head>
      <meta charset="UTF-8">
    </head>
    
    <body>
      <input type="text" id="input" />
      <button id="sendGet">GETリクエスト</button>
      <button id="sendPost">POSTリクエスト</button>
      <p id="output"></p>
    
      <script>
        const url = "<GASのウェブアプリのURLを貼り付け>";
        const input = document.getElementById('input');
        const sendGet = document.getElementById('sendGet');
        const sendPost = document.getElementById('sendPost');
        const output = document.getElementById('output');
    
        // GETリクエストボタンがクリックされたときの処理
        sendGet.addEventListener('click', async () => {
          const response = await fetch(`${url}?user=${encodeURIComponent(input.value)}`);
          const json = await response.json();
          output.textContent = JSON.stringify(json);
        });
    
        // POSTリクエストボタンがクリックされたときの処理
        sendPost.addEventListener('click', async () => {
          const options = {
            method: 'POST',
            headers: {
              'Content-Type': 'application/x-www-form-urlencoded'
            },
            body: `user=${input.value}`
          };
          const response = await fetch(url, options);
          const json = await response.json();
          output.textContent = JSON.stringify(json);
        });
      </script>
    </body>
    
    </html>
    
  2. 上記のHTMLファイルを実行するにはいくつか方法があります。
    例として、VS Codeでindex.htmlを開き、「実行 > デバッグなしで実行」を選択すると、HTMLファイルを実行できます。

さいごに

GASを使用して、簡易的なAPIを作成することができました。
これを参考に独自のAPIを作成してみてください。

  • UrlFetchApp.fetch()関数を使用することで、GASから外部へHTTPリクエストを送信することができます。
  • SpreadsheetApp.getActiveSpreadsheet()関数を使用することで、Google Sheetsにアクセスし、読み書きを行うことができます。

Discussion