Tabelog Tech Blog

食べログの開発者による技術ブログです

食べログのネット予約システムとは

この記事は 食べログアドベントカレンダー2022 の16日目の記事です🎅🎄

はじめに

こんにちは。食べログの予約チームの @aaknsk です。

2022年も残りわずかとなりましたね。
私はクリスマスと年末年始に食べたいものがたくさんあるものの
胃袋が全然足らなくて困っています。胃袋のストレージを追加したい...!

みなさん毎年この時期はこんなことありませんか?

・年末だし久しぶりに友達と飲みに行きたい
・会社の忘年会の幹事を任された(最近はあまりないかもしれませんが)
・年内に気になるあの人とデートに行きたい...

こんな時にレストランを予約して華麗なエスコートができると
スマートで素敵...! と周囲からの好感度が上がると思います。

ここで大活躍するのが食べログのネット予約です。

食べログのアプリやウェブサイトではネット予約の登録フォームが主に目につく箇所ですが
食べログのネット予約システムは実はとても奥深くて、複雑で、面白いんです。

本記事では食べログのネット予約システムについて紹介します。

少しでも食べログのネット予約システムについて興味を持って頂けたら嬉しいです。

食べログのネット予約システムとは

食べログのアプリやウェブサイトでは飲食店がいつ予約可能かチェックでき
直感的な操作でスムーズにネット予約することが可能です。

これは画像です。
(スマートフォン用ウェブサイトの画面:日付をタップすると時間選択モーダルが起動)

飲食店側は予約台帳システム(食べログノート)で予約を確認することができます。
※予約台帳:飲食店が予約を受けたときに 座席・来店日時・人数 などの情報を記録する帳簿です

これは画像です。
(食べログノートのタイムスケジュール画面)

タイムスケジュール上に各卓と予約情報が表示されるので
今日は大変そうだな...などとイメージしやすいですね。

私たち予約チームは食べログのユーザーが「ネットで予約を取る」
飲食店が「予約を管理する」ということに対して
最高なUIUXを提供できるよう日々取り組んでいます。

ネット予約システムの面白さ

ここからネット予約システムを開発する面白さをご紹介します。

①多忙な飲食店に喜んで使ってもらえる便利なサービスを作ること

営業時間中はもちろん営業時間外の仕込みや仕入れなどもあり飲食店はとっても忙しいです。

予約を紙で管理していると電話に出て予約をボールペンや鉛筆で紙に記入し
変更やキャンセルの度にどの予約か探して消してから書き直して
あ、来月分の台帳の印刷をしなきゃ、、、、orz

忙しい中で安心して喜んで使ってもらえるシステムであるために
システムの使いやすさ・分かりやすさが重要です。

例えば食べログノートには以下のような特徴があります。
●一目で今日の予約状況がわかるタイムライン
  →今日の流れが一瞬でイメージできる!

●ネット予約が入った時に自動で最適な卓に配席
  →7人だからこの席とこの席がいいかなと考えることから解放されます

●タイムスケジュール上の予約をドラッグアンドドロップで簡単修正
  →もうボールペンで二重線を引く修正からさよならバイバイ

さらに食べログ以外の飲食店向け予約サービスと予約データの連携ができる
サイトコントローラというサービスと公式に連携!

...他にもたくさん!!!

飲食店が予約の管理で抱えている様々な不便さを
ネット予約システムでどうやったら解消できるのか考え
使いやすく・分かりやすい形で実現していく過程はとても面白いです。

②飲食店ごとにある様々な営業形態に適応すること

・居酒屋のようなグループでの会食利用が多いお店
・コースのみで1部、2部制など決まった時間で料理を提供するお店
・1日○組限定の少人数のみが予約できるお店
などなど

「ネット予約」と一口に言っても利用する飲食店には様々な形態があります。
様々な形態を1つのシステムで表現しようとすると設定やデータ構造の複雑化に直面します。

また、ネット予約自体が店舗の運営業務に深く入り込んでいることもあり
安定稼働しないと飲食店に大きな影響を与えてしまいます。

「多様な形態」と「直感的なわかりやすさ」
一見同居できないようなニーズを満たすことを
既存機能の影響を考慮しながらミスなく設計開発すること。

容易ではないからこそ腕が鳴ります。

裏側の複雑なロジックはクラスや運用の設計を工夫し
直感的で分かりやすい操作性はフロントエンドの技術で実現しています。

③取り扱うデータ量がとても多い

食べログでは2ヶ月先までネット予約が可能です。
ある飲食店の1席の 予約ができる/できない のデータ量を考えてみます。

1日あたりの1席の予約可能な時間単位を 15分1コマ とし
10:00-22:00 までの営業とすると 48コマ あります。

そして1席の2ヶ月後(約60日)までの予約が可能なので

1席 ×2ヶ月(60) × 予約可能な48コマ = 2,880コマ

1席の2ヶ月分で 2,880コマ のデータが存在します。

これをお店全体で考えると100席あれば 288,000コマ のデータが存在することになります。
ネット予約が可能な店舗数が数万、数十万単位になるとさらに大量のデータが作成されます。

食べログではこれらのデータを2012年頃から扱い続けており
MySQLのINTのサイズをオーバーするテーブルが出ました。(BIGINTに変更することで難を逃れました)

増え続ける大量のデータや予約の状態などが多いためシステムは複雑化していきます。
既存機能に影響がなくパフォーマンスを考慮した機能改変・機能追加は中々大変です。
大規模なシステム故に思わぬ箇所に影響があり、見落としてしまう時もあります。

だからこそチームで協力し合い難易度の高い問題を解決して
良いシステムを作り上げていく醍醐味があります。

まとめ

予約チームはユーザーが「ネット予約を取る」、飲食店が「ネット予約を管理する」ということに対して
最高なUIUXを提供できるよう日々取り組んでいます。

多忙な飲食店に安心して喜んで使ってもらえるために
複雑なロジックや大量のデータを扱いながらも
使いやすくて分かりやすいシステムを開発することは簡単ではありませんが
だからこそ実現できた時の達成感は大きいです。

最後に

ご覧頂きありがとうございました。
少しでも食べログのネット予約システムについて興味を持って頂けたら嬉しいです。

予約チームでは一緒に働く仲間を募集しています。
気になった方は是非チェックしてみてください!

明日は @massaaaaan の「テストケースファーストでいこう」です。お楽しみに!