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データをスプレッドシートに保存する具体的な手順を説明します。
スクリプトエディタを開く
- スプレッドシートを開く
Googleスプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。 - プロジェクトを作成する
スクリプトエディタが開いたら、デフォルトのコード.gsファイルにコードを記述します。プロジェクト名は任意で構いません。
doPost関数を定義する
- 関数の基本形を記述する
以下のコードをエディタに貼り付けます。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); } - コードの内容を理解する
e.postData.contentsでリクエストボディを文字列として取得し、JSON.parseでオブジェクトに変換します。取得したデータをappendRowでシートの最終行に追記します。最後に、成功レスポンスをJSON形式で返します。
Webアプリとしてデプロイする
- デプロイの設定を開く
スクリプトエディタの右上にある「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。 - 種類を選択する
「種類の選択」で「ウェブアプリ」を選びます。アクセスできるユーザーは「全員(匿名ユーザーを含む)」を選択します。これにより、外部のWebhook送信元からアクセス可能になります。 - デプロイを実行する
「デプロイ」ボタンをクリックし、表示される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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】複合グラフで棒と折れ線を同時表示!2軸グラフの作り方
- 【Googleスプレッドシート】FILTER関数で条件に合う行だけ抽出!数式1つで動的な絞り込み
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】重複データを抽出して表示!COUNTIFと条件付き書式の併用
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】ARRAYFORMULAで列全体に数式を一括適用!セル分の入力を不要に
- 【Googleスプレッドシート】データ範囲を動的に伸縮させる!INDIRECTと参照範囲のコツ
- 【Googleスプレッドシート】共有解除と権限の取り消し!アクセスを完全に閉じる手順
