見出し画像

モバイルオーダー一体型 POS レジで飲食店を支えるダイニーの障害対策:第一回 POS レジの重要性と障害の原因

こんにちは。whatasoda です。
ダイニーではプロダクトの開発に用いるプログラミング言語を TypeScript に統一しており、事業の中核であるモバイルオーダー一体型オンライン POS レジのアプリケーションを React Native で開発しています。
モバイルオーダー一体型オンライン POS レジにおいて何が障害となり得るのか、ダイニーがこれまでそれらの障害とどのように向き合ってきたのか、これから先どのように向き合っていくのかについて、連載記事でまとめていきます。
初回となる今回は、レジがダイニーと飲食店それぞれにとって如何に重要なのか、そして障害が起きるとどれだけの影響があるのかという、障害対策の前提知識の部分についてご説明します。

POS データは飲食店の要

ダイニーは「飲食をもっと楽しく面白く」というミッションのもと「すべての飲食インフラになる」ことをビジョンとし、日々プロダクト開発をしたり顧客がサクセスできるようサポートしたりしています。現在はモバイルオーダー一体型 POS レジ + CRM を主力のサービスとして提供していますが、 10 年後の未来には飲食に関わる全ての領域に進出し、「ダイニーがあれば飲食店に必要なものがすべて揃う」という状態を目指しています。

すべてをダイニーのサービスで実現できるようになると、領域をまたいだデータを連携することによる新しい価値がたくさん生まれてきます。例えば、シフトや勤怠の情報を POS の売上データと結びつけることで特定のスタッフが売上アップに貢献していることが分かるようになるかもしれません。それをスタッフの評価に反映する仕組みがあればスタッフの働くモチベーションの向上、ひいては接客の質が向上してさらなる売上アップに繋がるかもしれません。
いかなる領域同士を結びつけるとしても、 POS データとの連携は避けて通ることはできません。これは、飲食店が売上を得る主な方法は飲食店として営業することであり、売上情報や出数情報(どの料理がどれぐらい注文されたか)は全て POS 上に記録されているためです。いくら他の領域で画期的な機能を生み出したとしても、それが飲食店のさらなる成功にどれぐらい寄与できたのかを確かめるためには POS のデータが必要なのです。
POS のデータを利用する方法はいくつかありますが、ダイニーでは自社で POS レジのアプリケーションを開発してデータを収集・蓄積しています。そのため、ただデータを収集・蓄積するだけではなく、他領域と連携した結果を出力するチャネルとしての活用も可能です。

ダイニーのレジアプリの特徴

今日飲食店で利用される POS レジはいくつかの種類に分類することができます。

従来の POS レジ

20年前にレジと聞いて多くの人がイメージする、大きな機械にお金を入れる引き出しがついている、あのレジです。

製品による違いはありますが、基本的にはインターネットに接続せずに単体で稼働するように作られているため、サーバーに問題が発生したり、店舗からサーバーまでのネットワークに問題があったとしても滞りなく動作します。店員が来店客のいるテーブルから遠隔で注文を入力できるように、ハンディという持ち運び可能な端末との連携をローカルネットワークあるいは独自の通信方法で実現したり、同様にキッチンプリンターと通信することで注文内容をキッチンに自動的に伝達できるものもあります。
長年にわたって多くの飲食店がこのレジを前提としてオペレーションを構築しているため、新しいレジを開発する際のお手本でもあり越えるべき壁でもあります。
外的要因による動作の阻害が起きにくいため、基本的には非常に安定している従来の POS レジですが、インターネットに接続していないものが多いため POS 情報をリアルタイムにどこかに連携したり、インターネット上の何らかのデータを POS 側に連携するなどの機能を実現する難度は高めです。また、機能のアップデートなども遠隔で行うことができず、担当者が現地に赴いて作業することが必要となるため、不具合の修正や新機能の追加に数年かかってしまうということもあります。

オンライン POS レジ

近年、飲食店に限らず様々な小売店で見かけるようになったレジです。多くは iPad などのタブレット端末上のアプリケーションとして提供されています。
オンラインというだけあって、当然インターネットに接続することを前提として作られています。そのため、インターネット上にある他のサービスと連携するような機能の実現はかなり現実的です。アプリがどのように配信されているかにも依りますが、例えば iOS アプリとして配信されていれば、新しいバージョンを配信するだけでアップデートを浸透させることができます。
レジがオンラインであれば他の部分もオンラインで構築することが検討されるでしょう。従来の POS レジ同様にレジの端末が店内のハブとしてハンディやキッチンプリンターと連携しつつ、インターネットにはレジのみが接続するというオンライン POS レジも存在していますが、ハンディやキッチンプリンターがインターネットに接続することもできるため、レジとしての機能だけを持っているオンライン POS レジも存在しています。また、飲食店の業態によっては一般的な小売店向けのレジをそのまま転用できてしまうこともあるでしょう。
柔軟で新機能もどんどん追加できるオンライン POS レジですが、オンラインであるが故にインターネット接続に問題があったりサーバーに障害が起きていたりすると本来備えている機能は使えなくなってしまいます。そのため、そういった状況になっても端末の内部にデータを保存しながら最低限の運用ができるようにする機能が必要となります。でないと重要な POS のデータが失われるだけではなく、そもそも店舗の運営を続けることができなくなってしまいます。

モバイルオーダー一体型オンライン POS レジ

ダイニーの POS レジがモバイルオーダー一体型オンライン POS レジにあたります。基本的な部分はオンライン POS レジと同じですが、オンラインモバイルオーダーシステムが一体となっているという点で大きな違いを生んでいます。従来の POS レジでも実現できていたハンディからの注文だけではなく、来店客のスマートフォンからサーバーに送信された注文情報をインターネットを通じて取得することができます。
他社のオンライン POS レジでも、別で開発したモバイルオーダーシステムと連携することが可能なものはあります。しかしダイニーのように「一体となっている」からこそ実現できることがあると考えています。
ダイニーのモバイルオーダーはユーザーを識別できるため、その情報を活用して POS レジ側にこれまでなかった価値を生み出しています。例えば、今まさに飲食店にいる来店客が新規なのかリピーターなのかという情報を POS レジやハンディに表示することによってより良い接客に向けた取り組みが可能になっています。ダイニーの POS レジではこういった掛け算による価値の最大化ということが当たり前に、そしてクイックにできる状態にあるのです。
この、オンラインモバイルオーダーが一体となっている構成は大きな価値を生み出す一方でいくつかの課題をもたらします。今回のメイントピックである障害時への対策という観点でもこの構成が厄介な課題の原因になっています。

飲食店にとってレジの障害が如何に重大なのか

どのような障害にどのように向き合っていくのかについて触れるまえに、POS レジに障害が起きたときに飲食店がどうなってしまうのか整理します。
結論から言うと、レジが止まると飲食店は営業ができなくなります
今回は現在ダイニーが多く展開している居酒屋業態を例に考えていきます。居酒屋では料理を注文の度に提供しますが、会計は退店時にまとめて行われます。会計はもちろんレジで行いますが、それ以外にテーブル毎の注文情報を記録・管理する何かが必要になります。その管理が不正確だと来店客に誤った金額を請求してしまうことになるからです。飲食店向けの POS レジ開発では、このテーブル毎に注文を管理する何かについても考慮に加える必要があるのです。

ダイニーの場合はレジがオンラインモバイルオーダーと一体であることもあり、同じシステムの中で注文の管理も行っています。そしてそれらの情報を確認する最終的なユーザーインターフェイスはレジです。他社のレジでも内側の実装がどうであれ最終的なインターフェイスはレジであるものは珍しくありません。
さて、ここでレジ及び注文管理をするシステムに障害が発生した場合どうなるでしょうか。店舗に数テーブルしかなければ人力でなんとか注文を管理しながら料理を提供して会計時に正確な金額を請求するということが可能かもしれません。しかしほとんどの居酒屋はそのようなことが到底不可能な数のテーブルを有しています。
このとき影響を受けるのは会計だけではありません。注文を管理しているシステムが止まっているということは、その注文をキッチンへと伝える手段も止まっているということを意味します。普段であればキッチンプリンターなどから吐き出される注文情報の通りに調理をして提供すれば良い、調理に集中できる状態です(文字で書くと楽そうに見えるかもしれませんが、これはスタッフの方々の様々な工夫によって成り立っているオペレーションです)が、それを支えるシステムが止まってしまうとその状態は完全に崩壊してしまい、慣れないオペレーションで普段考えなくてもよかったことをいくつも考えなくてはいけなくなるのです。
このように飲食店運営のあらゆる面で普段とは異なる高負荷なオペレーションを強いられる状況で、しかも正確な金額を請求できるかも怪しい状況で店舗の営業を続けることは不可能です。せっかく来てくれたお客様に、自分が悪いわけでもないのに謝って帰ってもらうこともあります。

レジの稼働を阻害する障害の原因

ここまでで飲食店向けの POS レジの障害が如何にインパクトの大きいものであるかを理解していただけたかと思います。ダイニーではレジで障害が発生しないように最大限の取り組みを続けていますが、障害が発生する原因は1つではないため、まずは何が障害を引き起こすのかについて整理する必要があります。

レジアプリのバグ

他のいかなる要素が正常な状態であっても、あるいは他の障害に対する対策を打っていても、レジのアプリ自体に不具合があっては意味がありません。
ダイニーでは年あたり40回以上のリリースを行っています。そのなかで新しい機能についてはもちろんのこと、既存の機能についても念入りな QA (品質保証)を行うことでレジアプリのバグによる飲食店運営が阻害されてしまう事態を防いでいます。
先日、ダイニーの QA 組織に念願のマネージャーが JOIN しました。詳細はこちらの記事(“飲食”に全力でAll inしたい。飲食大好きな期待のQAマネージャーがくさんがダイニーを選んだ理由)をご覧ください。

ダイニーのシステムそのものの障害

ダイニーが提供しているサービスでは通常時、基本的に全ての処理をオンライン上で行っています。このようなサービスでシステムそのものに障害が発生してしまうとサービスの提供そのものが行えなくなってしまうことがあります。システムの障害に繋がる事象の例を挙げます。

  • データベースの障害

    • 許容可能な処理量を上回ってしまう場合

    • データベースへの接続に問題がある場合

  • バックエンドサーバーの障害

    • オートスケーリング時の新規インスタンス立ち上げの過程などに問題がある場合

    • 実装の不備などによりレイテンシが伸びてしまう場合

  • ネットワークの障害

    • 端末からサーバーまでの接続におけるネットワークインフラ上の問題があり、通信が滞ってしまう場合

ダイニーでは複数のデータベース、複数のバックエンドサーバーで1つのダイニーというサービスを構成しています。そのため、例えばレジが関連する機能にのみ障害が発生しているがモバイルオーダー自体は問題なく機能するというケースが起こり得ます。
モバイルオーダー及びキッチンプリンターが生きていればモバイルオーダーの注文がキッチンへと到達することになります。これにより料理の提供は可能になるかもしれませんが、レジで障害が起きているためレジがそれらの注文についてのデータを持っていないことがあります。つまり、レジ単体で会計をできるような機能があったとしても、提供した料理の注文が会計から漏れる可能性があるということです。このようなケースでは会計時に混乱を生んでしまい、オペレーションの負荷が上がります。
加えて、データの不整合という課題も発生することがあります。モバイルオーダーから注文された情報はデータベース上に記録されていますが、レジがそれを認識しないまま処理をすると、最終的にレジ内部に残るデータとデータベースに記録されたデータとの間で何らかの不整合が起きてしまうことがあるのです。このようなデータの不整合の問題は発生のパターンが非常に多いため対策を考える上で非常に骨が折れるものになります。また、これは純粋に POS 機能のみを提供しているレジではあまり発生しない悩みで、モバイルオーダーと一体型であるダイニーだからこそ向き合わなくてはいけない問題です。
もちろん、サービス全体が利用できなくなるような障害も発生することはありますが、そのような障害に対する対策はむしろシンプルで、レジの中身のことだけを考えれば良いため、対策そのものはデータの不整合問題と比べると機能の要件決めは比較的楽であるとも言えます。

店舗のネットワーク障害

ダイニーのプロダクト側でどんなにシステムの安定性を高めたとしても、店舗のネットワーク環境に問題が起きるとレジがダイニーのシステムにアクセスできない状態になり、レジ目線ではダイニーのサービスに障害が起きているのと同義になります。
ネットワーク障害の場合、レジが通常通り利用できなくとも大抵はモバイルオーダーは利用可能な状態にあります。そのため、先述した会計時のオペレーション負荷の増大やデータの不整合の問題が起きやすい傾向にあります。
また、システム障害よりも発生の頻度は高めで、ダイニーを導入する店舗数が増えていくに従って対応するべき件数が増えていってしまう問題でもあります。

障害が発生したあとのことも考える

こうして障害の原因について整理した後、その影響の大きさや発生の頻度などを考慮しつつ、障害が発生しても飲食店の営業がなるべく滞りなく進められるような対策を順番に打ち出しています。
そのように障害が発生しないようにする取り組みは行うのですが、どんなに対策をしてもいつか必ず発生してしまうのが障害です。ダイニーのように成長し続けているプロダクトではなおさらそのリスクは高くなります。そこでダイニーでは大規模な障害が発生してしまったあとの準備も行っています。詳しくはこちらの記事(dinii における緊急事態とその訓練について)で紹介されているのでぜひ読んでみてください。

終わりに

ここまで、レジがダイニーと飲食店それぞれにとって如何に重要で、障害が起きるとどれだけの影響があるのかについてご説明させていただきました。次回の記事では、最低限のラインを死守するガチャレジ機能についてご紹介します。
これからもダイニーは新しい領域への挑戦をしていきますが、それだけではなく飲食店の営業がより安心して行えるような取り組みも並行してすすめていきます。
そんなダイニーで一緒に働きませんか?

  • ソフトウェアエンジニア向けカルチャーデックはこちら

  • カジュアル面談の申し込みはこちら

  • 募集ポジション一覧はこちら

この記事が気に入ったらサポートをしてみませんか?