Media > AI活用ユースケース > 総務 > 民宿が電話で受けた予約を書き込む手書きの予約台帳を読み取り、日ごとの予約の一覧と食事の数・送迎の表を作る

民宿が電話で受けた予約を書き込む手書きの予約台帳を読み取り、日ごとの予約の一覧と食事の数・送迎の表を作る

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

電話で受けた予約を書き込む手書きの予約台帳を、スマートフォンで撮って読み取ります。日ごとの予約の一覧、夕食と朝食の数、迎えと送りの表を自動で作ります。

サマリー
生成AI
ChatGPT/Claude
AIサービス
AWS Textract/Azure AI/Google Document AI
連携・自動化
Google Apps Script/Python
対象業界
その他/宿泊
対象部門
総務
対象業務
データ入力・転記/台帳・マスタ管理
主な課題
人手が足りない/入力作業が多い/確認ミスが多い
AIで行う処理
読み取り(OCR)
主な効果
入力漏れ削減/対応スピード向上/工数削減
導入難易度
★☆☆☆☆
実装レベル
半自動化
費用感
API連携(中)
人間の確認
条件付き
現在工数
20h/月
AI導入後
4h/月
想定削減
80%
年間削減
192h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 女将が電話で予約を受け、壁のカレンダーに部屋を書き、台帳に1行書き込む
  2. 変更や取消の電話があれば、台帳の元の行に二重線を引き、新しい行を書くか、元の行に書き足す
  3. 毎晩、女将が台帳をめくり、翌日以降に泊まる予約を拾い出す
  4. 連泊の予約は、何日目に当たるかを数えて、日ごとの泊まりの一覧に書き写す
  5. 夕食・朝食・弁当の数を、大人と子どもに分けて数え、厨房の黒板に書く
  6. 迎えと送りの時刻と場所を、主人の手帳に書く
  7. アレルギーや記念日などの備考を、厨房の黒板の端に書く
導入後(After)
  1. 人女将が電話で予約を受け、台帳に1行書き込む(様式は第7章のとおり少し直す)
  2. 人女将が、その日に書き込んだり直したりしたページを、夕方と寝る前にスマートフォンで撮り、Google ドライブの受付のフォルダに入れる
  3. 自動毎日20時と23時に Apps Script が動き、受付のフォルダの画像を Document AI で読み取る
  4. 自動台帳の表の行を、ページと行の番号で前回までの予約と突き合わせ、新しい行と変わった行だけを拾う
  5. 自動生成AIが、食事・送迎・備考の書き方を決まった形にそろえる
  6. 自動Apps Script が、連泊を日ごとに展開し、朝食と送りの日付を1日ずらして、日ごとの予約の一覧、食事の数、送迎の表をスプレッドシートに作る
  7. 自動取消の印のある行、変わった行、決まらない値のある行を確認の一覧に出す
  8. 人女将が翌朝、確認の一覧だけを見て、必要なら台帳と見比べて直す
  9. 人主人が、翌日と翌々日の食事の数と送迎の表をスマートフォンで見て、仕込みと迎えの段取りを決める
各工程の詳しい説明を読む
  1. 女将が電話で予約を受け、壁のカレンダーに部屋を書き、台帳に1行書き込む
  2. 変更や取消の電話があれば、台帳の元の行に二重線を引き、新しい行を書くか、元の行に書き足す
  3. 毎晩、女将が台帳をめくり、翌日以降に泊まる予約を拾い出す
  4. 連泊の予約は、何日目に当たるかを数えて、日ごとの泊まりの一覧に書き写す
  5. 夕食・朝食・弁当の数を、大人と子どもに分けて数え、厨房の黒板に書く
  6. 迎えと送りの時刻と場所を、主人の手帳に書く
  7. アレルギーや記念日などの備考を、厨房の黒板の端に書く

(a)連泊が数えにくい。 3番で拾うのは「翌日に泊まる予約」ですが、台帳には泊まり始めの日しか書かれていません。 3日前から3泊の予約は、台帳の何ページも前にあります。拾い漏れた連泊の客の夕食が、当日の夕方になって足りないことに気づきます。

(b)朝食の日付がずれる。 5番で、宿泊日の行の朝食の印をそのまま数えると、その日の朝食ではなく、翌朝の朝食を数えたことになります。 慣れた女将は頭の中でずらしていますが、息子が代わりに書き出した晩にずれます。

(c)取消の二重線を見落とす。 2番で二重線を引いた行の下に、変更の後の行が書かれます。急いでめくると、二重線の行と新しい行の両方を数えます。 取消の行の送迎が手帳に残り、主人が誰もいない駅に迎えに行ったことがあります。

(d)送りの日を書き忘れる。 迎えは泊まり始めの日なので気づきますが、送りは最後の泊まりの翌日です。 連泊の客の送りは、台帳の行が何ページも前にあるので、書き出しから落ちます。

  1. 【人】 女将が電話で予約を受け、台帳に1行書き込む(様式は第7章のとおり少し直す)
  2. 【人】 女将が、その日に書き込んだり直したりしたページを、夕方と寝る前にスマートフォンで撮り、Google ドライブの受付のフォルダに入れる
  3. 【自動】 毎日20時と23時に Apps Script が動き、受付のフォルダの画像を Document AI で読み取る
  4. 【自動】 台帳の表の行を、ページと行の番号で前回までの予約と突き合わせ、新しい行と変わった行だけを拾う
  5. 【自動】 生成AIが、食事・送迎・備考の書き方を決まった形にそろえる
  6. 【自動】 Apps Script が、連泊を日ごとに展開し、朝食と送りの日付を1日ずらして、日ごとの予約の一覧、食事の数、送迎の表をスプレッドシートに作る
  7. 【自動】 取消の印のある行、変わった行、決まらない値のある行を確認の一覧に出す
  8. 【人】 女将が翌朝、確認の一覧だけを見て、必要なら台帳と見比べて直す
  9. 【人】 主人が、翌日と翌々日の食事の数と送迎の表をスマートフォンで見て、仕込みと迎えの段取りを決める

8番目が、この設計の分かれ目です。 女将が見るのは全部の予約ではなく、取消の印のある行、前回と変わった行、食事や送迎の書き方が決まらない行だけです。印の無い行は、読み取った値がそのまま一覧に入ります。

2番目で、撮るのは「その日に書いたページ」だけです。 同じページを何度撮っても、4番目でページと行の番号で突き合わせるので、予約が増えることはありません。

02今回想定するシステム構成

構成図
予約台帳(A4横・1ページ15行。手書きの表。ページと行の番号を印刷)
   │  その日に書いたページを、夕方と寝る前にスマートフォンで撮る
   ▼ Google ドライブの受付のフォルダ
   ▼【トリガー】毎日20時と23時に Apps Script が動く
Apps Script(取り込みの処理)
   ▼
Google Document AI(Form Parser)
   │   台帳の表の行とセル、夕・朝・弁当・取消の欄のチェック
   ▼
Apps Script ── ページと行の番号で前回までの予約と突き合わせる
   ▼
Claude API(構造化出力)── 食事・送迎・備考の書き方をそろえる
   ▼
Apps Script ── 連泊の展開、朝食と送りの日付のずらし
   ▼
Google スプレッドシート(予約の表/日ごとの一覧/食事の数/送迎の表/確認の一覧)
   ▼
【女将が確認の一覧だけ見る。主人がスマートフォンで翌日の段取りを見る】
役割想定する製品代替候補
OCRGoogle Document AI(Form Parser)Azure AI Document Intelligence(レイアウト モデル)、AWS Textract(英文の書類に限る。日本語の台帳には使えない)
生成AIClaude API(食事・送迎・備考の書き方のそろえ方。構造化出力)OpenAI API
連携Google Apps Script(読み取りの呼び出し、前回までの予約との突き合わせ、スプレッドシートへの書き込み)Python
集計Google Apps Script(連泊の展開、日ごとの食事の数、送迎の表)Python
保管Google ドライブ(台帳の画像)、Google スプレッドシート(予約の表と一覧)―

新しく作るのは、スプレッドシート1つと Apps Script 1本です。 スプレッドシートには、予約の表(1件1行)、日ごとの一覧、食事の数、送迎の表、確認の一覧の5つのシートを置きます。予約の表だけを Apps Script が書き、残りの4つは予約の表から作り直します。

土台は Document AI の Form Parser です。 公式の説明では、Form Parser はキーと値のペア、表、チェックボックスを取り出し、学習済みで追加の学習はできないとされています。公式のプロセッサ一覧では、日本語(ja)は手書きに対応する言語に入っています。台帳は表として読み、夕・朝・弁当・取消の欄は表の中のチェック欄として読みます。

Apps Script から Document AI を呼ぶには、Google Cloud のプロジェクトを用意します。 公式の説明では、Apps Script のプロジェクトはどれも Google Cloud のプロジェクトにつながっていて、既定のプロジェクトから自分で作った標準のプロジェクトに切り替えられます(元には戻せません)。Document AI を有効にした標準のプロジェクトに切り替え、ScriptApp.getOAuthToken() で得たトークンを付けて REST を呼びます。

処理する場所に、日本のリージョンはありません。 公式のプロセッサ一覧では、Form Parser の対応リージョンは us・eu・シンガポール(asia-southeast1)などです。台帳には予約した方の名前と電話番号が載ります。国外で処理することを、宿の個人情報の扱いの決まりで整理してから使います。

03どうやって実装するのか

Step1

処理の起点を決める

毎日20時と23時に、Apps Script が動きます。 公式の説明では、時間主導型のトリガーは、決まった時刻か決まった間隔で処理を動かせ、間隔は1分ごとから月に1回までとされています。20時は夕方までに受けた予約を、23時は夜の電話の予約を拾うためです。 主人が翌朝の仕込みを決める前に、一覧が新しくなっています。

撮るのは女将の仕事にします。 その日に書き込んだり、二重線を引いたり、書き足したりしたページを、夕方と寝る前に撮ります。ページの全体が入るように、台帳を開いて机に置き、真上から撮ります。 写真は Google ドライブのアプリで受付のフォルダに入れます。

処理の終わった画像は月ごとのフォルダへ移し、移すのは予約の表に書き終えたときだけにします。 受付のフォルダに残っている画像が、そのまま読み取れていないページです。急ぎの予約が入ったときは、Apps Script を手で動かせるように、スプレッドシートに「いま読む」のメニューを付けておきます。

Step2

入力データを集める

データ中身取得元
台帳の画像ページ番号。表の行(行番号、受けた日、宿泊日、泊数、名前、電話番号、大人、子ども、幼児、部屋、夕・朝・弁当の欄、送迎の欄、備考、取消の欄)受付のフォルダ
読み取り結果表の行とセル、表の中のチェック欄の状態、文字の位置Document AI
予約の表これまでに読み取った予約(ページと行の番号ごと)スプレッドシート
宿の決まり部屋の番号の一覧、送迎の場所の一覧(駅・バス停・港)、食事の区分(大人・子ども・幼児・弁当)スプレッドシートの設定のシート

質を決めるのは、台帳に印刷したページと行の番号です。 番号が無いと、同じページを2回撮ったときに、どの行が前回と同じ予約で、どの行が新しく書き足した予約かが分かりません。 台帳の様式を作り直すとき、左端に行番号を、右上にページ番号を印刷します。

送迎の場所の一覧も効きます。 台帳の送迎の欄には「駅」「〇〇駅」「バス」「港」と書かれます。宿の近くに駅が2つあるときは、一覧に「駅」がどちらを指すかを決めて書いておきます。 決まらない場所は、生成AIに選ばせずに確認に回します。

電話番号と名前は、読み取りには使いますが生成AIには渡しません。 生成AIに渡すのは、食事・送迎・備考の欄の文字だけです。

Step3

データの取得方法を決める

Apps Script から、Document AI の REST の process のメソッドを呼びます。 受付のフォルダの画像を読み、base64 にした内容と MIME タイプを付けて、processors/PROCESSOR_ID:process に送ります。トークンは ScriptApp.getOAuthToken() で得ます。 公式の説明では、このメソッドは実行しているユーザーの OAuth 2.0 のアクセストークンを返します。

取るものどこから何に使うか
ページ番号表の外の文字(pages[].formFields)行の識別
予約の行pages[].tables[] の bodyRows宿泊日・泊数・人数・部屋・送迎・備考
見出しの行headerRowsどの列が何かの見分け
夕・朝・弁当・取消の欄表の中のセルの ✓ と ☐食事と取消
文字の位置textAnchor の startIndex と endIndex疑いのあるセルの画像の切り出し

列は、見出しの行の文字で見分けます。 見出しには「宿泊日」「泊」「大人」「子」「夕」「朝」と印刷しておきます。列の順番で決めると、セルが1つ読み落とされた行で、子どもの人数が大人の欄に入ります。

夕・朝・弁当・取消は、表の中の四角い欄にします。 公式の説明では、表の中のチェックボックスは ✓(印あり)や ☐(印なし)のような文字で表されます。○で囲む書き方や「夕朝」と文字で書く書き方は、欄として読めません。 様式を変えた後も、備考に「夕のみ」と書かれることはあるので、そちらは生成AIで拾います。

空いたセルは、空として扱います。 公式の説明では、Form Parser は値の入っていないキーと値のペアを確実には読めないとされています。子どもの人数の欄が空のときは、0人とは見なさず、大人の人数だけ数えて、子どもの欄が空だったことを行に残します。

Step4

AIへ渡す前に整形する

  1. 1枚1ページの確認 … 公式のプロセッサ一覧では、Form Parser の同期の処理は1回15ページまでです。見開きで撮った画像は左右に分けます
  2. 向きと傾きの確認 … 横向きや斜めの画像は、向きを直してから送ります
  3. ページ番号の確認 … ページ番号が読めない画像は、行を突き合わせられないので、読み取った行を予約の表に入れずに確認に回します
  4. 前回との突き合わせ … ページと行の番号が同じ行が予約の表にあれば、セルごとに見比べ、変わったセルのある行だけを「変更」として拾います
  5. 日付のそろえ … 「10/24」「24日」「10月24日」を日付にそろえます。月が書かれていなければ、受けた日より後で最も近い月にし、補ったことを行に残します
  6. 泊数のそろえ … 「2泊」「2」「〜26」を泊数にそろえます。宿泊日と終わりの日が両方書かれていれば、食い違わないかを見ます
  7. 取消の確かめ … 取消の欄に印があれば、その行は数えずに確認の一覧へ出します

4番目が、同じページを何度撮っても予約が増えない仕組みです。 台帳は、1ページに十数件の予約を書き足していきます。同じページは、書き足すたびに何度も撮られます。 ページと行の番号で前回の行と比べ、新しい行は足し、同じ行は何もせず、変わった行は確認に回します。

5番目で月を補うのは、電話の予約では月を書かないことが多いからです。 「24日」とだけ書いた行が、今月の24日か来月の24日かは、受けた日から決まります。受けた日も書かれていなければ、決めずに確認に回します。

Step5

AIに処理させる

日付の計算、連泊の展開、朝食と送りの日付のずらし、数え上げは、Apps Script の規則で行います。 生成AIには、食事・送迎・備考の欄の書き方を、決まった形にそろえる仕事だけを渡します。

規則で見るもの印を付ける条件
取消取消の欄に印がある
変更ページと行の番号が同じで、セルが前回と違う
日付月が補えない、宿泊日と終わりの日が食い違う
人数大人の欄が空、または部屋の定員を超える
部屋部屋の番号の一覧に無い、同じ日に同じ部屋の予約が2件
食事欄の印と備考の書き方が食い違う
送迎場所が送迎の場所の一覧で1つに決まらない、時刻が読めない
生成AIにさせること中身
食事の書き方のそろえ方備考の「夕のみ」「素泊まり」「朝はおにぎり」「子どもは大人と同じ」を、夕・朝・弁当と子どもの食事の区分に分ける
送迎の書き方のそろえ方「駅16時迎」「帰り10時バス」を、迎えか送りか、場所、時刻に分ける
備考の分け方アレルギー・記念日・早朝の出発・到着が遅い・その他に分け、元の文を写す

朝食と送りの日付は、生成AIに付けさせません。 「2泊、朝食付き」から朝食の日を出すのは、宿泊日の翌日から泊数分という決まった計算です。生成AIに日付まで返させると、宿泊日の朝に朝食を付けて返すことがあります。 生成AIが返すのは「朝食あり」と「送りの時刻」までで、日付は Apps Script が付けます。

させないこと理由
日付の計算と展開決まった計算。Apps Script が行う
取消かどうかの判断取消の欄の印をそのまま使う
部屋の割り当て女将が壁のカレンダーで決める
子どもの食事の区分の決めつけ書かれていなければ「不明」で確認に回す
アレルギーの対応の判断厨房の主人がお客様に確かめて決める

4行目は、子どもの年齢だけが書かれている行で起きます。 「小1人(5才)」とあると、生成AIは子どもの料理と決めて返しがちです。大人と同じ料理を頼む家族もいるので、区分が書かれていなければ「不明」にします。

Step6

指示内容を固定する

あなたは民宿の予約台帳の書き方をそろえる補助です。
1件の予約の、食事の欄・送迎の欄・備考の欄の文字を、決まった形にしてください。

【渡すもの】
- 夕・朝・弁当の欄の印の有無
- 送迎の欄の文字
- 備考の欄の文字
- 送迎の場所の一覧

【食事】
- 欄の印と備考の書き方を見て、dinner・breakfast・lunch_box を
  yes / no / unknown で返す。
- 欄の印と備考の書き方が食い違うときは conflict を true にし、
  根拠にした語を evidence に写す。
- 子どもの食事の区分(kids_meal / same_as_adult / none)は、
  備考に書かれているときだけ返す。書かれていなければ unknown。
  年齢から決めない。

【送迎】
- 迎え(pickup)か送り(dropoff)か、場所、時刻に分ける。
- 場所は送迎の場所の一覧の名前で返す。1つに決まらなければ
  place_candidates に候補を並べ、place は空にする。
- 時刻は書かれたまま 24時間の形にそろえる。午前か午後か決まらなければ
  time を空にし、time_raw に元の文字を写す。

【備考】
- allergy・celebration・early_departure・late_arrival・other に分け、
  元の文をそのまま text に写す。言い換えない。

【厳守事項】
- 日付を書かない。泊数から日付を出さない。
- 部屋、料金、取消について何も書かない。
- 書かれていないことを補わない。読めない文字は「?」のまま残す。

【食事の欄】{meal_marks}
【送迎の欄】{transfer_text}
【備考の欄】{note_text}
【送迎の場所の一覧】{places}

「年齢から決めない」を明記しないと、5才は子どもの料理、12才は大人の料理と決めて返します。 宿によって区切りが違い、家族によって頼み方も違います。区分は、書かれたときだけ返させます。

構造化出力で、答えの形を固定します。 公式の説明では、Claude API の構造化出力は output_config.format に type: "json_schema" でスキーマを渡し、オブジェクトには additionalProperties: false が要ります。食事の値と備考の区分は enum で決まった値に限ります。人数の上限のような数の制約は、スキーマでは掛けられないので Apps Script の側で確かめます。

Step7

出力形式を固定する

{
  "meals": { "dinner": "yes", "breakfast": "no", "lunch_box": "yes",
             "kids_meal": "unknown", "conflict": true,
             "evidence": "朝はおにぎり" },
  "transfers": [
    { "kind": "pickup", "place": "〇〇駅", "place_candidates": [],
      "time": "16:10", "time_raw": "16:10" },
    { "kind": "dropoff", "place": "", "place_candidates": ["〇〇駅", "△△駅"],
      "time": "", "time_raw": "10時" }
  ],
  "notes": [
    { "kind": "early_departure", "text": "朝4時半出船" }
  ]
}

Apps Script は、この JSON と規則の結果から、予約の表の1行を作り、そこから日ごとの表を展開します。

シート1行の単位列
予約の表予約1件ページと行の番号、宿泊日、泊数、名前、人数、部屋、食事、送迎、備考、取消、確認の印
日ごとの一覧宿泊日×予約宿泊日、何泊目か、名前、部屋、人数、その晩の夕食
食事の数日×区分日、夕食(大人・子ども)、朝食(大人・子ども)、弁当、不明の数
送迎の表送迎1回日、迎えか送りか、時刻、場所、名前、人数

食事の数では、朝食と弁当を「宿泊日の翌日」に付けます。 送迎の表では、迎えを最初の宿泊日に、送りを最後の宿泊日の翌日に付けます。主人が見る翌日の表は、たとえば次のようになります。

【10月25日(土)の段取り】
泊まり:6組 19名(うち連泊の2日目 2組)
夕食:大人15・子ども3・区分不明1 → 1組(3号室)に要確認
朝食(24日泊の方):大人11・子ども2
弁当:4(早朝の出船 4時半)
迎え:〇〇駅 16:10 □□様 3名
送り:〇〇駅 10:00 △△様 2名
確認待ち:送りの駅が決まらない 1件
Step8

システムへ連携する

つなぎ先方式内容
Google ドライブApps Script が受付のフォルダを読む台帳の画像を集める
Document AIREST の process台帳を読み取る
Claude APIREST食事・送迎・備考のそろえ方
Google スプレッドシートApps Script が書く予約の表と4つのシート
主人のスマートフォンスプレッドシートのアプリで見る翌日の段取り

予約サイトの予約は、この仕組みに入れません。 月に数件なので、いまどおり女将が台帳に書き写します。台帳を予約の元の記録にしておけば、仕組みが見る先は1つで済みます。

壁のカレンダーは、そのまま残します。 電話を受けながら空いた部屋を見るのは、カレンダーのほうが速いからです。日ごとの一覧とカレンダーが食い違ったら、どちらかの書き漏れです。 確認の一覧に「同じ日に同じ部屋の予約が2件」が出たら、カレンダーを見て直します。

Step9

人が確認する

  1. 取消の印のある行を先に見る … 取消の後に書き直した行があるか、台帳で見ます。取消の行の送迎が残っていないかも見ます
  2. 変わった行を見る … 前回と違うセルを見て、書き足しか読み違いかを確かめます
  3. 決まらない値を見る … 送りの駅、午前か午後か、子どもの食事の区分を、台帳と電話番号で確かめます
  4. 同じ部屋の重なりを見る … 壁のカレンダーと見比べます

直したときは、スプレッドシートの予約の表の行を直し、直したことの印を付けます。 直した行は、次に同じページを撮っても上書きしない決まりにします。台帳のほうも、同じように直しておきます。

目標は、240件をならして1件1分です。 確認の一覧に出るのは1日に数件という想定です。

Step10

例外に対処する

起きること対応
画像がぼけていて読めない読み取りに送らず、スプレッドシートの上に撮り直しの知らせを出す
ページ番号が読めない行を入れずに確認に回す
見開きで撮った左右に分けてから読む
取消の欄に印があり、書き直しの行が無い取消として数えず、確認に回す。電話で取消を受けたかを女将が思い出す
子どもの人数の欄が空0人とせず、大人だけ数えて確認に回す
送りの駅が決まらない送迎の表に「場所未定」で出し、前日までに電話で確かめる
予約サイトの予約を台帳に書き写し忘れた部屋の重なりで気づくことがある。予約サイトの管理の画面で確かめる
Document AI が応答しない受付のフォルダに残し、次の時刻に再び読む

4行目の「取消の印だけで書き直しが無い」は、取消か、書き直しを忘れたかが分かりません。 取消として扱うと、変更のつもりだったお客様の夕食が無くなります。数えないまま確認に回し、女将が決めます。

Step11

記録を残す

  • 台帳の画像と、撮った日時
  • Document AI が返した JSON の全文と、使ったプロセッサの版
  • 生成AIのそろえ方と、そのとき参照した送迎の場所の一覧
  • 予約の表の行の変わり方 … どのセルが、いつ、何から何に変わったか。人が直したか
  • 取消の行と、取消を確かめた日

4つ目は、「予約したのに部屋が無い」と言われたときに要る記録です。 いつどの行が変わったかを、撮った日時で追えます。紙の台帳は、毎年の常連の方の記録として残します。

04実装レベルの3段階

最小構成:台帳の画像を手でAIの画面に貼り、表を書き出させる / 1ページごとの読み取り
半自動化:上記+Apps Script で毎晩読み、前回と突き合わせ、日ごとの一覧・食事の数・送迎の表を作る / 読み取り、突き合わせ、展開、数え上げ
本格構成:上記+予約サイトの予約の取り込みと、前日の予約の方への確認の連絡の下書き / 予約の経路の一本化と前日の連絡

半自動化で、1件5分が1分になります。この段階が本記事の想定です。 台帳をめくって拾う作業、連泊と朝食のずらし、送迎の書き出しが無くなり、女将は確認の一覧を見るだけになります。 本格構成は、予約サイトの予約が増えてからにします。 月に数件のうちは、台帳に書き写したほうが早く、仕組みの見る先を増やすと、二重に数える経路が増えます。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
2 名
月間件数
240 件
1件あたり現在時間
5 分
1件あたり導入後時間
1 分
現在  240件 × 5分 ÷ 60 = 20 時間/月
導入後 240件 × 1分 ÷ 60 = 4 時間/月
月間削減時間
16h
削減率
80%
年間削減時間
192h
年間金額換算(時間単価2,000円)
38万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 客室が10室前後までの民宿・ペンション・小さな旅館で、予約の多くを電話で受けて紙の予約台帳に書き、毎晩か毎朝、台帳から翌日以降の予約の一覧、食事の数、駅やバス停への送迎の予定を手で書き出している宿。釣り・海水浴・スキー・登山の客が多く、連泊や素泊まり、早朝の出発の弁当など、予約ごとに食事と送迎の条件が違う場合。Google のアカウントとスプレッドシートを使っている、または使い始められる場合。
向いていない
  1. 予約の大半が予約サイトや自社のホームページから入り、予約の管理のシステムで日ごとの一覧と食事の数が出ている宿。客室が数室で、予約の書き出しが毎日数分で終わる宿。電話の予約も最初から予約の管理のシステムに打ち込んでいる宿。なお、部屋の割り当て、予約を受けるかどうか、料金と取消の料金の決め方は、この構成では代替できません。

07最小構成で試す方法

  1. 先月の台帳から3ページを選ぶ(連泊、素泊まり、取消の二重線、送迎のある行を入れる)
  2. その3ページについて、当時作った日ごとの一覧と厨房のメモを出しておく
  3. 名前と電話番号の列を紙で隠して撮り、手元のAIサービスの画面に1ページずつ貼り付ける
  4. 「この台帳の表を、宿泊日・泊数・大人・子ども・夕・朝・弁当・送迎・備考の列で書き出してください。二重線の引かれた行は、取消の候補として印を付けてください。書かれていないものは『不明』としてください」と指示する
  5. 出てきた表から、手で日ごとの一覧を作り、当時のメモと突き合わせる

3ページは必ずやってください。 組む前に、「手書きの台帳が表として読めるか」と「二重線の行を取り違えないか」を確かめます。

出てきた内容判断
表が当時の書き出しと合ったForm Parser と Apps Script の連携に進む
二重線の行を有効な予約として出した様式が先。 取消の四角い欄を足す
列がずれて、子どもの人数が大人に入った様式が先。 罫線をはっきりさせ、見出しを印刷する

08実装時につまずきやすいポイント

問題対策
同じページを撮るたびに予約が増えるページと行の番号を印刷し、前回の行と突き合わせる
二重線の行を数える取消の四角い欄を足し、印のある行を数えない
朝食が宿泊日に付く朝食と弁当は翌日に付ける。日付は生成AIに付けさせない
連泊の送りが落ちる送りは最後の宿泊日の翌日に付ける
「24日」の月を取り違える受けた日から補い、補ったことを残す
子どもの欄が空で0人になる空は空として確認に回す
「駅」がどちらか分からない送迎の場所の一覧で決め、決まらなければ人へ
人が直した行が次の撮影で戻る直した行は上書きしない

上の4行が、この構成の失敗のほとんどです。 どれも、台帳の1行を日ごとに展開するときの決まりを、仕組みに書いていないことから出ています。 女将の頭の中にあったずらし方を、Apps Script の規則に移すのがこの構成の仕事です。

下の4行は、手書きの台帳の書き方の揺れから出ています。 様式を直しても書き方は揺れるので、決まらないものは決めずに女将へ回します。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 予約した方の名前と電話番号、宿泊日と人数、子どもの人数と年齢、アレルギーなどの備考です。

  1. 国外のリージョンで処理することを整理する … Form Parser の対応リージョンに日本はありません。宿の個人情報の扱いの決まりに照らしてから本番の台帳を回します
  2. 生成AIに渡す範囲を絞る … 食事・送迎・備考の欄の文字だけを渡し、名前と電話番号は渡しません
  3. スプレッドシートの共有を宿の人に限る … 名前と電話番号が載る予約の表は、女将と主人と息子のアカウントだけで共有します
  4. アレルギーの対応を一覧に任せない … 一覧はアレルギーの記載があることを知らせるだけです。何を除くかは、主人がお客様に確かめて決めます
  5. 紙の台帳を元の記録として残す … 直しはスプレッドシートと台帳の両方で行います

誤りが起きた場合のリスクは、来るお客様の食事や迎えが無いことと、来ないお客様の迎えに行くことの2つです。 前者は連泊と翌朝のずらしを誤ると起き、後者は取消を見落とすと起きます。どちらも、展開の決まりを規則に置くことと、取消の欄で数えないことで防ぎます。

10まず何から始めるか

1週目:台帳の様式を作り直す

ページと行の番号、見出し、夕・朝・弁当・取消の四角い欄を印刷した台帳を作ります。送迎の欄は「迎え」「送り」に分け、場所と時刻を書く枠にします。 送迎の場所の一覧も作ります。

2週目:3ページで試す

先月の台帳から3ページを選び、名前と電話番号を隠して手元のAIサービスで表を書き出させます。二重線の行を有効な予約として出していないかを最優先で見ます。

3週目:Google Cloud とスプレッドシートを準備する

Google Cloud のプロジェクトを作り、Document AI の Form Parser を用意します。スプレッドシートに5つのシートを作り、Apps Script のプロジェクトを標準のプロジェクトに切り替えます。国外で処理することの扱いも、この週に決めます。

4週目:毎晩の処理をつなぐ

Apps Script で受付のフォルダを読み、Form Parser を呼び、予約の表に書くところまで作ります。この時点では、女将のいまの書き出しと並べ、翌日の夕食と朝食の数が合うかを毎晩見ます。

2か月目: 日ごとの一覧、食事の数、送迎の表を足し、主人がスマートフォンで見始めます。3か月目以降: 1件5分が何分になったかを数えます。繁忙期の夜に書き出しが要らなくなった時点で、この構成は運用に乗ったと言えます。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-29/最終更新:2026-10-29
確認した内容情報源確認日
Form Parser の言語の表で、日本語(ja)が手書きに対応とされていること。Form Parser の同期の処理が15ページまでであること。対応リージョンが us・eu・asia-southeast1 などで、日本が含まれないことGoogle Cloud: Processor list2026-10-29
Form Parser がキーと値のペア・表・チェックボックスを取り出し、学習済みで追加の学習ができないこと。値の入っていないキーと値のペアを確実には読めないことGoogle Cloud: Form Parser2026-10-29
表が headerRows と bodyRows で表され、表の中のチェックボックスが ✓ や ☐ の文字で表されること。フォームの項目が formFields で返ること。文字の位置が textAnchor の startIndex と endIndex で示されることGoogle Cloud: Handle the processing response2026-10-29
Apps Script のプロジェクトが Google Cloud のプロジェクトにつながり、既定のプロジェクトから標準のプロジェクトに切り替えられ、元には戻せないことGoogle Apps Script: Google Cloud projects2026-10-29
時間主導型のトリガーが、決まった時刻か間隔で処理を動かせ、間隔が1分ごとから月に1回までであることGoogle Apps Script: Installable triggers2026-10-29
ScriptApp.getOAuthToken() が実行しているユーザーの OAuth 2.0 のアクセストークンを返すことGoogle Apps Script: Class ScriptApp2026-10-29
Claude API の構造化出力を output_config.format に type: "json_schema" で指定すること。オブジェクトに additionalProperties: false が要ること。数値の制約に対応しないことClaude Platform Docs: Structured outputs2026-10-29

宿泊の受付の決まり、宿泊者名簿の扱い、取消の料金の決め方は、自治体の窓口と宿の決まりに確かめてください。 本記事は上の公式の情報で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-2243)についてのご相談はこちらから。

AI活用について相談する
目次