旅館・ホテルが送迎バスの予約をフォームで受け、Apps Script と AI で便ごとの人数と荷物をまとめ、備考を読んで運転手向けの運行表を作る
宿泊客が Google フォームで出す送迎バスの予約を、Apps Script が便ごとの人数・荷物・車いすの数にまとめ、AI が備考を運転手向けの短いメモにして、便ごとの運行表を作ります。フロントの書き写しが無くなります。
- 生成AI
- ChatGPT/Claude
- 連携・自動化
- Google Apps Script/Make/Power Automate
- 対象業界
- 介護/宿泊/教育
- 対象部門
- 総務
- 対象業務
- 書類作成/集計・分析
- 主な課題
- 人手が足りない/書類作成に時間がかかる/確認ミスが多い
- AIで行う処理
- 生成
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★☆☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- フロントが電話とメールで送迎の予約を受け、紙の送迎表に名前・人数・便・備考を書く
- 宿泊の予約を受けた担当者と前日の確認の担当者が違うと、同じ予約が二度書かれることがある
- 前日の夕方、フロントが便ごとに人数を足し、荷物の多い組と車いすの有無を拾う
- 定員を超える便があれば、ワゴン車を足すか、宿泊客に電話して前後の便に替えてもらう
- 備考を読み、運転手に伝えるべきことを口頭で伝えるか、送迎表の端に書く
- 便ごとに送迎表を清書して運転手に渡す
- 当日の変更(電車の遅れ、人数の増減)は、フロントが運転手の携帯に電話する
- 人宿泊客が、予約の確認メールにあるリンクから Google フォームで送迎を申し込む(電話で受けたものはフロントが同じフォームに入れる)
- 自動フォームの送信をきっかけに Apps Script が動き、宿泊予約の番号で台帳を引いて、二重の申込みでないかを確かめる
- 自動便ごとの人数(大人・子ども・乳幼児)、大型の荷物の数、車いす・ベビーカーの数を足し、定員と荷物の目安と比べる
- 自動備考がある予約は、備考と便の情報を Claude API に渡し、運転手向けのメモとフロントへの印を JSON で受け取る
- 自動定員超え・荷物超え・フロントへの印がある予約を、フロントの確認の一覧に載せる
- 人フロントが確認の一覧だけを見て、電話で確かめるか、便を替えるか、ワゴン車を足すかを決める
- 自動前日の夕方に、便ごとの運行表(乗る組、人数、荷物、メモ)をシートに作る
- 人フロントが運行表を見て、車の割り当てを決めて運転手に渡す
各工程の詳しい説明を読む
- フロントが電話とメールで送迎の予約を受け、紙の送迎表に名前・人数・便・備考を書く
- 宿泊の予約を受けた担当者と前日の確認の担当者が違うと、同じ予約が二度書かれることがある
- 前日の夕方、フロントが便ごとに人数を足し、荷物の多い組と車いすの有無を拾う
- 定員を超える便があれば、ワゴン車を足すか、宿泊客に電話して前後の便に替えてもらう
- 備考を読み、運転手に伝えるべきことを口頭で伝えるか、送迎表の端に書く
- 便ごとに送迎表を清書して運転手に渡す
- 当日の変更(電車の遅れ、人数の増減)は、フロントが運転手の携帯に電話する
(a)書き写しと清書が二度ある。 受けたときに1回、前日の夕方に便ごとに並べ直して1回。同じ内容を二度書く時間が、1件3分のうち半分を占めます。
(b)定員と荷物は、足し算の見落としで超える。 大人と子どもと乳幼児の数え方、大型の荷物の数、車いすを載せると減る座席。紙の上の足し算は、繁忙期の夕方に間違えます。 駅で乗り切れない組が出ると、運転手が宿に電話し、2往復になります。
(c)備考は、運転手に届かない。 「杖をついている」「ペットのキャリーがある」「駅の西口で待ちたい」。受けた担当者は分かっていても、清書のときに省かれ、運転手は駅で初めて知ります。
- 【人】 宿泊客が、予約の確認メールにあるリンクから Google フォームで送迎を申し込む(電話で受けたものはフロントが同じフォームに入れる)
- 【自動】 フォームの送信をきっかけに Apps Script が動き、宿泊予約の番号で台帳を引いて、二重の申込みでないかを確かめる
- 【自動】 便ごとの人数(大人・子ども・乳幼児)、大型の荷物の数、車いす・ベビーカーの数を足し、定員と荷物の目安と比べる
- 【自動】 備考がある予約は、備考と便の情報を Claude API に渡し、運転手向けのメモとフロントへの印を JSON で受け取る
- 【自動】 定員超え・荷物超え・フロントへの印がある予約を、フロントの確認の一覧に載せる
- 【人】 フロントが確認の一覧だけを見て、電話で確かめるか、便を替えるか、ワゴン車を足すかを決める
- 【自動】 前日の夕方に、便ごとの運行表(乗る組、人数、荷物、メモ)をシートに作る
- 【人】 フロントが運行表を見て、車の割り当てを決めて運転手に渡す
6番目でフロントが開くのは、印の付いた予約だけです。 定員に収まり、備考の無い予約は一覧に載りません。全件を人が読み直す設計にすると、30.0時間はほとんど減りません。
7番目の運行表で、AI が書くのはメモの欄だけです。 人数、荷物の数、便の時刻、名前は Apps Script が台帳とフォームから差し込みます。AI が数を書き換える経路を作りません。
02今回想定するシステム構成
宿泊客(確認メールのリンク)/フロント(電話で受けた分) │ Google フォーム(予約番号・便・人数・荷物・車いす・備考) ▼【トリガー】フォームの送信(回答をスプレッドシートに記録) Google Apps Script(送信のたび) ├──▶ 宿泊予約の番号で台帳を引き、二重の申込みを確認(ロックで1件ずつ) ├──▶ 便ごとの人数・荷物・車いすを足し、定員と比べる ▼ Claude API ── 備考を運転手向けのメモにし、フロントへの印を JSON で返す ▼ フロントの確認の一覧(スプレッドシート) ▼【トリガー】前日の16時台(時間主導型のトリガー) Google Apps Script ── 便ごとの運行表を作る ▼ 【フロントが車の割り当てを決め、運転手に渡す】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 実行環境 | Google Apps Script | Power Automate、Make |
| 生成AI | Claude API(Messages API、構造化出力) | OpenAI API |
| 受付 | Google フォーム(回答をスプレッドシートに記録) | - |
| 保管 | Google スプレッドシート(送迎の台帳、便と車の表、確認の一覧、運行表、処理ログ) | - |
新しく足すのは、フォームと Apps Script と、いくつかのシートだけです。 宿泊予約の管理の仕組みには書き込みません。送迎の台帳は別のシートに持ち、宿泊予約の番号でつなぎます。 宿泊予約の仕組みから毎日書き出す到着予定の一覧を、台帳の照合に使います。
便と車の表に、定員と荷物の目安を持たせます。 マイクロバスとワゴン車それぞれの乗車定員、大型の荷物を何個まで積めるか、車いすを載せたときに減る座席の数です。この数は宿が実際の車で確かめて決めるもので、この記事の数字は例です。
生成AIは Claude API を想定します。 送迎を申し込む宿泊客には家族連れの子どもも含まれますが、AI を使うのはフロントの仕組みで、宿泊客が AI とやり取りするわけではありません。 それでも、子どもの年齢や持病のような記載が備考に入りうるので、渡す範囲は第13章のとおり絞ります。
03どうやって実装するのか
処理の起点を決める
1つ目は、フォームの送信です。 Apps Script のインストール型のトリガーには、Google フォーム側の送信のトリガーと、回答先のスプレッドシート側の送信のトリガーの2種類があります。スプレッドシート側を使い、回答の行が書かれた後で動かします。 電話で受けた予約も、フロントが同じフォームに入れます。入口を1つにしないと、紙で受けた予約が運行表から漏れます。
2つ目は、前日の夕方の時間主導型のトリガーです。 翌日の便ごとに運行表を作ります。公式のページでは、時間主導型のトリガーの時刻は少しずれることがあり、9時に設定すると9時から10時のあいだに動くとされています。運転手に渡すのが17時なら、16時台に設定し、17時までに必ず終わっている形にします。
3つ目は、当日の朝の時間主導型のトリガーです。 前日の夕方以降に入った申込みと取り消しを拾い、運行表を作り直します。作り直したときは、前の版との差だけをフロントに知らせます。
インストール型のトリガーは、作った人のアカウントで動くとされています。フロントの共用のアカウントで作ります。 担当者個人で作ると、その人の退職で止まります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 送迎の申込み | 宿泊予約の番号、往路・復路、便、大人・子ども・乳幼児の人数、大型の荷物の数、車いす・ベビーカーの有無、備考 | フォームの回答のシート |
| 到着予定の一覧 | 宿泊予約の番号、代表者の名前、宿泊日、人数 | 宿泊予約の仕組みから毎日書き出したシート |
| 便と車の表 | 便の時刻、出発地、使える車、乗車定員、荷物の目安、車いすを載せたときの座席 | 便と車の表のシート |
| メモの決まり | 運転手に伝える事柄の種類と書き方(待ち合わせ場所、歩行の補助、大きな荷物、動物、遅れの連絡) | メモの決まりのシート |
質を決めるのは、下の2つです。 便と車の表に荷物の目安が無ければ、人数が定員に収まっていても荷物で積めない便を拾えません。メモの決まりが無ければ、AI がどの事情を運転手向けとして拾うかが毎回変わります。
メモの決まりは、運転手とフロントで作ります。 「待ち合わせ場所が改札と違う」「歩行に補助が要る」「長さのある荷物」「ペットのキャリー」「遅れたときの連絡の仕方」など、運転手が駅で知っておきたい種類を並べます。 料理の好みや記念日のように、送迎に関係しない備考は運転手向けにしません。
データの取得方法を決める
フォームの回答は、送信のイベントから受け取ります。公式のページでは、スプレッドシート側の送信のイベントは、質問の名前と値をまとめた namedValues、書き込まれた範囲を表す range、シートの並びどおりの values などを持つとされています。質問の名前で値を取る namedValues を使います。 フォームに質問を足しても、列のずれで値を取り違えません。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 申込みの中身 | 送信のイベントの namedValues | 便・人数・荷物・備考 |
| 代表者の名前と宿泊日 | 到着予定の一覧を宿泊予約の番号で引く | 運行表の目印と、日付の照合 |
| 同じ予約の申込み | 送迎の台帳を宿泊予約の番号と往復で引く | 二重の申込みの確認 |
| 便の定員と荷物の目安 | 便と車の表 | 定員超え・荷物超えの判定 |
同時の送信に備えて、台帳に書く部分を1件ずつにします。 公式のページでは、LockService はコードの一部への同時のアクセスを防ぐもので、getScriptLock() はどの利用者が動かしたかにかかわらず同時の実行を止めるとされています。予約の確認メールを一斉に送った直後は、申込みが重なります。 同じ便の人数を足して書き込むまでをロックで囲まないと、2件が同時に「定員に収まる」と判定されます。ロックは waitLock か tryLock を呼んで初めて取れるとされています。
AIへ渡す前に整形する
- 宿泊予約の番号を確かめる … 到着予定の一覧に無い番号は、AI に渡さずフロントの確認の一覧に載せます
- 日付を照らす … 往路の便の日付が宿泊日と、復路が出発日と合うかを見ます
- 二重の申込みをまとめる … 同じ番号・同じ往復の申込みが2件あれば、後のものを正とし、前のものに「置き換え済み」と書きます
- 人数を足す … 便ごとに大人・子ども・乳幼児を分けて足し、乗車定員と比べます。乳幼児を定員にどう数えるかは、宿が決めて便と車の表に書いておきます
- 荷物と車いすを足す … 大型の荷物の数と車いすの数を足し、荷物の目安と、車いすを載せたときの座席と比べます
- 備考を整える … 空の備考、「特になし」「なし」だけの備考は AI に渡しません
- 名前と連絡先を外す … AI に渡す前に、代表者の名前・電話番号・メールアドレスを外し、宿泊予約の番号だけにします。備考の中に書かれた電話番号も、数字の並びを見て伏せます
4番目と5番目は、すべて Apps Script が数で決めます。 定員に収まるかを AI に判定させると、子どもの数え方や車いすの扱いで揺れます。AI に渡すのは、この結果を添えて、メモの文脈を分からせるためです。
AIに処理させる
させるのは、備考を読んで、運転手向けのメモを1〜2行で書くことと、フロントが確かめるべき事柄に印を付けることです。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| 待ち合わせ | 改札以外の場所、目印の服装などを運転手向けに短く書く | 場所が曖昧なら front_check |
| 歩行・介助 | 杖・歩行器・抱っこ紐など、乗り降りで気を付けることを書く | 介助の程度が分からなければ front_check |
| 荷物 | 楽器・ゴルフバッグ・ベビーカーなど、数に出ない大きさを書く | 大きさが書かれていなければ推測しない |
| 動物 | ペットの同伴の有無と、キャリーかどうかを書く | 宿の受入れの可否は判断しない |
| 時刻のずれ | 「遅れたら次の便」「到着が17時50分」などを拾い、フロントに印を付ける | 便の時刻と合わなければ front_check |
| 送迎に関係しない事柄 | 料理・記念日・部屋の希望はメモにしない | 宿泊の担当へ回す印だけ付ける |
右端の front_check は、フロントが電話で確かめるための印です。 AI が迷ったものをメモにしてしまうと、運転手が駅で間違った前提で待ちます。迷ったら書かずに、フロントに回します。
| させないこと | 理由 |
|---|---|
| 人数・荷物の数の計算 | Apps Script が足し算で決める |
| 定員に収まるかの判定 | 便と車の表の数で決める |
| 便を替える、車を足す判断 | フロントが宿泊客と話して決める |
| ペットや車いすの受入れの可否 | 宿の決まりで、フロントが答える |
| 宿泊客への返信の作成 | 送迎の確定はフロントが電話かメールで伝える |
| 健康の状態の推測 | 「杖」は書いても、病名や体の状態の推測は書かない |
6行目を明記しないと、AI は「足が不自由な方」のように言い換えます。 運転手に要るのは「乗り降りで手を貸す」という行動で、宿泊客の体の状態を表す言葉ではありません。
指示内容を固定する
あなたは温泉旅館のフロントで、送迎バスの運転手に渡すメモを作る立場です。
渡された備考と便の情報だけを見て書いてください。推測で埋めないでください。
【あなたがすること】
1. 備考から、運転手が駅や宿の前で知っておくべき事柄を拾い、
driver_memo に1〜2行で書く
2. フロントが宿泊客に確かめるべき事柄があれば、front_check に入れる
【運転手向けにする事柄(メモの決まり)】{memo_rules}
【書き方】
- 運転手がとる行動で書く(「改札を出た西口のロータリーで待つ」
「乗り降りの際に手を貸す」「後部の荷室に長い荷物を積む」)
- 1行は30文字程度まで。敬語は要らない
- 数(人数・荷物の個数)は書かない。数は別の欄に入る
【厳守事項】
- 人数、荷物の数、定員に収まるかを判定し直さないでください。
- 便を替える、車を足す、といった結論を書かないでください。
- ペット、車いす、大きな荷物を受け入れられるかを判断しないでください。
- 病名、障害、体の状態を表す言葉を書かないでください。
備考に書かれていても、運転手がとる行動だけを書いてください。
- 料理、記念日、部屋の希望など、送迎に関係しない事柄は
driver_memo に入れず、other_dept に true を付けてください。
- 備考の時刻が便の時刻と合わないときは、front_check に入れてください。
- 場所や程度が曖昧なときは、driver_memo に書かず front_check に入れてください。
- evidence には、根拠にした備考の文をそのまま写してください。
【便の情報】{trip_info}
【確かめ済みの結果】{checked_facts}
【備考】{remarks}
「数は書かない」を入れないと、AI はメモに「3名様、スーツケース2個」と書きます。 その数が台帳の数と食い違うと、運転手はどちらを信じるかで迷います。数の出どころを1つにするための一文です。
「行動で書く」は、運転手が運転席で読む紙だからです。 「お祖母様がご高齢のため」と書かれても、何をすればよいかは分かりません。「乗り降りの際に手を貸す」なら、駅で迷いません。
出力形式を固定する
Claude API の構造化出力で、次の形の JSON を受け取ります。 公式のページでは、output_config.format に type: "json_schema" を指定し、オブジェクトには additionalProperties: false を付けることとされています。
{
"booking_id": "",
"driver_memo": [
{ "category": "meeting_point | mobility | cargo | animal | timing",
"text": "",
"evidence": "" }
],
"front_check": [
{ "reason": "unclear_place | unclear_assist | time_mismatch | other",
"question": "",
"evidence": "" }
],
"other_dept": false
}
1つ目の理由は、メモと印を別の欄に分けられることです。 driver_memo は運行表に、front_check はフロントの確認の一覧に、Apps Script がそれぞれ差し込みます。運転手の紙に、フロント向けの質問が混ざりません。
2つ目は、category で運行表の並びを決められることです。 待ち合わせ場所は便の欄の先頭に、乗り降りの補助は名前の横に、荷物は荷室の欄に、と運転手が目を向ける位置に置けます。
3つ目は、question をフロントの電話にそのまま使えることです。 「備考に到着が17時50分とありますが、駅発の便は17時30分と18時30分です。どちらにしますか」のような1文が、確認の一覧に並びます。
数値の最小値・最大値の制約はスキーマに書けないとされています。 数を AI に返させない設計が、ここでも効きます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| フォームの回答のシート | スプレッドシート側の送信のトリガー | 申込みを受け取る |
| 到着予定の一覧 | スプレッドシートの読み取り | 代表者の名前と宿泊日を引く |
| 送迎の台帳 | 書き込み(ロックで1件ずつ) | 申込みと照合の結果、AI のメモと印 |
| Claude API | UrlFetchApp.fetch | メモと印を受け取る |
| フロントの確認の一覧 | 書き込み | 定員超え・荷物超え・front_check の予約 |
| 運行表 | 時間主導型のトリガーで作るシート | 便ごとの乗る組・人数・荷物・メモ |
宿泊予約の管理の仕組みには書き込みません。 送迎の台帳は宿泊予約の番号でつながっているだけで、送迎の取り消しが宿泊の取り消しに波及する経路はありません。
Claude API の呼び出しは、失敗の応答でも止まらないようにします。 UrlFetchApp.fetch の muteHttpExceptions を true にすると、失敗の応答でも例外を投げないとされています。応答の番号を見て、失敗なら備考の原文を運行表のメモの欄にそのまま入れ、フロントの確認の一覧に載せます。 API のキーはスクリプトのプロパティに置きます。
運行表は、便ごとに1つの表にします。 列は「代表者の名前」「大人・子ども・乳幼児」「大型の荷物」「車いす・ベビーカー」「メモ」で、表の上に便の時刻・合計の人数・定員との差を置きます。印刷しても、タブレットで見ても読めるよう、1便を1画面に収めます。
【駅発 15:30 マイクロバス】 合計 21名(定員29)/大型の荷物 11個(目安12)/車いす 0
待ち合わせ:改札を出た西口ロータリー(1組は東口 → メモ参照)
代表者 大人 子 乳 荷物 補助 メモ
A様 2 1 0 2 - 東口の階段下で待つ。ベビーカーを荷室へ
B様 4 0 0 3 - -
C様 2 0 0 1 杖 乗り降りの際に手を貸す。前方の席へ
D様 3 2 1 3 ベビー 長い荷物(釣り竿のケース)を荷室の奥へ
…
フロントで確認中:E様(到着の時刻を確認中。決まり次第電話)
「フロントで確認中」の行を運行表に残すのは、運転手が駅で声をかけられたときに答えられるようにするためです。 確認中の組を運行表から消すと、駅で待っている宿泊客を運転手が知らないまま出発します。載せたうえで、確定していないことを分かる形にします。
人が確認する
フロントが開くのは、確認の一覧に載った予約だけです。 定員に収まり、備考が無いか、備考があっても front_check の無い予約は、運行表に載るだけです。
- 定員超え・荷物超えを先に見る … ワゴン車を足すか、宿泊客に電話して前後の便を勧めるかを決めます
front_checkを見る …questionを使って宿泊客に電話かメールで確かめ、台帳の備考を直しますother_deptの付いた予約を回す … 料理や記念日の備考を宿泊の担当に回します- 前日の夕方に運行表を見る … 車の割り当てを決め、メモが運転手に伝わる書き方になっているかを流し見ます
4番目でメモを直したら、直したことを残します。 「行動で書けていない」「送迎に関係ない事柄が入った」のような直しがたまると、メモの決まりと指示の文を直す材料になります。
目標は、600件のうちフロントが電話をかけるのを1割前後に抑えることです。 それを大きく超える月は、フォームの選択肢(待ち合わせ場所、荷物の種類)が実態に合っていません。選択肢を足せば、備考に書かれる事情そのものが減ります。
例外に対処する
| 起きること | 対応 |
|---|---|
| 宿泊予約の番号が見つからない | AI に渡さず確認の一覧へ。番号の打ち間違いが多いので、名前で探してから電話する |
| 同じ予約の申込みが2件ある | 後のものを正とし、前のものに「置き換え済み」と書く。人数が違えばフロントへ |
| 定員を超える便 | 確認の一覧に「定員超え」と超えた人数を載せる。ワゴン車を足すか便を替えるかはフロントが決める |
| 荷物の目安を超える便 | 「荷物超え」を載せる。人数が収まっていても見落とさない |
| 備考に宿泊予約と違う人数が書かれている | front_check に入れ、人数の欄は台帳の値のままにする |
| Claude API が失敗・時間切れ | 備考の原文をメモの欄に入れ、確認の一覧に載せる |
| 前日の夕方以降の申込み・取り消し | 当日の朝の作り直しで反映し、差だけをフロントに知らせる |
| 当日の電車の遅れ | この構成では扱わない。フロントと運転手が電話で決める |
最後の行を自動にしないでください。 遅れの連絡を受けて便を自動で替えると、運転手の手元の運行表と食い違います。当日の変更は、人が電話で決めて、決めた後に台帳を直します。
上限は、公式の表で実行時間が1回6分、トリガーの合計が Google Workspace のアカウントで1日6時間、外部への呼び出しが1日10万回です。 1日に20件ほどの申込みなら、いずれにも遠く届きません。
記録を残す
- 申込みごとの、フォームの回答の原文と受け付けた日時
- 照合の結果(宿泊予約の番号、二重の申込み、定員と荷物の判定)
- AI に渡した入力(名前と連絡先を外した後のもの)と、返ってきた JSON の全文
- フロントが直したメモと、直した理由
- 便ごとの運行表の版(前日の夕方の版と、当日の朝の作り直しの版)
- 便ごとの実際の乗車の人数(運転手が戻ってから書く)
5つ目で版を残すのは、運転手が持っている紙がどの版かを後から確かめるためです。 当日の朝に作り直したのに古い版で出発した、ということが起きます。版に作った時刻を入れ、運転手に渡すときに時刻を見せます。
最後の行は、便と車の表を直す材料です。 申込みの人数と実際の乗車の人数の差が大きい便は、申込まずに乗る宿泊客が多いか、取り消しが届いていません。
04実装レベルの3段階
最小構成は、メモの書き方を運転手と決めるための段階です。 600件には使えません。 半自動化で、1件3分が1分程度になります。 書き写しと清書が無くなり、フロントは印の付いた予約だけを見ます。この段階が本記事の想定です。 本格構成は、宿泊予約の仕組みの側の対応で決まります。 送迎の申込みを予約の仕組みで受けられるかは、使っている仕組みの機能によります。 フォームでの運用が定着してから、仕組みの会社に相談します。
05工数削減シミュレーション
導入後 600件 × 1分 ÷ 60 = 10 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 最寄りの駅や空港との間で、決まった時刻の送迎バスを毎日出している旅館・ホテル。送迎の予約を電話とメールで受け、フロントが紙の送迎表に書き写して運転手に渡している場合。団体や家族連れが多く、荷物の量や車いす・ベビーカーで便の割り振りが変わる場合。Google Workspace を使っている場合。
- 送迎の利用が1日数組で、フロントが覚えていれば足りる宿。予約の仕組み(宿泊予約の管理の仕組み)に送迎の受付と運行表の機能があり、使えている場合。送迎を外部のバス会社やタクシー会社に任せていて、運行表を宿が作らない場合。なお、運行の安全の管理(運転者の点呼・酒気帯びの確認・運転日誌)はこの構成の対象外です。
07最小構成で試す方法
- 先月の紙の送迎表から、備考が書かれた30件を選ぶ(うち数件は、駅で困ったことがあった組を入れる)
- 運転手に聞き、メモの決まり(駅で知っておきたい事柄の種類)を10項目ほど書く
- 手元の Claude の画面に、第7章のプロンプトと、メモの決まりと、1件ずつ備考と便の情報を貼る
- 出てきたメモを運転手に見せ、駅でそのまま使えるかを聞く
- 当時の送迎表に書かれていた内容と比べる
30件で見るのは、メモが運転手の行動で書けているかと、病名や体の状態の言葉が混ざらないかの2つです。 人数や定員はこの段階では試しません。
| 出てきた内容 | 判断 |
|---|---|
| 運転手が「これなら駅で迷わない」と言った | フォームと Apps Script の連携に進む |
| 体の状態を表す言葉が混ざった | 指示の厳守事項で直る。構成は有効 |
| 送迎に関係しない事柄までメモにした | メモの決まりの種類を絞る |
運転手に見せることを省かないでください。 メモの良し悪しを決めるのはフロントではなく、駅のロータリーで紙を見る運転手です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 電話で受けた予約がフォームに入らない | フロントも同じフォームに入れる。 紙の送迎表は廃止する |
| 確認メールの一斉送信の後に定員を超える | 便の人数を足して書くまでをロックで囲む |
| 乳幼児の数え方がフロントで違う | 便と車の表に数え方を書き、Apps Script はそれに従う |
| メモに数が入り、台帳と食い違う | 「数は書かない」を指示に入れ、数は別の欄に差し込む |
| メモに病名や体の状態の言葉が入る | 行動で書かせ、体の状態の言葉を禁じる |
| 料理や記念日の備考がメモに入る | other_dept で宿泊の担当に回す |
| 運転手が古い版の運行表で出発する | 版に作成の時刻を入れ、当日の朝の作り直しで差を知らせる |
| 前日の夕方のトリガーが遅れる | 渡す時刻の1時間前の枠に設定する |
| 宿泊予約の番号の打ち間違い | 見つからなければ AI に渡さずフロントへ。名前で探してから電話する |
上の2行が、この構成の失敗のほとんどです。 どちらも、運行表に載らない、または二重に載る予約が出る経路です。入口を1つにし、1件ずつ書くことを最初に決めます。
中ほどの3行は、運転手の信頼に関わります。 メモの数が台帳と違う、言い方が失礼、関係ない事柄が混ざる。一度でもあると、運転手はメモを読まなくなります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 宿泊客の名前・電話番号・メールアドレス、宿泊日、同行者の人数と年齢の区分、そして備考に書かれる歩行の補助や持病、子どもの様子です。備考は、宿泊客が自由に書くので、何が入るかを宿が決められません。
- 外部へ渡す範囲を、メモに必要なものまでに限る … Claude API に渡すのは、宿泊予約の番号、便の情報、確かめ済みの数、名前と連絡先を外した備考だけです。名前・電話番号・メールアドレスは渡しません
- 体の状態を AI に書かせない … 備考に病名や障害の記載があっても、運転手向けのメモにはとる行動だけを書きます。運行表は運転手と車内に置かれる紙です
- 運行表の置き場所と破棄を決める … 運行表には名前と人数と補助の要否が載ります。車内に置き忘れない、便が終わったら回収する、を運転手と決めます
- フォームの冒頭で、書いた内容を送迎の手配に使うことを伝える … 備考が運転手に伝わることを、宿泊客が知ったうえで書けるようにします
- 運行の安全の管理を代替しない … 運転者の点呼や酒気帯びの確認は、安全運転管理者の業務です。この構成は、誰が何を持って乗るかを運転手に渡すところまでです
誤りが起きた場合のリスクは、定員や荷物を超えて駅で積み残すことと、補助の要る宿泊客が運転手に伝わらないことの2つです。 前者は数を Apps Script で決めて防ぎ、後者は迷ったら front_check に回して防ぎます。迷ったときに書かない、ではなく、迷ったときにフロントへ回す、が設計の核です。
10まず何から始めるか
1週目:便と車の表とメモの決まりを作る
マイクロバスとワゴン車の定員、荷物の目安、車いすを載せたときの座席を、実際の車で確かめて表にします。運転手に聞き、駅で知っておきたい事柄を10項目ほど書きます。
2週目:30件で試す
先月の送迎表から備考のある30件を選び、手元の Claude の画面でメモを作らせます。運転手に見せ、駅でそのまま使えるか、失礼な言い方が無いかを最優先で見ます。
3週目:フォームを作る
宿泊予約の番号・便・人数・荷物・車いすの質問と、待ち合わせ場所や荷物の種類の選択肢を作ります。選択肢を足すほど、備考に書かれる事情が減ります。
4週目:フォームから運行表までをつなぐ
フォームと Apps Script をつなぎ、集計・照合・Claude API のメモ・運行表までを作ります。この時点では紙の送迎表も並行して作り、運行表と比べます。
2か月目: 紙の送迎表をやめ、電話の予約もフォームに入れる運用に切り替えます。フロントが電話をかけた件数を毎週数えます。3か月目以降: 実際の乗車の人数を書き、1件3分が何分になったかを実測します。運転手が運行表のメモを読んで駅で迷わなくなり、フロントの電話が1割前後に落ち着いた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 送信のトリガーに Google フォーム用とスプレッドシート用があること。時間主導型のトリガーの時刻がずれうること(9時の設定が9〜10時)。インストール型のトリガーが作成者のアカウントで動くこと | Google: Installable triggers | 2026-10-15 |
スプレッドシートの送信のイベントが namedValues・range・triggerUid・values を持つこと | Google: Event objects | 2026-10-15 |
LockService がコードの一部への同時のアクセスを防ぐこと。getScriptLock() が利用者にかかわらず同時の実行を止めること。ロックが tryLock/waitLock で取れること | Google: Class LockService | 2026-10-15 |
| 実行時間が1回6分、トリガーの合計実行時間が Workspace で1日6時間、URL Fetch の呼び出しが Workspace で1日10万回であること | Google: Quotas for Google Services | 2026-10-15 |
muteHttpExceptions を true にすると失敗の応答でも例外を投げないこと | Google: Class UrlFetchApp | 2026-10-15 |
構造化出力を output_config.format の json_schema で指定し、オブジェクトに additionalProperties: false が要ること。数値の最小値・最大値の制約に対応しないこと | Claude: Structured outputs | 2026-10-15 |
| 第9条の8(乗車定員11人以上の自動車は1台で安全運転管理者の選任が要ること)、第9条の10(点呼による確認、酒気帯びの確認と記録) | e-Gov 法令API: 道路交通法施行規則 | 2026-10-15 |
送迎車の運行の安全の管理と、宿泊客の個人情報の扱いは、自社の安全運転管理者と個人情報の担当に確かめてください。 本記事は、送迎の予約を受けて運行表を作る部分に絞って、公式のページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1743)についてのご相談はこちらから。
