【要約】通信環境が悪い学園祭でも動く「オフライン単独レジ(POS)」を1枚のHTMLで作った [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者は、学園祭の模擬店運営における通信環境の悪化という課題に直面した。クラウド連携型のサービスでは、混雑による通信遅延や切断が致命的な問題となる。具体的には以下のリスクが懸念された。
- ・通信待ちによる会計処理の遅延。
- ・ネットワーク切断時のシステム停止リスク。
- ・現場での緊急トラブル発生時の修正難易度。
// Approach
開発者は、外部通信を一切行わず、端末内で完結する「枯れた技術」による設計を採用した。極限状態での動作と、現場での保守性を両立させるため、以下の手法を用いた。
- ・1枚のHTMLにHTML/CSS/JSを内包し、ビルド不要な構成を実現。
- ・localStorageを用いて、データをJSON形式で端末内に保存。
- ・
Object.assignを活用し、データ構造の変更に強いマージ処理を実装。 - ・メディアクエリを用いて、スマホとタブレットの双方に対応するレイアウトを構築。
// Result
開発者は、学園祭の模擬店運営に必要な機能を、極めてシンプルな構成で実現した。これにより、通信環境に左右されない安定した運営が可能となった。
- ・通信環境に依存せず、安定した会計処理を実現。
- ・レジ、在庫、売上、締め作業までの一連の業務フローをカバー。
- ・「取消時の在庫自動復元」や「釣銭準備金を考慮した現金照合」などの実務機能を実装。
Senior Engineer Insight
> 極めて合理的かつ実戦的な設計である。大規模システムでは可用性と整合性のトレードオフが常に議論される。本件は「通信不能」という極限状態を前提に、可用性を最大化している。localStorageへの依存はデータ消失リスクを伴う。しかし、学園祭という限定的な用途では、運用コストと保守性のメリットがリスクを上回る。エッジコンピューティングの最小単位としての思想が感じられる。