Softex CelwareTech Blog
Google Apps Script2026-06-11

GASをLINE Webhookに使うときの構成上の制約

GAS WebアプリをLINE Webhookの受信先にするときに確認したい、リダイレクトによる検証失敗と署名検証の制約、代替構成を解説します。

GASLINEWebhook署名検証セキュリティ

Google Apps ScriptのWebアプリは、小さな業務アプリのWebhook受信先としても使えます。ただし、LINE Messaging APIのWebhookをGASで直接受ける構成には、事前に理解しておきたい制約があります。

この記事では、GASが必ず使えないと断定するのではなく、検証方法とセキュリティ要件によっては中継サーバーが必要になるという判断基準を整理します。

制約1:リダイレクトによりWebhook検証が失敗する場合がある

GAS Webアプリの /exec URLは、処理の過程で別のGoogle配信URLへリダイレクトされることがあります。Webhookを送る側がそのリダイレクトを許可・追従しない場合、最終処理へ到達する前に検証失敗と判定される可能性があります。

LINE側の検証リクエスト
  ↓
GAS /exec
  ↓ リダイレクトが発生する場合がある
Google側の配信URL
  ↓
doPost

実際の結果は、GASのデプロイ状態、LINE側の現在の仕様、リクエストの種類によって変わる可能性があります。「検証ボタンが失敗しても必ず実配信は動く」とは判断せず、実際のイベント送信とGAS側ログの両方で確認します。

制約2:GASのdoPostでは署名検証に必要なヘッダーを扱いにくい

LINE Messaging APIでは、受信したリクエストがLINEから送られたことを確認するため、X-Line-Signature ヘッダーを使った署名検証が推奨されます。

しかし、GAS Webアプリの doPost(e) では、一般的なWebサーバーのように任意のHTTPリクエストヘッダーを取得できません。そのため、GASを直接の受信口にすると、LINEが推奨する形の署名検証をGAS内だけで完結させるのは困難です。

本文の events の有無を確認する処理は、GASのdoPostをLINE WebhookとアプリAPIで分岐するためには役立ちますが、送信元の正当性を証明する署名検証の代わりにはなりません。

代替案:署名検証できる中継サーバーを置く

受信元の検証が必要な場合は、Next.js、Vercel Functions、Cloud Runなど、HTTPヘッダーを取得できる受信口をLINEとGASの間に置きます。

LINE Messaging API
  ↓ X-Line-Signatureを検証
Next.js / Vercel Functions / Cloud Run
  ↓ 検証済みの必要データだけ送信
GAS Web API
  ↓
Googleスプレッドシート

この構成なら、中継サーバーで署名を検証してから、GASへ必要な情報だけを渡せます。GAS側のURLや認証情報も、サーバー側の環境変数で管理できます。

GAS直接受信を採用する場合の安全策

試作や限定運用でGASを直接受信口にする場合でも、次の対策を組み合わせます。

  • 予約番号などの照合キーを推測困難な値にする
  • 連携済みの予約番号を別のLINE userIdで上書きしない
  • 受信本文の形式と値を厳格に検証する
  • 同一イベントの重複処理を防ぐ
  • 個人情報をLINEメッセージへ必要以上に含めない
  • 処理結果とエラーをログへ残す
  • 重要処理は管理者確認や別の本人確認と組み合わせる

予約番号を使った軽量な連携方法は、予約番号送信でLINEアカウントを連携するで解説しています。

推測困難な予約番号の例

function makeReservationNo_() {
  var ymd = Utilities.formatDate(
    new Date(),
    'Asia/Tokyo',
    'yyyyMMdd'
  );
  var chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
  var randomPart = '';

  for (var i = 0; i < 5; i++) {
    randomPart += chars.charAt(
      Math.floor(Math.random() * chars.length)
    );
  }

  return 'R-' + ymd + '-' + randomPart;
}

R-20260611-001 のような連番は推測されやすいため、本人確認の一部として使う値には向きません。ただし、ランダムな予約番号も署名検証そのものではありません。扱う情報とリスクに応じて構成を選びます。

判断基準

条件検討しやすい構成
小規模な試作、低リスクな通知GAS直接受信を検証したうえで採用
署名検証が必須ヘッダーを取得できる中継サーバーを使用
個人情報・決済・重要操作を扱う認証基盤を含めたサーバー構成を使用
既存Next.jsアプリがあるNext.js側で受信・検証してGASへ中継

再利用判断

GASをWebhook受信先として検討するときは、サービスごとに署名方式、リダイレクト対応、再送仕様を確認してください。この判断手順はLINE以外のWebhook連携でも再利用できます。

今治Excel教室 予約管理アプリへのLINE通知を考える場合も、実装前にどの情報を扱うかを整理し、直接受信か中継構成かを選ぶ必要があります。構想全体は予約管理アプリからLINEで顧客へ通知する仕組みを参照してください。

関連記事

まとめ

GASはLINE Webhookの受信処理を小さく試せる一方、リダイレクトとHTTPヘッダー取得の制約があります。特に署名検証が必要な構成では、GASだけで完結させず、中継サーバーを置く方が明確です。

検証画面の結果だけで判断せず、最新仕様、実際のイベント送信、ログ、扱う情報の重要度を確認して構成を決めます。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →