【案件名】 | 現金チャージ機smoocha開発 |
【担当範囲】 | 設計 / 開発 / テスト / 運用 |
【技術要素】 | 開発:Kotlin 環境:Tinkerbord Android(ASUS) |
【主要要件】 | 地域循環型キャッシュレス決済システムのカード(IC・QRコード)に現金をチャージする据え置き型チャージ機のアプリを開発する。 |
課題
本案件は、現金投入機を搭載するボードを制御しつつ、投入された金額を決済サーバに対してAPIを介してチャージを行います。
最大の課題は、投入された現金を確実にカードへ反映させること、そして連続稼働に耐えうる信頼性を確保することにある。この要件を満たすため、設計段階を最重要課題として位置づけ、堅牢な仕組みづくりに取り組む必要がある。
解決方法
課題を達成する為、重点的に3つの設計を行なった。
バックグラウンド制御
基盤からのイベントは、アクティビティやフラグメントに依存せず、バックグラウンドで確実に受信できる設計とした。万一フラグメント側でイベント処理が失敗した場合でも、バックグラウンドで動作するサービス内にて投入金額を保持する仕組みにより、保持情報をもとにリカバリー処理を実行可能である。

シーケンス図
本チャージ機アプリは、メンテナンス画面を除き7画面程度で構成される。しかし作成したシーケンス図は、イレギュラー処理を含めると 60ページ超 に及んだ。
現金投入に伴うイベントは、カード離脱、無操作タイムアウト、画面操作(中止・遷移)、基盤からの通知など多岐にわたる。これらのクロスシーケンスを網羅的に洗い出し、丁寧に設計を行なった。

基盤のモック
基盤がなくてもアプリを独立して動作させられるよう、コードを変更することなく基盤制御を基盤モックへ切り替え可能な設計とした。このモックは、記述したシナリオに沿って稼働し、UIのテストコードと組み合わせることで、全ての動作を網羅する連続稼働テストを実現する。
さらに、利用メモリの記録も残すことで、長時間稼働に耐えうる強固なアプリケーションへと仕上げる。
成果
本チャージ機は現在も継続的に稼働しており、以下の検証を実施している。