ADVERTISEMENT

【Googleスプレッドシート】Apps Script Web App公開!Webhook受信エンドポイント

【Googleスプレッドシート】Apps Script Web App公開!Webhook受信エンドポイント
🛡️ 超解決

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を受信するエンドポイントを作成します。

  1. スプレッドシートを準備する
    新しいGoogleスプレッドシートを作成し、シート名を「データ」に変更します。A列からD列に、それぞれ「日時」「名前」「メール」「メッセージ」という見出しを入力します。
  2. Apps Scriptエディタを開く
    メニューの「拡張機能」から「Apps Script」を選択し、スクリプトエディタを開きます。プロジェクト名を「Webhook受信」に変更します。
  3. スクリプトコードを記述する
    以下のコードをエディタに貼り付けます。
    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で返します。

  4. Web Appとしてデプロイする
    スクリプトエディタで「デプロイ」ボタンをクリックし、「新しいデプロイ」を選択します。種類は「ウェブアプリ」、アクセスできるユーザーは「全員(匿名ユーザーを含む)」を選びます。必要に応じて「自分のみ」や「Googleアカウントを持つ全員」も選択できます。デプロイを実行すると、URLが発行されます。
  5. エンドポイントURLを確認する
    デプロイ完了後に表示されるURLをコピーします。これがWebhookの送信先エンドポイントです。URLは「https://script.google.com/macros/s/…/exec」のような形式です。
  6. 動作確認を行う
    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

この記事の監修者
✍️

超解決 第一編集部

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