GAS セットアップ手順書
予約管理システム(LINE + Stripe + Google Sheets)を Google Apps Script で動かすための手順です。
前提
- LINE 公式アカウント作成済み(チャネルアクセストークン・チャネルシークレット取得済み)
- Google アカウント(script.google.com / sheets.google.com にログインできること)
ステップ1: GAS 新規プロジェクト作成
- script.google.com を開く
- 「新しいプロジェクト」をクリック
- プロジェクト名を「予約管理システム」などに変更(左上)
ステップ2: スプレッドシートを用意する
- sheets.google.com で 新しいスプレッドシート を作成
- 名前を「予約管理データ」などに
- ブラウザのURLから スプレッドシートID をコピーする
- 例:
https://docs.google.com/spreadsheets/d/【ここがID】/edit - この 【ここがID】 をメモ(後で Script Properties に入れる)
- 例:
ステップ3: コードを GAS に貼り付ける
方法A: ファイルごとに貼る(推奨)
- 同梱の
GAS_PASTE_ALL.gsを開く - 区切りコメント
// ========== ファイル名.gs ==========ごとにブロックが分かれている - GAS エディタで:
- 初期状態の
Code.gsの内容を すべて削除 GAS_PASTE_ALL.gsの 「Code.gs」ブロックだけ をコピーして貼り付け
- 初期状態の
- 左の「+」→「スクリプト」で 新しい .gs ファイル を追加し、名前を そのブロックのファイル名 にする(例:
ScriptProperties) - 同様に、各ブロックを対応するファイルに貼り付け
- 作成するファイル一覧は下記「ファイル対応表」を参照
方法B: 1ファイルにまとめて貼る
- GAS の Code.gs だけを使う場合
GAS_PASTE_ALL.gsの 全区切りを除いた中身をすべて 1つの Code.gs に貼り付ける- 保存(Ctrl+S)
ファイル対応表
| GAS で作るファイル名 | ペースト用のブロック名 |
|---|---|
| Code.gs | Code.gs |
| ScriptProperties.gs | config/ScriptProperties.gs |
| SheetConfig.gs | config/SheetConfig.gs |
| ValidationUtils.gs | utils/ValidationUtils.gs |
| DateUtils.gs | utils/DateUtils.gs |
| MessageTemplates.gs | templates/MessageTemplates.gs |
| Reservation.gs | models/Reservation.gs |
| Waitlist.gs | models/Waitlist.gs |
| SheetService.gs | services/SheetService.gs |
| LineService.gs | services/LineService.gs |
| StripeService.gs | services/StripeService.gs |
| ReminderService.gs | services/ReminderService.gs |
| LineWebhookHandler.gs | handlers/LineWebhookHandler.gs |
| StripeWebhookHandler.gs | handlers/StripeWebhookHandler.gs |
| Setup.gs | Setup.gs |
| KPIService.gs | KPIService.gs |
| Dashboard.gs | Dashboard.gs |
| TestSuite.gs | tests/TestSuite.gs |
※ フォルダは GAS では作れないため、ファイル名だけで区別する。
ステップ4: Script Properties を設定する
- GAS エディタで プロジェクトの設定(歯車アイコン)をクリック
- 「スクリプト プロパティ」→「スクリプト プロパティを追加」
- 以下の プロパティ名 と 値 を1つずつ追加(既存は上書きでOK)
| プロパティ名 | 値 | 備考 |
|---|---|---|
| LINE_CHANNEL_ACCESS_TOKEN | (LINEで取得した長いトークン) | 必須 |
| LINE_CHANNEL_SECRET | (LINEで取得したシークレット) | 必須 |
| LINE_ADMIN_USER_ID | (管理者のLINEユーザーID) | 任意・通知用 |
| STRIPE_API_KEY | sk_test_xxxx… または sk_live_xxxx… | Stripe取得後 |
| STRIPE_WEBHOOK_SECRET | whsec_xxxx… | デプロイ後に取得 |
| SPREADSHEET_ID | (ステップ2でメモしたID) | 必須 |
| DEPOSIT_AMOUNT_JPY | 1000 | 任意・デフォルト1000 |
| CANCELLATION_DEADLINE_HOURS | 2 | 任意 |
| REMINDER_HOURS_BEFORE | 24 | 任意 |
| RESALE_NOTIFICATION_MINUTES | 10 | 任意 |
| AVERAGE_UNIT_PRICE | 6000 | 任意 |
| NO_SHOW_THRESHOLD | 2 | 任意 |
| NO_SHOW_DEPOSIT_AMOUNT | 2000 | 任意 |
- 保存してエディタに戻る
ステップ5: 初回セットアップ関数を実行する
- エディタで Setup.gs を開く(または Code.gs のみの場合はその中から)
- 関数一覧で
runSetupを選択 - 「実行」をクリック
- 初回は 権限の承認 が求められる:
- 「権限を確認」→ 自分のGoogleアカウントを選択
- 「詳細」→「〇〇(安全ではないページ)に移動」→「許可」
- 実行が完了すると、指定したスプレッドシートに reservations / waitlist / weekly_summary / Dashboard / Waitlist Dashboard が自動作成される
- トリガー(リマインド・No-Show チェック等)も自動作成される
※ SPREADSHEET_ID が未設定だとエラーになる。先にステップ4を完了すること。
ステップ6: Web アプリとしてデプロイする
- GAS エディタで「デプロイ」→「新しいデプロイ」
- 種類で「ウェブアプリ」を選択
- 説明: 「予約Webhook」など任意
- 「次のユーザーとして実行」: 自分
- 「アクセスできるユーザー」: 全員(LINE/Stripe がアクセスするため)
- 「デプロイ」をクリック
- 表示される ウェブアプリのURL をコピー(例:
https://script.google.com/macros/s/xxxxx/exec) - このURLを LINE の Webhook URL と Stripe の Webhook エンドポイント に登録する
コードを更新した場合: 「デプロイ」→「デプロイを管理」→ 該当デプロイ(例: 予約Webhook v1)の横の編集(鉛筆)→「バージョン」で「新バージョン」を選んで保存すれば反映されます。Webhook URL は変更不要です。
ステップ7: LINE Webhook を設定する
- LINE Developers コンソール(または LINE 公式アカウント管理)で、対象チャネルの Messaging API 設定 を開く
- Webhook URL に、ステップ6でコピーした GAS のデプロイURL をそのまま貼り付けて保存
- 「Webhook の利用」をオン にする
- 「検証」で成功すればOK
ステップ8: Stripe Webhook を設定する(Stripe 利用時)
- dashboard.stripe.com → 開発者 → Webhook
- 「エンドポイントを追加」
- エンドポイントURL に GAS のデプロイURL を入力
- イベントで payment_intent.succeeded と payment_intent.payment_failed を選択
- 作成後、署名シークレット(whsec_…) をコピー
- GAS の Script Properties に STRIPE_WEBHOOK_SECRET として追加
ステップ9: 動作確認
- LINE でボットを友だち追加
/reserveと送信- 名前・電話番号・日付・時間・施術を入力
- デポジット決済リンクが届けば、LINE 連携はOK
- スプレッドシートの reservations シートに1行追加されていれば、GAS ↔ シート連携もOK
- Stripe テストモードで支払い完了すると、予約確定メッセージが届く想定
トラブルシューティング
| 現象 | 確認すること |
|---|---|
| Webhook が届かない | LINE/Stripe の Webhook URL がデプロイURLと完全一致か、HTTPS か |
| 「Invalid LINE signature」 | Script Properties の LINE_CHANNEL_SECRET が正しいか |
| シートに書き込めない | SPREADSHEET_ID が正しいか、runSetup を実行してシートが作成されているか |
| 決済リンクが作成されない | STRIPE_API_KEY が設定されているか(sk_test_ または sk_live_) |
注意
Stripe 決済リンク
ペースト用コードの createPaymentLink は簡略版です。Stripe の Payment Links API または Checkout の URL を正しく返すように、必要に応じて Stripe ドキュメント を参照して修正してください。
Code.gs の署名検証
Code.gs 内の verifyLineSignature / verifyStripeSignature では、引数で受け取った signature をそのまま actualSignature として比較してください。
元コードで headers を参照している場合はスコープにないため、actualSignature = signature に置き換えてください。
(GAS_PASTE_ALL.gs 側で修正済みの場合はそのまま貼って問題ありません。)
次のステップ
- 本番運用前に Stripe を 本番キー(sk_live_) に切り替え
- LINE_ADMIN_USER_ID を設定すると、週次レポートがLINEに送信される
- 必要に応じて
docs/setup-guide.mdのチェックリストで全体を再確認