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

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

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. RxSwift x MVVM x Realm で
    保育の現場をDXしている話
    2021.11.04
    ユニファ株式会社 赤沼 寛明

    View Slide

  2. 自己紹介
    Twitter: @akanuma

    View Slide

  3. Purpose と Value

    View Slide

  4. プロダクト・事業
    子どもの安全や保護者の安心と
    保育業務の負担軽減を実現する
    次世代型保育施設「スマート保育園®」
    「スマート幼稚園®」「スマートこども
    園®」の展開を進めることで、子どもと
    保育者、そして家族にとって
    質の高い保育の実現と、保育施設の
    「社会インフラ化」を推進します。
    保育現場に向け、業務効率だけでなく保育の質を上げるためのサポートを提供。

    View Slide

  5. プロダクト・事業
    子どもの安全や保護者の安心と
    保育業務の負担軽減を実現する
    次世代型保育施設「スマート保育園®」
    「スマート幼稚園®」「スマートこども
    園®」の展開を進めることで、子どもと
    保育者、そして家族にとって
    質の高い保育の実現と、保育施設の
    「社会インフラ化」を推進します。
    保育現場に向け、業務効率だけでなく保育の質を上げるためのサポートを提供。

    View Slide

  6. ルクミーノート(保育者用アプリ)

    View Slide

  7. ルクミーノート(保育者用アプリ)

    View Slide

  8. 全体構成

    View Slide

  9. 全体構成(ルクミーノート部分抜粋)

    View Slide

  10. 全体構成(ルクミーノート部分抜粋)

    View Slide

  11. iOSアプリアーキテクチャ概要

    MVVM

    Model – View – ViewModel
    ○ 社内でアプリ開発する場合のデフォルト
    ○ ごくシンプルなアプリの場合はMVCも選択
    View ViewModel Model
    Data
    Binding
    データ
    参照・更新

    View Slide

  12. 主要ライブラリ
    ● リアクティブプログラミング
    ○ RxSwift
    ■ RxDataSources
    ■ NSObject+Rx
    ■ RxGesture
    ■ NSObject+Rx
    ● データベース
    ○ Realm
    ■ RxRealm
    ■ RealmSwift
    ● ネットワーク
    ○ Alamofire
    ■ RxAlamofire
    ● リソース
    ○ R.swift

    View Slide

  13. 事業特性に関するプロダクトの辛み
    ● 複数プロダクトを一つのアプリで使える必要がある
    ○ 保育現場でのユーザビリティを考慮して、4つのプロダクトを一つの iOS アプリにま
    とめている
    ■ スーパーアプリ構成
    ● 画面が複雑でビジネスロジックも複雑
    ● 複数プロダクトから同じデータの編集ができる必要がある
    ○ 体温データをクラスボードからも連絡帳からも参照・編集できる必要がある、など

    View Slide

  14. 複数プロダクトのデータを参照

    View Slide

  15. 複数プロダクトのデータを参照

    View Slide

  16. 複数プロダクトからのデータ参照・更新
    睡眠時間データなどは からも
    からも参照・更新が行われる

    View Slide

  17. アプリ構成(抜粋)
    API
    Sleep
    ViewController
    CommBook
    ViewController
    Sleep
    ViewModel
    CommBook
    ViewModel
    RxRealm で
    Binding
    データ参照・更新の
    APIリクエスト
    Data
    Binding
    Data
    Binding

    View Slide

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

    View Slide

  19. 初期表示
    API
    Sleep
    ViewController
    CommBook
    ViewController
    Sleep
    ViewModel
    CommBook
    ViewModel
    RxRealm で
    Binding
    データ参照・更新の
    APIリクエスト
    Data
    Binding
    Data
    Binding
    ②APIから取得した
    json データを
    Realm に保存

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. RxSwift x MVVM x Realm にして良かったこと
    ● データの参照や更新が様々なところで行われる仕様を実現するには、宣言的に
    記述することができ、データの更新をトリガーにリアクティブに反映されるア
    ーキテクチャでなければ難しかった
    ○ これをMVC構成で実現しようとすると、APIのレスポンスの処理を ViewController で行うことに
    なるなど、相当複雑になる
    ● Realm は他のDBに比べるとセットアップが簡単で、リアクティブアーキテクチ
    ャで使いやすい

    View Slide

  27. RxSwift x MVVM x Realm にして難しかったこと
    ● iOSエンジニアチームの中にこのアーキテクチャに慣れていないメンバーが
    おり、キャッチアップに時間がかかった
    ● それぞれのプロダクトを別のエンジニアが並行して開発している中で、エン
    ジニア間での同期が足りておらず、 Realm の使い方で混乱が生じた
    ● 将来的には RxSwift → SwiftUI + Combine ?

    View Slide

  28. まとめ
    Ø 保育現場の業務では扱われるデータ項目が多く、事務処理の内容も複雑なもの
    も多い。またユースケースも様々。
    Ø そのような複雑な構成になるシステムのアーキテクチャには RxSwift x MVVM x
    Realm は有力な選択肢の一つ
    Ø メンバーのスキルセットによってはキャッチアップに時間がかかるため、学習
    期間も見込んだスケジュールを立てることが必要

    View Slide