ポートフォリオ一覧
2021.06生活・レジャー新規構築

スクリーンゴルフ・フランチャイズ統合管制

全国加盟店の機器状態と売上を本部の一画面で確認できるようにまとめました。

ウェブサーバー・インフラデスクトップ・機器
スクリーンゴルフ・フランチャイズ統合管制
納品物をもとに再構成した画面です。顧客データは含みません。
開発期間
約6か月
体制
4名
対応プラットフォーム
ウェブ · サーバー · 店舗機器
管理対象
全国の加盟店舗

背景

全国各地でスクリーンゴルフ店舗をフランチャイズ展開する本部でしたが、店舗機器の状態や売上は各店舗のPCにしか残っていませんでした。特定の店舗の機器が停止しても、本部は顧客からのクレーム電話が来るまで気づく方法がありませんでした。

実装範囲

  • 店舗機器の状態をリアルタイムで収集し、本部ダッシュボードに表示
  • 店舗別売上集計と日次締めレポート
  • 機器に異常が発生した際の本部通知
  • 加盟店の登録・解約管理
  • 店舗機器の遠隔再起動機能
  • 本部管理者の権限別画面分離

技術選定

その状況で何をなぜ選んだか

店舗PCに常駐エージェントを置き、PostgreSQL中央サーバーへ状態をプッシュする構成

店舗のインターネット回線は地域によって品質が異なり、中央から店舗へ毎回状態を問い合わせる方式では応答が遅い、あるいは完全に途切れる店舗がありました。店舗側から先に送信する構成に変えたところ、回線が不安定な店舗でも最低限の周期で状態が届くようになりました。

React製ダッシュボードで店舗を地図ではなく表形式で優先表示

本部担当者が実際に確認したかったのは「今日問題のある店舗はどこか」でした。地図は見た目はよいものの店舗数が増えるほど一目で把握しづらくなるため、異常状態の店舗が上に並ぶ表を基本画面としました。

技術課題

課題

店舗機器が自然に再起動したりネットワークが切断されたりすることが多く、正常終了と障害の区別が難しい状況でした。

アプローチ

機器が正常終了の信号を送れずに消えた場合と、定期的な状態報告が途切れた場合を別の状態値に分け、再接続時に最後の正常時点も併せて記録するようにしました。

結果

本部画面上で現在障害中の店舗と一時的に切断して復帰した店舗が区別されるようになり、担当者が毎回電話で確認しなくても優先順位を判断できるようになりました。

課題

加盟店ごとに機器構成が少しずつ異なり、単一のエージェントバージョンでは状態収集項目が合いませんでした。

アプローチ

エージェントに機器構成プロファイルを持たせ、店舗登録時に構成を選択するとそれに応じた収集項目だけが有効化されるようにしました。

結果

新規加盟店の追加時にコードを修正することなく、構成プロファイルを指定するだけで連携できる仕組みになりました。

引き継ぎと運用

本部運営チームに店舗登録・機器プロファイル管理画面を別途提供し、開発チームの介在なしに新規加盟店を追加できるようにしました。ソースコードと配布スクリプト、店舗エージェントのインストールマニュアルを併せて引き渡し、その後の新規店舗タイプへの対応は別途の保守契約で継続しました。

技術スタック

PythonReactPostgreSQL