文化祭で某チェーン店を再現して失敗した話を踏まえて成功した話
はじめまして
はじめまして、高校1年のねれです。
今回は文化祭で派手に失敗した話を踏襲して、成功させた話をさせていただきます。
この記事の続編のようなものなので先にこちらを読むことをおすすめします。
これを読んでいる技術部門関係者の方々へ
もしこの記事を読んでいる方がいたらXかdiscordで連絡していただけると嬉しいです(特にNaYu先輩)。ぜひいろんなお話をしてみたいので!
背景
問題点
例年、弊校の文化祭で問題となっていたのが食品の待機列でした。
この問題の大きな要因は、食品の調理時間と決済にかかる時間の差です。
会計の部門員(我々の文化祭では部門という制度を導入しています。会計担当の店員ということです)の主な仕事は
注文を聞く -> 金額を要求(電子決済ならば端末等での読み取り)
だけです。遅くても2~3分で一団体終わります。
それに比べて、不可抗力ですが、食品の調理は時間がかかります。例えば焼きそばですが、会計と違って持続的に提供できるものではありません。当然まとめて調理するので断続的な提供になってしまいます。
調理のミスや、シフトをサボる店員だって出てきます。
色々積み重なって、会計にかかる時間<<<<<<食品の調理時間 になっていました。
(文化祭で某チェーン店を再現して失敗した話より引用)
という既存の問題点だけでなく、毎年改良を試して新しいシステムを構築していたため、来場者の混乱を招いていたという問題もありました。また待機列が長くなりすぎてしまい、道を塞いでしまうなどの問題もあり、システムとしてこれを解決する方法を模索していました。
解決方法
このような問題を引き起こしている原因は会計に永遠と人が入ってきてしまうためです。よって、今年のシステムでは販売時間を30分ごとに区切り、前の30分で生産したものを次の30分で売るという形を取りました。
30分で生産した分の在庫をカウントして、レジアプリでその個数だけ売ることができるようにしました。
また伝票を導入し、購入した個数を書いて渡すことで、食品の受け渡しもスムーズになり、また誰がどのような決済方法を取ったかを記録することができるため、返金対応もできるようになりました。
今年のこのシステムの宣伝時にはただ”PayPayの導入”としか言われていなかったんですけどね...
そして、この際失敗した原因は無線だったとあったことから、有線回線を導入しました。このシステムが成功したのは間違い無くこれのおかげです!
技術面
サーバーサイドはGolangとFiberとGormを使って作りました。軽快に動いて当日もしっかりと処理を捌き切ってくれました。
そしてアプリ側ですが、自分がSwiftUIに馴染むことができず、web(next.js)で制作しました。(NaYu先輩は1月からSwiftUIを勉強してレジアプリを作り上げたのに!)
SquareのPoint Of Sale APIは一応webにも対応していたものの、ネイティブアプリよりは動作が不安定だったと思います。会計担当の人には本当に迷惑をかけました。申し訳ございませんでした。
PayPayに関してなのですが、PayPay for Businessを契約させていただいたものの、このシステムに組み込むためのAPIはないとのことで、以下のUIのような対応をしました。
この画面で一度ホームに戻り、PayPay for Businessアプリを用いて決済をしたのち、このサイトに戻ってきて決済完了をしてもらうという煩雑なことを会計担当の人にしてもらっていました。本当にご迷惑をおかけしました。
またnext.jsのapi routesにBFF(Backend for frontend)を仕込みました。30分ごとに在庫を管理して... といった少々複雑なロジックをAPI側に押し込んで、UI側に複雑なロジックを持ち込まないためです。
開発日記
12月
実行委員長肝入りのこのシステムの概要を話し合い始めました。この時にはまだ食品と会計と外務(誘導)と実行委員長だけで話し合っていて、なぜか技術関係者の人を入れずに話し合われていました。
1月
流石にまずいということで話し合いに参加するも、一向に概要がまとまらず。技術的に可能なことをまとめて話し合いの際に説明しました。
2月
突然30分おきに区切ると言う案がでて、それが採用されました。開発開始です。最初の数週間はバックエンドをTypeScriptで書いていましたが、途中でGolangに切り替えました。
3月
第一回のテストを行いました。主に有線回線が動くかどうかの確認でした。完璧に動作することを確認できました。
4月
第二回のテストを行いました。有線回線上で実際にサーバーを動かしてちゃんと機能するかを確認しました。その後、会計を行う人たちへ講習会を行い、わかりにくかったところやバグがあったところを確認して修正しました。
前日
このシステムの配線等を行っていました。手伝ってくださった高校3年生の先輩には頭が上がりません。
当日
何の問題もなく、このシステムは2日間の会計を捌き続けました。そして過去最高の売り上げを達成しました。今年は今までのように停止することがほぼありませんでした。
最後に
1日で勢いで書き上げた読みにくい文章にも関わらず、最後までお読み頂きありがとうございます。
要するに有線回線を導入したのが良かったというだけの話でした。
では、最後にですが、お世話になった方々へ一言。
このアイデアを考案したY先輩。Y先輩には感謝しかありません。
実行委員長。当日もシステムの管理者として個数入力等を行ってくださって本当にありがとうございました。
執行、会計、食品部門幹部の方々。使いにくいシステムやUIでしたが、実行まで手伝ってくださいました。本当に感謝しています。
技術部門の幹部の方々。私のさまざまな至らない部分を補ってくださって本当にありがとうございました。
文化祭、そして技術の顧問の先生方。最終日まで機材だったりと多様な面でお世話になりました。本当にありがとうございます。
そして、最後になってしまいますが、迷惑をかけ、そしてお世話になった全幹部、全先生方、そして全生徒に感謝してもしきれません。
皆さん、本当にありがとうございました!
Discussion