飲食店舗運営を支える自動釣銭機の話
こんにちは、ダイニーのソフトウェアエンジニアの @lightnet328 です。
今回はダイニーのレジアプリと連携することができる自動釣銭機の役割や連携の仕組みをデモを交えながらお伝えしたいと思います。
自動釣銭機とは
自動釣銭機とは紙幣や硬貨などの現金の入出金や庫内の現金の総量(在高)の確認を自動化するための機械です。名前からも想像できる通り、代表的で分かりやすいユースケースは会計時に現金を自動釣銭機に投入してお釣りを返却するケースです。最近はスタッフが商品をレジに入力し、来店客が自動釣銭機やキャッシュレス決済端末などで決済を行うセミセルフレジの導入がコンビニエンスストアやハンバーガーショップなどで進んでいるため、馴染みのある方も多いかもしれません。
来店客が感じやすいメリットは会計時間の短縮ですが、飲食店にはその他にも多くのメリットがあります。
出金が自動で行えるため、釣り銭間違いを防止できる
在高の確認が自動でできるため、開店時と閉店時の作業時間が削減できる
入出金の記録が残るため、現金の持ち出しなどの内部不正の防止につながる
現金の管理を正しくできるようになることで、飲食店は会計監査的な観点から法人としての信頼を高められるだけでなく、削減した時間をスタッフに飲食店のより本質的な価値提供のために使っていただけるようになります。
法人の会計に関する信頼性を高める開発のコストはスタートアップに対して重くのしかかるため、今すぐダイニー上で全てのリスクを排除するということは困難です。しかし、社会で広く受け入れられている企業でもダイニーを活用していただくことがより早く「飲食をもっと楽しく面白く」するために必要だと考え、早くからこのような機能の開発にも取り組んでいます。
自動釣銭機連携の仕組み
いきなり自動釣銭機連携の仕組みを説明する前に、ダイニーのレジアプリの構成をソフトウェアとハードウェアの観点から説明しておく必要があります。
ダイニーレジのソフトウェアは React Native をラップしたフレームワークである Expo の上に作られています。React Native を採用している理由は使用言語を TypeScript に統一するためなのですが、この記事では詳しく触れません。詳しくは ダイニーのエンジニアリング3カ条 をご覧ください。
ハードウェアはレジアプリが動作する iPad の他、 EPSON 製のキッチンプリンターと GLORY 製の自動釣銭機を使用します。ダイニーレジに接続するキッチンプリンターはレシートや領収書などの印刷のために使用しています。ダイニーレジに接続しないで使用されるキッチンプリンターもあり、それらは注文されたメニューを伝票として印刷するために使用しています。また、自動釣銭機は全ての店舗で必要とされているわけではないので、プリンターとの接続が無くてもレジアプリは動作します。
次の画像はダイニーレジから自動釣銭機にコマンドを送信する経路を示したものです。
TypeScript から Expo を通して Swift で書かれた Epson ePOS SDK for iOS を使用した Native Module のメソッドを呼び出し、そのコマンドが iPad からプリンターに送信されます。
EPSON 社のプリンターは OPOS と呼ばれる POS レジとその周辺機器に関するデファクトスタンダードな規格に対応した周辺機器と接続でき、レジアプリと自動釣銭機間の通信を中継できます。GLORY 社の自動釣銭機は OPOS に対応しているため、プリンターが受け取ったコマンドは自動釣銭機に転送されます。
ここで強調したいことが 2 つあります。
1 つ目は Epson ePOS SDK for iOS が低レイヤーの仕様を隠蔽してくれていることです。OPOS の仕様を全て読まずとも、SDK のインターフェイスと仕様書を読めばただライブラリを使っているかのような開発ができるのは非常に便利です。
2 つ目は Node.js や React Native、Epson ePOS SDK for iOS や OPOS などのおかげで、TypeScript を書くことでお金を制御できるようになるということです。プリンターや自動釣銭機の制御ロジックを TypeScript に載せることができるとバイナリを更新せずに Expo の OTA Update で更新できますし、ダイニーは TypeScript の使用比率が高いため、開発効率も高められます。
昔は Web ブラウザだけで動くと思っていたものが様々な仕組みのおかげでお金の制御も間接的にできるようになっているというのは面白いと思います。
自動釣銭機を動かしてみよう
突然ですが、みなさんは今どのくらい現金をいくら持っているかわかりますか?受け取ったお釣りをどのように扱っていますか?
最近、私はなるべくお金の流れを把握できるようにしつつ、財布を軽くしたいのでキャッシュレス決済を使っていますが、まだまだ現金が必要な場面があり、お釣りが財布に貯まっていきます。家に帰ったときにお釣りで膨らんだ財布を軽くするためにガラス瓶にお釣りを入れる運用をしていますが、前から「今いくらくらい入っているのか」が気になっていました。
これ、いくら入っていると思いますか?自動釣銭機は実際のお金を扱うことができて面白いので、実際にガラス瓶に入ったお釣りを自動釣銭機で数える様子を見ていただきたいと思います。今回のためにデモ用のアプリも作ってしまいました!
こちらがデモ用のアプリです。起動時に自動釣銭機に接続されたプリンタと接続すると自動釣銭機に入金している金額が表示されます。
入金を押すとお金が入金できるようになり、入金した金額がリアルタイムで表示されます。早速お金を全部入れてみましょう。
ゴガガ……ゴガガガ……。気になる結果は……。
25118 円でした……!これだけの量でも意外に 2 万円を超える金額になるんですね。
出金もできます。押すと金種毎に出金してくれるようにしました。
金種毎に現金が自動で整理されると気持ちがいいですね。
まとめ
自動釣銭機というおそらく多くの人が目にするものの、開発に携わるイメージが湧かない機械について、飲食店においてどのような役割があるかというプロダクト的な観点と技術を繋ぎ合わせて TypeScript から扱えるようになっているという技術的な観点から記事を書かせていただきました。また、僕の貯金という観点からは僕がおそらく高級な焼肉を食べられるということがわかりました。
この記事を読んでいただいた方々が飲食店などで自動釣銭機を見た際に少しでも自動釣銭機の役割やレジとの連携の仕組みのことを思い出していただけたら嬉しいです。
最後になりますが、現金を機械に出し入れしたいエンジニアや飲食店が大好きなエンジニア、TypeScript が大好きなエンジニアを積極的に募集しています。
これからもダイニーは「また行きたい」と思えるような楽しくおもしろい飲食店を増やすべく飲食店来店客に新しい体験を生み出す開発やより多くの店舗に受け入れていただけるプロダクトになるための開発を進めていきます。少しでも興味を持っていただけた方は以下のリンクからカジュアル面談でお話させてください。
僕はこのお金で美味しい焼肉を食べに行ってきたいと思います、さようなら。