Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RxSwift x MVVM x Realm で保育の現場をDXしている話 / DX Chil...

RxSwift x MVVM x Realm で保育の現場をDXしている話 / DX Childcare with RxSwift, MVVM and Realm

【アンドパッド×ユニファ】業界変革型 Vertical SaaS のiOS/Android開発最前線 のセッションにてお話しさせていただいた際のスライドです。

保育現場をDXするためのプロダクトだからこその難しさと、それに対して RxSwift x MVVM x Realm でどのようにプロダクトを開発してきたのかをお話ししました。

Hiroaki Akanuma

November 09, 2021
Tweet

More Decks by Hiroaki Akanuma

Other Decks in Technology

Transcript

  1. iOSアプリアーキテクチャ概要 • MVVM ◦ Model – View – ViewModel ◦

    社内でアプリ開発する場合のデフォルト ◦ ごくシンプルなアプリの場合はMVCも選択 View ViewModel Model Data Binding データ 参照・更新
  2. 主要ライブラリ • リアクティブプログラミング ◦ RxSwift ▪ RxDataSources ▪ NSObject+Rx ▪

    RxGesture ▪ NSObject+Rx • データベース ◦ Realm ▪ RxRealm ▪ RealmSwift • ネットワーク ◦ Alamofire ▪ RxAlamofire • リソース ◦ R.swift
  3. 事業特性に関するプロダクトの辛み • 複数プロダクトを一つのアプリで使える必要がある ◦ 保育現場でのユーザビリティを考慮して、4つのプロダクトを一つの iOS アプリにま とめている ▪ スーパーアプリ構成

    • 画面が複雑でビジネスロジックも複雑 • 複数プロダクトから同じデータの編集ができる必要がある ◦ 体温データをクラスボードからも連絡帳からも参照・編集できる必要がある、など
  4. アプリ構成(抜粋) API Sleep ViewController CommBook ViewController Sleep ViewModel CommBook ViewModel

    RxRealm で Binding データ参照・更新の APIリクエスト Data Binding Data Binding
  5. 初期表示 API Sleep ViewController CommBook ViewController Sleep ViewModel CommBook ViewModel

    RxRealm で Binding データ参照・更新の APIリクエスト Data Binding Data Binding ①APIをコールして データを取得
  6. 初期表示 API Sleep ViewController CommBook ViewController Sleep ViewModel CommBook ViewModel

    RxRealm で Binding データ参照・更新の APIリクエスト Data Binding Data Binding ②APIから取得した json データを Realm に保存
  7. クラスボードで更新したデータを連絡帳で参照するケース API Sleep ViewController CommBook ViewController Sleep ViewModel CommBook ViewModel

    RxRealm で Binding データ参照・更新の APIリクエスト Data Binding Data Binding ①更新操作
  8. Data Binding クラスボードで更新したデータを連絡帳で参照するケース API Sleep ViewController CommBook ViewController Sleep ViewModel

    CommBook ViewModel RxRealm で Binding データ参照・更新の APIリクエスト Data Binding ②ViewModelに反映
  9. クラスボードで更新したデータを連絡帳で参照するケース API Sleep ViewController CommBook ViewController Sleep ViewModel CommBook ViewModel

    RxRealm で Binding データ参照・更新の APIリクエスト Data Binding Data Binding ③Realmのデータ更新
  10. クラスボードで更新したデータを連絡帳で参照するケース API Sleep ViewController CommBook ViewController Sleep ViewModel CommBook ViewModel

    RxRealm で Binding データ参照・更新の APIリクエスト Data Binding Data Binding ④APIにデータ更新 リクエスト
  11. クラスボードで更新したデータを連絡帳で参照するケース API Sleep ViewController CommBook ViewController Sleep ViewModel CommBook ViewModel

    RxRealm で Binding データ参照・更新の APIリクエスト Data Binding Data Binding ⑤Realmのデータ 更新検知
  12. Data Binding クラスボードで更新したデータを連絡帳で参照するケース API Sleep ViewController CommBook ViewController Sleep ViewModel

    CommBook ViewModel RxRealm で Binding データ参照・更新の APIリクエスト Data Binding ⑥Viewに変更を反映
  13. RxSwift x MVVM x Realm にして良かったこと • データの参照や更新が様々なところで行われる仕様を実現するには、宣言的に 記述することができ、データの更新をトリガーにリアクティブに反映されるア ーキテクチャでなければ難しかった

    ◦ これをMVC構成で実現しようとすると、APIのレスポンスの処理を ViewController で行うことに なるなど、相当複雑になる • Realm は他のDBに比べるとセットアップが簡単で、リアクティブアーキテクチ ャで使いやすい
  14. RxSwift x MVVM x Realm にして難しかったこと • iOSエンジニアチームの中にこのアーキテクチャに慣れていないメンバーが おり、キャッチアップに時間がかかった •

    それぞれのプロダクトを別のエンジニアが並行して開発している中で、エン ジニア間での同期が足りておらず、 Realm の使い方で混乱が生じた • 将来的には RxSwift → SwiftUI + Combine ?
  15. まとめ Ø 保育現場の業務では扱われるデータ項目が多く、事務処理の内容も複雑なもの も多い。またユースケースも様々。 Ø そのような複雑な構成になるシステムのアーキテクチャには RxSwift x MVVM x

    Realm は有力な選択肢の一つ Ø メンバーのスキルセットによってはキャッチアップに時間がかかるため、学習 期間も見込んだスケジュールを立てることが必要