【アンドパッド×ユニファ】業界変革型 Vertical SaaS のiOS/Android開発最前線 のセッションにてお話しさせていただいた際のスライドです。
保育現場をDXするためのプロダクトだからこその難しさと、それに対して RxSwift x MVVM x Realm でどのようにプロダクトを開発してきたのかをお話ししました。
RxSwift x MVVM x Realm で保育の現場をDXしている話2021.11.04ユニファ株式会社 赤沼 寛明
View Slide
自己紹介Twitter: @akanuma
Purpose と Value
プロダクト・事業子どもの安全や保護者の安心と保育業務の負担軽減を実現する次世代型保育施設「スマート保育園®」「スマート幼稚園®」「スマートこども園®」の展開を進めることで、子どもと保育者、そして家族にとって質の高い保育の実現と、保育施設の「社会インフラ化」を推進します。保育現場に向け、業務効率だけでなく保育の質を上げるためのサポートを提供。
ルクミーノート(保育者用アプリ)
全体構成
全体構成(ルクミーノート部分抜粋)
iOSアプリアーキテクチャ概要●MVVM○Model – View – ViewModel○ 社内でアプリ開発する場合のデフォルト○ ごくシンプルなアプリの場合はMVCも選択View ViewModel ModelDataBindingデータ参照・更新
主要ライブラリ● リアクティブプログラミング○ RxSwift■ RxDataSources■ NSObject+Rx■ RxGesture■ NSObject+Rx● データベース○ Realm■ RxRealm■ RealmSwift● ネットワーク○ Alamofire■ RxAlamofire● リソース○ R.swift
事業特性に関するプロダクトの辛み● 複数プロダクトを一つのアプリで使える必要がある○ 保育現場でのユーザビリティを考慮して、4つのプロダクトを一つの iOS アプリにまとめている■ スーパーアプリ構成● 画面が複雑でビジネスロジックも複雑● 複数プロダクトから同じデータの編集ができる必要がある○ 体温データをクラスボードからも連絡帳からも参照・編集できる必要がある、など
複数プロダクトのデータを参照
複数プロダクトからのデータ参照・更新睡眠時間データなどは からもからも参照・更新が行われる
アプリ構成(抜粋)APISleepViewControllerCommBookViewControllerSleepViewModelCommBookViewModelRxRealm でBindingデータ参照・更新のAPIリクエストDataBindingDataBinding
初期表示APISleepViewControllerCommBookViewControllerSleepViewModelCommBookViewModelRxRealm でBindingデータ参照・更新のAPIリクエストDataBindingDataBinding①APIをコールしてデータを取得
初期表示APISleepViewControllerCommBookViewControllerSleepViewModelCommBookViewModelRxRealm でBindingデータ参照・更新のAPIリクエストDataBindingDataBinding②APIから取得したjson データをRealm に保存
クラスボードで更新したデータを連絡帳で参照するケースAPISleepViewControllerCommBookViewControllerSleepViewModelCommBookViewModelRxRealm でBindingデータ参照・更新のAPIリクエストDataBindingDataBinding①更新操作
DataBindingクラスボードで更新したデータを連絡帳で参照するケースAPISleepViewControllerCommBookViewControllerSleepViewModelCommBookViewModelRxRealm でBindingデータ参照・更新のAPIリクエストDataBinding②ViewModelに反映
クラスボードで更新したデータを連絡帳で参照するケースAPISleepViewControllerCommBookViewControllerSleepViewModelCommBookViewModelRxRealm でBindingデータ参照・更新のAPIリクエストDataBindingDataBinding③Realmのデータ更新
クラスボードで更新したデータを連絡帳で参照するケースAPISleepViewControllerCommBookViewControllerSleepViewModelCommBookViewModelRxRealm でBindingデータ参照・更新のAPIリクエストDataBindingDataBinding④APIにデータ更新リクエスト
クラスボードで更新したデータを連絡帳で参照するケースAPISleepViewControllerCommBookViewControllerSleepViewModelCommBookViewModelRxRealm でBindingデータ参照・更新のAPIリクエストDataBindingDataBinding⑤Realmのデータ更新検知
DataBindingクラスボードで更新したデータを連絡帳で参照するケースAPISleepViewControllerCommBookViewControllerSleepViewModelCommBookViewModelRxRealm でBindingデータ参照・更新のAPIリクエストDataBinding⑥Viewに変更を反映
RxSwift x MVVM x Realm にして良かったこと● データの参照や更新が様々なところで行われる仕様を実現するには、宣言的に記述することができ、データの更新をトリガーにリアクティブに反映されるアーキテクチャでなければ難しかった○ これをMVC構成で実現しようとすると、APIのレスポンスの処理を ViewController で行うことになるなど、相当複雑になる● Realm は他のDBに比べるとセットアップが簡単で、リアクティブアーキテクチャで使いやすい
RxSwift x MVVM x Realm にして難しかったこと● iOSエンジニアチームの中にこのアーキテクチャに慣れていないメンバーがおり、キャッチアップに時間がかかった● それぞれのプロダクトを別のエンジニアが並行して開発している中で、エンジニア間での同期が足りておらず、 Realm の使い方で混乱が生じた● 将来的には RxSwift → SwiftUI + Combine ?
まとめØ 保育現場の業務では扱われるデータ項目が多く、事務処理の内容も複雑なものも多い。またユースケースも様々。Ø そのような複雑な構成になるシステムのアーキテクチャには RxSwift x MVVM xRealm は有力な選択肢の一つØ メンバーのスキルセットによってはキャッチアップに時間がかかるため、学習期間も見込んだスケジュールを立てることが必要