【Googleスプレッドシート】Webhook受信エンドポイントとして使う!doPost関数の基本

【Googleスプレッドシート】Webhook受信エンドポイントとして使う!doPost関数の基本
🛡️ 超解決

Webhookを使うと、外部サービスからのデータをリアルタイムで受け取ることができます。しかし、GoogleスプレッドシートでWebhookを受信する方法がわからない方も多いでしょう。実は、Google Apps ScriptのdoPost関数を使えば、スプレッドシートをWebhookのエンドポイントとして簡単に設定できます。この記事では、doPost関数の基本的な書き方から実際の設定手順までを解説します。初めての方でも迷わずに実装できる内容です。

【要点】doPost関数でスプレッドシートをWebhookエンドポイントにする基本

  • doPost(e)関数の定義: WebhookからのPOSTリクエストを受信するエントリポイントです。
  • データの取得とシートへの書き込み: e.parameterやJSON.parseでデータを解析し、スプレッドシートに保存します。
  • デプロイとURLの取得: スクリプトをWebアプリとしてデプロイし、エンドポイントURLを取得します。

ADVERTISEMENT

doPost関数とは?Webhook受信の仕組み

doPost関数は、Google Apps ScriptでHTTP POSTリクエストを受け取るための特別な関数です。Webhookとは、外部サービスが特定のイベント発生時に自動的にHTTPリクエストを送信する仕組みです。このリクエストをdoPost関数でキャッチし、データをスプレッドシートに保存できます。doPost関数は、Webアプリとしてデプロイされたスクリプトに対して、POSTメソッドでアクセスがあったときに自動的に実行されます。関数の引数eには、リクエストのパラメータやボディなどの情報が格納されます。

doPost関数でWebhookを受信する手順

ここでは、doPost関数を使ってWebhookデータをスプレッドシートに保存する具体的な手順を説明します。

スクリプトエディタを開く

  1. スプレッドシートを開く
    Googleスプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。
  2. プロジェクトを作成する
    スクリプトエディタが開いたら、デフォルトのコード.gsファイルにコードを記述します。プロジェクト名は任意で構いません。

doPost関数を定義する

  1. 関数の基本形を記述する
    以下のコードをエディタに貼り付けます。
    function doPost(e) {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var data = JSON.parse(e.postData.contents);
      sheet.appendRow([new Date(), data.name, data.email]);
      return ContentService.createTextOutput(JSON.stringify({result: "success"}))
        .setMimeType(ContentService.MimeType.JSON);
    }
    
  2. コードの内容を理解する
    e.postData.contentsでリクエストボディを文字列として取得し、JSON.parseでオブジェクトに変換します。取得したデータをappendRowでシートの最終行に追記します。最後に、成功レスポンスをJSON形式で返します。

Webアプリとしてデプロイする

  1. デプロイの設定を開く
    スクリプトエディタの右上にある「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。
  2. 種類を選択する
    「種類の選択」で「ウェブアプリ」を選びます。アクセスできるユーザーは「全員(匿名ユーザーを含む)」を選択します。これにより、外部のWebhook送信元からアクセス可能になります。
  3. デプロイを実行する
    「デプロイ」ボタンをクリックし、表示されるURLをコピーします。このURLがWebhookのエンドポイントになります。

Webhook送信元にエンドポイントを設定する

取得したURLを、Webhookを送信する外部サービス(例:Slack、GitHub、Zapierなど)の設定画面に登録します。多くのサービスでは、URLとHTTPメソッド(POST)を指定するだけです。

doPost関数を使う際の注意点とよくあるエラー

POSTメソッド以外のリクエストはdoPost関数で受信できない

doPost関数はPOSTメソッド専用です。GETリクエストでアクセスするとエラーになります。GETリクエストを処理するには、別途doGet関数を定義する必要があります。

リクエストボディの形式に注意する

多くのWebhookはJSON形式でデータを送信しますが、中にはフォームデータやXMLの場合もあります。e.postData.contentsで取得した文字列を適切にパースできるよう、送信元の仕様を確認してください。

デプロイのバージョン管理

スクリプトを変更したら、再度デプロイして新しいバージョンを公開する必要があります。古いバージョンのURLはそのまま動作しますが、変更を反映するには新規デプロイが必要です。

エラーハンドリングを実装する

Webhook送信元から予期しないデータが送られる可能性があります。try…catch文を使ってエラーをキャッチし、適切なレスポンスを返すようにしましょう。

ADVERTISEMENT

doPost関数とdoGet関数の違い

項目 doPost関数 doGet関数
対応HTTPメソッド POST GET
主な用途 データの受信・保存(Webhookなど) Webページの表示、データの取得
引数eの内容 e.postData.contentsにリクエストボディ e.parameterにクエリパラメータ
返すべきレスポンス ContentService.createTextOutputなど HtmlService.createHtmlOutputなど

まとめ

この記事では、doPost関数を使ってGoogleスプレッドシートをWebhookエンドポイントとして設定する方法を解説しました。doPost関数を定義し、データをシートに書き込んだ後、Webアプリとしてデプロイすることで、外部サービスからのデータを受け取ることができるようになります。次は、受け取ったデータを自動集計する仕組みや、エラーハンドリングを強化した実装に挑戦してみてください。doPost関数をマスターすれば、スプレッドシートを活用したデータ連携の幅が大きく広がります。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

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