Webhookを利用して外部サービスからデータを受け取り、Googleスプレッドシートに自動保存したいと思ったことはありませんか。Apps ScriptのWeb App機能を使えば、独自のエンドポイントを作成し、POSTリクエストで送られたデータをスプレッドシートに記録できます。この記事では、Webhookの受信エンドポイントをApps Scriptで構築する手順を詳しく解説します。初心者の方でも簡単に設定できるよう、コード例とともに説明しますので、ぜひ参考にしてください。
【要点】Webhook受信エンドポイントをApps Scriptで構築するポイント
- doPost関数: POSTリクエストのデータをJSONとして解析し、スプレッドシートに追記します。
- Web Appのデプロイ: デプロイ時にアクセス権限を設定し、エンドポイントURLを取得します。
- ContentServiceの利用: レスポンスをJSON形式で返すことで、送信元に処理結果を通知します。
ADVERTISEMENT
目次
Apps Script Web AppでWebhookを受信する仕組み
Web Appは、HTTPリクエストを受け付けるAPIエンドポイントとして機能します。doGet関数はGETリクエスト、doPost関数はPOSTリクエストを処理します。Webhookは通常POSTメソッドでデータを送信するため、doPost関数を実装します。デプロイ時にアクセス権限を「Anyone」に設定すると、認証なしでリクエストを受け付けられます。スプレッドシートにデータを蓄積するには、SpreadsheetAppを使ってシートを操作します。受信したデータはJSON形式で送られることが多く、JavaScriptのJSON.parseで解析して配列に変換し、シートに追記します。
Webhook受信エンドポイントを作成する手順
以下の手順で、Webhookを受信するエンドポイントを作成します。
- スプレッドシートを準備する
新しいGoogleスプレッドシートを作成し、シート名を「データ」に変更します。A列からD列に、それぞれ「日時」「名前」「メール」「メッセージ」という見出しを入力します。 - Apps Scriptエディタを開く
メニューの「拡張機能」から「Apps Script」を選択し、スクリプトエディタを開きます。プロジェクト名を「Webhook受信」に変更します。 - スクリプトコードを記述する
以下のコードをエディタに貼り付けます。function doPost(e) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var data = JSON.parse(e.postData.contents); sheet.appendRow([new Date(), data.name, data.email, data.message]); return ContentService.createTextOutput(JSON.stringify({status: "success"})) .setMimeType(ContentService.MimeType.JSON); }このコードは、POSTリクエストのボディをJSONとして解析し、日時とともにシートに追記します。レスポンスとして成功ステータスをJSONで返します。
- Web Appとしてデプロイする
スクリプトエディタで「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。種類は「ウェブアプリ」、アクセスできるユーザーは「全員(匿名ユーザーを含む)」を選びます。必要に応じて「自分のみ」や「Googleアカウントを持つ全員」も選択できます。デプロイを実行すると、URLが発行されます。 - エンドポイントURLを確認する
デプロイ完了後に表示されるURLをコピーします。これがWebhookの送信先エンドポイントです。URLは「https://script.google.com/macros/s/…/exec」のような形式です。 - 動作確認を行う
curlコマンドやPostmanを使って、以下のようにPOSTリクエストを送信します。curl -X POST -H "Content-Type: application/json" -d '{"name":"テスト太郎","email":"test@example.com","message":"こんにちは"}' "https://script.google.com/macros/s/.../exec"リクエストが成功すると、スプレッドシートにデータが追加されます。シートを確認し、正しく記録されていることを確認してください。
よくあるエラーと注意点
デプロイ後にコードを変更した場合の反映方法
コードを変更した場合、新しいバージョンとしてデプロイし直す必要があります。スクリプトエディタで「デプロイ」→「新しいデプロイ」を再度実行するか、既存のデプロイを管理して新しいバージョンを公開します。デプロイの管理画面では、以前のバージョンも保持されるため、必要に応じてロールバックできます。
CORSエラーが発生する場合の対処
ブラウザからの直接リクエストではCORS(Cross-Origin Resource Sharing)エラーが発生することがあります。Apps ScriptのWeb AppはCORSヘッダーを自動で付与しないため、ブラウザからの呼び出しには対応していません。Webhookの送信元は通常サーバー側のプログラムであるため、この問題はあまり発生しません。どうしてもブラウザからテストする場合は、シンプルなGETリクエストで動作確認するか、サーバーサイドからの送信を行ってください。
リクエストサイズ制限に注意
Apps ScriptのWeb Appは、リクエストボディのサイズが50MB以下である必要があります。これを超えるデータは受け付けられず、エラーになります。大きなデータを扱う場合は、分割送信や圧縮を検討してください。
認証エラーが発生した場合
デプロイ時にアクセス権限を「全員(匿名ユーザーを含む)」に設定しなかった場合、リクエストに認証情報が必要になります。Webhookの送信元が認証情報を送信できない場合は、アクセス権限を適切に設定し直しましょう。また、デプロイ後に権限を変更した場合も、再デプロイが必要です。
ADVERTISEMENT
doPostとdoGetの比較
| 項目 | doPost | doGet |
|---|---|---|
| 受信メソッド | POST | GET |
| データの取得方法 | e.postData.contentsでリクエストボディを取得 | e.parameterでクエリパラメータを取得 |
| 主な用途 | Webhook、データ登録、ファイルアップロード | データ取得、設定画面の表示、URLパラメータによる処理 |
| 送信データサイズ | 50MBまで可能 | URL長の制限あり(2048文字程度) |
Webhookの受信にはdoPostが適しています。多くの外部サービスはPOSTメソッドでデータを送信するためです。doGetはクエリパラメータを使って簡易的なAPIを作成する場合に便利です。
まとめ
この記事では、Apps ScriptのWeb App機能を使ってWebhookの受信エンドポイントを作成する手順を解説しました。doPost関数でPOSTデータを解析し、スプレッドシートに保存する基本的な流れを理解できたはずです。次は、受信したデータを整形して別シートに振り分ける処理や、エラーハンドリングを強化してみましょう。また、SlackやGitHubなどのサービスと連携すれば、自動化の幅が広がります。実際に手を動かして、自分だけのWebhook受信システムを構築してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
