この記事では、LINE予約システムを無料で自作する方法について分かりやすく解説します。
自作が難しい場合の代替案まで紹介するので、あなたに合った導入方法が見つかります。
【無料でできる】LINE予約システムを自作する方法
LINE予約システムは、LINE公式アカウントと無料の予約サービスやフォームを組み合わせれば自作できます。専用開発は不要で、LINEのリッチメニューに予約ページやフォームのURLを設定するだけでも予約受付を始められます。
無料で自作する方法は、主に次の4つです。
| 方法 | 空き枠管理 | 自動確定 | 変更・ キャンセル | LINE通知 | 難易度 |
| 無料予約システムを連携 | ○ | ○ | ○ | △ | 低 |
| Googleフォームなどを設置 | ✕ | ✕ | ✕ | ✕ | 低 |
| LINEチャットで受付 | ✕ | ✕ | △ | ○ | 低 |
| Messaging API+GAS | ○ | ○ | ○ | ○ | 高 |
予約件数がある店舗では、無料予約システムをLINEから開ける形にする方法が基本です。フォームやチャットでも予約受付はできますが、空き枠管理や予約確定を手作業で行う必要があります。
1. 無料の予約システムをLINEのリッチメニューに設置する

最も実用的なのは、無料プランのある予約システムで予約ページを作成し、そのURLをLINE公式アカウントのリッチメニューに設定する方法です。
顧客はLINEの「予約する」ボタンから予約ページへ進み、空いている日時を選択します。予約枠や顧客情報は予約システム側で管理されるため、スタッフがチャットで空き状況を確認する必要がありません。
STORES予約、Square予約、Airリザーブ、freee予約など、無料プランを提供している予約システムを利用すれば、初期費用や月額料金をかけずに始めることも可能です。
無料で自作する方法の中では、予約受付から空き枠管理まで自動化できるため、店舗に導入するときはこの方法を優先しましょう。
2. Googleフォームなどで予約フォームを作る

Googleフォームやformrunなどで予約フォームを作成し、そのURLをLINEのリッチメニューやメッセージに設定する方法です。
フォームには氏名、希望日時、メニュー、連絡先などを入力してもらい、スタッフが内容を確認して予約を確定します。
| Googleフォーム等でできること | 苦手なこと |
| 氏名・連絡先・希望日時・メニューの収集 | 空き枠をリアルタイムで減らす |
| 回答をスプレッドシートに保存 | 同時間帯のダブルブッキングを自動防止 |
| LINEリッチメニューからフォームへ誘導 | 予約変更・キャンセルを予約台帳へ自動反映 |
| 自動返信の簡易設定(方法により) | スタッフ指名・設備在庫・回数券・決済を一体管理 |
ただし、フォームは予約枠を管理するシステムではありません。同じ日時に複数の申込が入る可能性があり、予約確定、変更、キャンセル、リマインドなども別途対応が必要です。
固定日程のイベント、個別相談、面談候補日の受付、仮申込など、リアルタイムの空き枠管理が不要な用途で利用されます。
詳しくはこちらをご覧ください。
3. LINEチャットだけで予約を受け付ける
最も簡単なのは、LINE公式アカウントのチャットだけで予約を受け付ける方法です。
顧客から希望日時やメニューを送ってもらい、スタッフが空き状況を確認して予約を確定します。外部サービスを導入する必要がないため、LINE公式アカウントだけで始められます。
一方で、空き枠確認、予約台帳への登録、変更、キャンセル、顧客ごとの予約履歴管理はすべて手作業です。予約件数が少ない場合には利用できますが、件数が増える店舗では予約システムを組み合わせる方が効率的です。
4. Messaging API+GASで自社開発する
LINE上で空き枠の確認から予約、変更、キャンセル、通知まで自動化する場合は、Messaging APIとGoogle Apps Script(GAS)を使って開発します。
主に使うツールと役割は次のとおりです。
| ツール | 役割 |
| LINE公式アカウント | 顧客がメニューや希望日時を選択し、予約結果を受け取る窓口 |
| Messaging API | LINEとGASをつなぎ、LINE上の操作をWebhook(LINE上で操作があったときに、その情報を外部システムへ自動送信する仕組み)でGASへ送る |
| GAS | LINEから受け取った内容をもとに、GoogleスプレッドシートやGoogleカレンダーを確認・更新し、空き枠確認や予約登録、変更、キャンセルを処理する |
| Googleスプレッドシート | GASから送られた顧客情報や予約内容、予約履歴を保存する |
| Googleカレンダー | GASが空き時間を確認し、予約が確定した日時を予定として登録する |
処理の流れは、LINE公式アカウント → Messaging API → GAS → Googleスプレッドシート・Googleカレンダーです。
例えば顧客がLINEで希望日時を選ぶと、その情報がMessaging APIを通じてGASへ送られます。GASがGoogleカレンダーの空き状況を確認し、予約可能であれば予定を登録します。同時に、顧客情報や予約内容をGoogleスプレッドシートへ保存し、予約結果をMessaging API経由でLINEへ返します。
これにより、次のような仕組みを構築できます。
- LINE上でメニューや担当スタッフを選択
- 空いている日時を自動表示
- 予約情報をGoogleスプレッドシートへ保存
- Googleカレンダーと予約枠を連携
- 予約変更やキャンセルを自動反映
- 予約確定やリマインドをLINEで通知
- 顧客情報や予約履歴を管理
GASはGoogleスプレッドシートやGoogleカレンダーと直接連携できるため、別途サーバーを用意せずにLINE予約の仕組みを構築できます。
ただし、GASには処理時間や利用量に上限があります。一般的な店舗予約では大きな問題になりませんが、大量の予約処理や複雑な自動化を行う場合は上限(Google サービスの割り当て)を確認してください。
LINE予約を自作するか、予約システムを使うか判断する
Messaging API+GASを使えば、LINE上で空き枠の確認から予約、変更、キャンセル、通知まで独自に自動化できます。ただし、予約機能の設計や開発、エラー対応、保守は自分で行う必要があります。
そのため、無料で構築することを重視し、開発知識があり、構築や保守に時間をかけられる場合はMessaging API+GASがおすすめです。開発や保守に時間をかけずに予約管理を自動化する場合は、既存の予約システムを利用します。
| 条件 | おすすめの方法 |
| 無料で作りたい・開発知識がある・構築や保守に時間をかけられる | Messaging API+GAS |
| 開発せず、空き枠管理や予約確定まで自動化したい | 既存の予約システム+LINE連携 |
| 希望日時だけ受け付けられればよい | Googleフォーム |
| 予約件数が少なく、スタッフが個別対応できる | LINEチャット |
なお、自社開発にこだわらず無料で始める場合は、無料プランのある予約システムを使い、予約ページをLINE公式アカウントのリッチメニューに設定する方法もあります。
無料プランでは月50件程度まで予約を受け付けられるサービスもあり、空き枠管理や予約確定も予約システム側で処理できます。開発知識がなく、まず無料でLINE予約を始める場合はこちらの方法も利用できます。
LINE予約システムを自作する際に必要な機能
ここからは、Messaging API+GASを使ってLINE予約システムを自作する場合の設計について解説します。
基本構成は、Googleカレンダーで予約枠を管理し、Googleスプレッドシートを簡易的なデータベースとして使う方法です。GASが両方を読み書きし、LINEからの予約、変更、キャンセルを処理します。
| 機能 | おすすめの実装方法 |
| 空き枠管理 | Googleカレンダーを予約枠の基準にする。GASが予定を確認し、空いている時間だけLINEに表示する |
| 重複予約対策 | 予約確定直前にGASでもう一度空き枠を確認する。同時予約にはLockServiceなどで排他処理を入れる |
| 予約情報 | Googleスプレッドシートをデータベースとして使い、予約ID、顧客ID、日時、メニュー、予約状態、カレンダーの予定IDなどを保存する |
| 予約変更 | 予約IDから対象予約を特定し、Googleカレンダーとスプレッドシートを同時に更新する |
| キャンセル | カレンダーの予定を削除または変更し、スプレッドシートの予約状態も「キャンセル」に変更する |
| 顧客管理 | LINEユーザーIDを基準に顧客を識別し、氏名や電話番号、予約履歴などをスプレッドシートで管理する |
| LINE通知 | 予約完了時は結果をLINEへ返し、予約前日のリマインドなどはPush APIで送信する |
| 決済 | カード情報を自作システムで保持せず、必要な場合はStripeなど外部の決済サービスへ接続する |
| エラー対策 | カレンダー登録とスプレッドシート保存の両方が完了してから予約完了をLINEへ返す。失敗時はログを残す |
Googleスプレッドシートをデータベースとして使う
Googleスプレッドシートには、予約情報だけでなく顧客、メニュー、スタッフなどの情報も保存できます。
ただし、すべての情報を1つのシートに入れるのではなく、データの種類ごとにシートを分けて管理するのが基本です。データベースのテーブルを分けるのと同じ考え方で、1行を1件のデータとして扱います。
例えば、次のような構成にします。
| シート | 主な項目 | 役割 |
| 予約 | 予約ID、顧客ID、予約日時、メニューID、スタッフID、予約状態、カレンダー予定ID | 予約内容と予約状態を管理する |
| 顧客 | 顧客ID、LINEユーザーID、氏名、電話番号、登録日時 | 顧客情報を管理する |
| メニュー | メニューID、メニュー名、所要時間、料金 | LINEで選択できる予約メニューを管理する |
| スタッフ | スタッフID、氏名、対応メニュー、カレンダーID | 担当スタッフと予約枠を管理する |
| ログ | 処理日時、予約ID、処理内容、結果、エラー内容 | 予約処理やエラーの履歴を残す |
中心になるのは「予約」と「顧客」の2つです。
例えば同じ顧客が3回予約した場合、予約シートに氏名や電話番号を毎回保存するのではなく、顧客シートに顧客情報を1件保存し、予約シートには顧客IDを記録します。
同様に、メニュー名やスタッフ名もIDで紐づければ、名称や料金を変更したときに過去の予約データまで個別に修正する必要がありません。
予約シートは、例えば次のような構成です。
| 予約ID | 顧客ID | 予約日時 | メニューID | スタッフID | 予約状態 | カレンダー予定ID |
| R0001 | C0001 | 2026/09/20 10:00 | M001 | S001 | 確定 | abc123 |
| R0002 | C0002 | 2026/09/20 11:00 | M002 | S002 | キャンセル | def456 |
予約IDをシステム内の基準にすることが重要です。LINEから予約変更やキャンセルが行われた場合は予約IDから対象行を特定し、保存してあるカレンダー予定IDを使ってGoogleカレンダー側の予定も更新します。
Googleカレンダーとスプレッドシートの役割を分ける
GoogleカレンダーとGoogleスプレッドシートには、それぞれ別の役割を持たせます。
Googleカレンダーは「その時間に予約できるか」を判断するために使い、Googleスプレッドシートは「誰が、何を、どの状態で予約しているか」を管理するデータベースとして使います。
例えば予約が入ると、次の流れで処理します。
- GASがGoogleカレンダーを確認して希望日時が空いているか判定する
- 空いていればGoogleカレンダーに予定を登録する
- GASが予約IDを発行する
- 予約ID、顧客ID、日時、メニュー、カレンダー予定IDなどを予約シートへ保存する
- Messaging APIを通じてLINEへ予約完了を通知する
変更やキャンセルが発生した場合も、予約IDからスプレッドシートの予約データを特定し、Googleカレンダーとスプレッドシートの両方を更新します。
また、空き枠を表示した時点では予約を確定しないことも重要です。空き枠を表示してから顧客が予約ボタンを押すまでの間に、別の顧客が同じ時間を予約する可能性があります。予約確定直前にもう一度空き状況を確認し、同じ枠への同時登録を防ぐ処理を入れます。
LINE予約を自作する場合は、単に「LINEからGoogleカレンダーへ予定を追加する」だけでは不十分です。Googleカレンダーを予約枠、Googleスプレッドシートをデータベースとして分け、予約IDで顧客・予約・カレンダーの予定を紐づける構成にすると、変更やキャンセルまで管理できます。
LINE予約システムを自作する際のセキュリティ
Messaging API+GASでLINE予約システムを自作する場合は、LINEの認証情報や顧客情報を扱うため、セキュリティ対策が必要です。
Webhookの署名を検証する
Messaging APIでは、LINE上で操作が行われるとWebhookを通じてGASへ情報が送られます。
Webhookを受信したら、「x-line-signature」(そのリクエストが本当のLINEからか検証するためのもの)を使って署名を検証し、LINEから送信された正しいリクエストであることを確認してから予約処理を実行します。
署名が一致しない場合は、予約登録や変更などの処理を行わないようにする処理をいれましょう。。
アクセストークンやチャネルシークレットを公開しない
Messaging APIでは、チャネルアクセストークンやチャネルシークレットを使用します。
これらをGASのソースコードやGoogleスプレッドシートのセルへ直接記載せず、Script Propertiesなどを使って管理してください。
GitHubなどへコードを公開する場合も、アクセストークンやシークレットを含めないようにしましょう。
Googleスプレッドシートの共有範囲を限定する
予約管理用のGoogleスプレッドシートには、LINEユーザーID、氏名、電話番号、予約日時、予約履歴などが保存されます。
スプレッドシートは予約管理を担当するスタッフだけが閲覧・編集できる状態にし、「リンクを知っている全員」などの公開設定は使用してはいけません。
また、予約処理に必要のない個人情報は保存せず、管理する情報を必要最小限にしましょう。
LINE予約システムを自作する際の注意点
Messaging API+GASでLINE予約システムを自作する場合は、予約を登録できるだけでは不十分です。二重予約を防ぎ、Googleカレンダーとスプレッドシートのデータを一致させ、処理に失敗した場合も予約状況を確認できる設計が必要です。
予約確定直前に空き枠を再確認する
LINEに空き時間を表示してから予約が確定するまでの間に、別の顧客が同じ時間を選択する可能性があります。
そのため、空き枠を表示した時点で予約可能と判断するのではなく、予約ボタンが押された直後にGASでもう一度Googleカレンダーを確認します。
さらに、複数の予約処理が同時に実行されないよう、LockServiceを使って予約登録部分を制御します。
処理の流れは、空き枠を確認 → ロック → 空き枠を再確認 → 予約登録 → ロック解除、とするのが基本です。
同じWebhookを複数回処理しない
Messaging APIでは、通信状況などによって同じWebhookイベントが複数回届く場合があります。
そのまま予約登録を実行すると、1回の操作で同じ予約が複数登録される可能性があります。
そこで、webhookEventIdを処理済みイベントとしてスプレッドシートに保存し、同じIDを受信した場合は予約処理を実行しない仕組みにします。
予約登録だけでなく、変更やキャンセルも同じ考え方で重複処理を防ぎます。
Googleカレンダーとスプレッドシートを必ず同期する
Googleカレンダーへの予定登録に成功しても、その後のスプレッドシートへの保存でエラーが発生すると、両方のデータが一致しなくなります。
そのため、予約シートには「処理中」「確定」「キャンセル」「エラー」などの予約状態を持たせます。
予約開始時に「処理中」としてデータを作成し、Googleカレンダーへの登録と必要なデータ保存が完了してから「確定」に変更します。
LINEへ予約完了を通知するのも、すべての登録処理が完了した後にします。
予約IDとカレンダー予定IDを必ず紐づける
Googleカレンダーの予定だけを作成すると、後からLINEで変更やキャンセルを受け付ける際に対象の予約を特定しにくくなります。
予約シートには自分で発行した予約IDと、Googleカレンダー側の予定IDを両方保存します。
例えば予約ID「R0001」に対してカレンダー予定ID「abc123」を保存しておけば、LINEからR0001のキャンセルを受け付けた際に、削除するカレンダー予定を特定できます。
予約IDをLINE予約システム内の基準にし、顧客、予約、Googleカレンダーを紐づける設計にします。
GASが失敗した場合の処理を決めておく
GASには処理時間や利用量の上限があり、Googleカレンダーやスプレッドシートへのアクセスでも一時的なエラーが発生する場合があります。
そのため、GASが正常に動くことだけを前提にせず、処理に失敗した場合の動作も決めておきます。
例えば予約登録に失敗した場合は「予約を受け付けました」とLINEへ返さず、エラーとして記録します。管理者が後から確認できるよう、処理日時、予約ID、処理内容、結果、エラー内容をログシートへ保存しておくと原因を確認できます。
リマインド通知はLINE公式アカウントの無料メッセージ枠を消費する
予約直後の返信に使うReply APIは、LINE公式アカウントのメッセージ通数にカウントされませんが、予約前日や当日にGASから送るリマインドはPush APIを使うため、メッセージ通数にカウントされます。
無料プランは月200通までなので、月100件の予約に前日と当日の2回リマインドを送ると200通を消費します。
無料で運用する場合は、予約件数とリマインド回数から必要なメッセージ通数を確認しておきましょう。
まとめ|LINE予約の自作は「導線設定」と「予約管理の開発」を分けて考える
LINE予約システムは、予約ページやGoogleフォームのURLをLINE公式アカウントのリッチメニューに設定するだけなら、プログラミングなしで作れます。
一方、LINE上で空き枠の確認から予約、変更、キャンセル、通知まで自動化する場合は、Messaging API+GASを使って開発します。Googleカレンダーで予約枠を管理し、Googleスプレッドシートをデータベースとして使えば、サーバーを別途用意せずに構築できます。
ただし、自作では予約機能だけでなく、二重予約対策、セキュリティ、エラー処理、保守まで自分で対応する必要があります。無料で作ることを重視し、開発知識があり、構築や保守に時間をかけられる場合はMessaging API+GASがおすすめです。
開発せずに始める場合は、既存のLINE予約システムを利用する方法もあります。料金やLINE連携、予約機能を比較する場合は、こちらをご覧ください。
無料で始める場合は、こちらで各サービスの無料範囲やLINE連携を確認できます。






