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

ANDPAD黒板のオフラインモード機能 リリースまでの軌跡

ANDPAD黒板のオフラインモード機能 リリースまでの軌跡

栗山 徹 @kotetu
2024 年 8 月 24 日
iOSDC Japan 2024

ANDPAD inc

August 24, 2024
Tweet

More Decks by ANDPAD inc

Other Decks in Technology

Transcript

  1. © 2024 ANDPAD All Rights Reserved. Confidential ANDPAD の紹介、および ANDPAD

    黒板のオフラインモード機能の開発で得られた 知見の共有 セッションのテーマ 2
  2. © 2024 ANDPAD All Rights Reserved. Confidential 2022年6月入社。 2023年6月より黒板機能 (iOS)

    の開発を担当。 5月に第三子誕生! iOSDC Japan 2023 「認証体験向上のために passkeys (パスキー) に対応する」 「Swift Markdownを使ったMarkdownアプリ開発」 X (Twitter) : @kotetu 栗山 徹 開発本部 Tech Lead Profile | 経 歴 自己紹介 3
  3. © 2024 ANDPAD All Rights Reserved. Confidential ANDPAD の紹介 ANDPAD

    および ANDPAD 黒板 オフラインモード機能とリリースまでの道のり 開発中の様々な取り組み まとめ 1 2 3 4 5 アジェンダ 4
  4. © 2024 ANDPAD All Rights Reserved. Confidential 現場の効率化から経営改善まで一元管理できる クラウド型建設プロジェクト管理サービス 社 内

    社 外 営業 / 監督 / 設計 事務 / 管理職 職人 / 業者 メーカー / 流通 案件管理 資料 工程表 写真 報告 チャット 黒板 図面 受発注 • • • 
 ANDPAD とは 6
  5. © 2024 ANDPAD All Rights Reserved. 幸せを築く人を、幸せに。 ※『建設業マネジメントクラウドサービス市場の動向とベンダシェア(ミックITリポート  2023年10月号)』(デロイト トーマツ

    ミック経済研究所調べ) ANDPAD が支える建設 DX 利用社数 20.2万社 ユーザー数 51.0万人 住まいをつくる。ビルや施設をつくる。街をつくる。 生活を豊かにする建築・建設業は、幸せづくりと例えられます。 私たちは、その幸せづくりをする人たちをテクノロジーの力で 後押ししていきたい。心からそう考えてます。 我々はこれからもお客様の声をサービスに反映して、 建設業界及び建設業従事者様の業務効率化、 DX化を支援してまいります。 7 Mission
  6. © 2024 ANDPAD All Rights Reserved. Confidential SENDAI office 〒980-0803

    宮城県仙台市青葉区国分町1-4-9 enspace TOKYO office 〒101-0022 東京都千代田区神田練塀町300 住友不動産秋葉原駅前ビル8階 OSAKA office 〒530-0011 大阪府大阪市北区大深町1-1 ヨドバシ梅田タワー8階 FUKUOKA office 〒812-0011 福岡県福岡市博多区博多駅前1-15-20 NMF博多駅前ビル2階 Vietnam office 3rd Floor, Dong Nhan Building, 90 Nguyen Dinh Chieu Street, Da Kao Ward, District 1, Ho Chi Minh City ANDPAD グループ COMVEX office 〒150-0002 東京都渋谷区渋谷2-15-1 渋谷クロスタワー15F 8
  7. © 2024 ANDPAD All Rights Reserved. Confidential ANDPAD 10 •案件管理

    •工程表 •写真管理 主な機能 •資料管理 •報告 •黒板 ANDPAD サービスのハブとなるアプリ 建設現場で利用するために必要な機能が詰まった 多機能アプリ
  8. © 2024 ANDPAD All Rights Reserved. Confidential ANDPAD 黒板 11

    工事で使用する黒板をデジタル化 黒板写真の撮影や写真管理を効率化 •事前に黒板情報を用意できる •黒板の作成・変更が楽 •黒板写真の管理・検索が楽 •改ざん検知機能を搭載 •写真台帳作成が楽 •オフライン環境で黒板写真を撮影できる など できること
  9. © 2024 ANDPAD All Rights Reserved. Confidential ANDPAD 黒板は ANDPAD

    の機能のひとつ 12 黒板機能は一部を除き社内ライブラリとして分離 黒板機能開発チーム・ANDPAD アプリ開発チーム間の連携が重要 ANDPAD 黒板機能 ANDPAD アプリ開発チーム 黒板機能開発チーム
  10. © 2024 ANDPAD All Rights Reserved. Confidential 15 オンライン状態での利用が前提のアプリは通信環境が悪いと利用できない 特に写真撮影は現場でしかできないので、利用できないのはクリティカル

    通信環境が悪い場合の弊害|課題 •案件情報の閲覧 •報告 •工程表の閲覧 など 利用できなくてもクリティカルではない機能 •黒板付き写真の撮影 → 現場でしか撮影できない、時間と共に現場は変化する 利用できないとクリティカルな機能
  11. © 2024 ANDPAD All Rights Reserved. Confidential 17 モード切り替えの概念を利用して利用方法を明確化 オフラインモード機能の使い方|ソリューション

    (通信環境の良い場所で操作) •黒板データを予めダウンロードする (通信環境の悪い場所で操作) •オフラインモードへ切り替える •黒板写真を撮影する (ローカルへ保存される) (通信環境の良い場所で操作) •オフラインモードを終了する •ローカルへ保存した黒板写真をサーバーへ登録する 使い方
  12. © 2024 ANDPAD All Rights Reserved. Confidential 18 2024 年

    4 月 2 日 提供開始! 開発完了 https://prtimes.jp/main/html/rd/p/000000102.000018154.html
  13. © 2024 ANDPAD All Rights Reserved. Confidential 20 事前調査を経て、2023 年

    11 月より本格着手 2 チーム合同で開発を進行 開発体制 •写真周りの Core Data の DB設計 •撮影した写真をローカルへ保存する機能 •黒板関連以外の画面のオフラインモード対応 ※ オフラインモード対応以外の機能開発も並行して進行 ANDPAD アプリ開発チーム •黒板情報周りの Core Data の DB設計 •黒板情報のダウンロード処理 •黒板関連画面のオフラインモード対応 黒板機能開発チーム
  14. © 2024 ANDPAD All Rights Reserved. Confidential 21 Core Data

    / SDWebImage を利用 長期的な保守性担保や将来的な SwiftData の利用も考慮し判断 ローカルデータ管理方式の選定 •黒板情報の読み書き・検索 •写真情報の読み書き 画像以外のデータ管理 •黒板検索履歴の読み書き 既存ローカルデータ管理 ※ Realm を利用 •豆図画像の管理 •写真画像の管理 画像データの管理 黒板写真 (写真画像、写真情報) 黒板情報 豆 図 画 像 Core Data を利用 黒板情報・写真情報の管理 SDWebImage を利用 豆図画像の管理 将来的に Core Data へ移行 黒板検索履歴の管理 ※サンプル情報
  15. © 2024 ANDPAD All Rights Reserved. Confidential 22 Strict Concurrency

    対応を見据え、Sendable な struct へ変換して利用 Core Data の利用 Core Data のモデル Sendable な struct
  16. © 2024 ANDPAD All Rights Reserved. Confidential 23 オンラインモード・オフラインモードでほぼ同じ UI

    既存コードを活かしつつオフラインモード対応したい 既存コードのモード切り替え対応|課題 ANDPAD アプリの設計 MVVM パターン データ取得部分をはじめとして RxSwift を使用している箇所が多い • •
  17. © 2024 ANDPAD All Rights Reserved. Confidential 24 モード切り換え時に画面を生成し直す 画面生成時にデータ取得クラスを差し換える

    データ取得処理の差し換え|ソリューション オンラインモード時 ViewModel.dataFetcher に APIFetcher をセット
  18. © 2024 ANDPAD All Rights Reserved. Confidential 25 モード切り換え時に画面を生成し直す 画面生成時にデータ取得クラスを差し換える

    データ取得処理の差し換え|ソリューション オンラインモード時 ViewModel.dataFetcher に APIFetcher をセット オフラインモード時 ViewModel.dataFetcher に OfflineFetcher をセット
  19. © 2024 ANDPAD All Rights Reserved. Confidential 26 黒板機能を利用するプロダクトが複数存在 Core

    Data / SDWebImage を使った読み書きはアプリ本体側リポジトリに集約 黒板ライブラリでのローカルデータ読み書き|課題 黒板機能ライブラリ アプリA (オフラインモード無し) アプリB (オフラインモード有り、Core Data 未使用) ANDPAD (オフラインモード有り、Core Data 使用) プロダクトによって 対応状況や利用技術が異なる
  20. © 2024 ANDPAD All Rights Reserved. Confidential ライブラリ側で I/F (HandlerProtocol)

    を定義し、ANDPAD 側で実装 実装した読み書き処理を SharedHandler へセット 27 黒板ライブラリでのローカルデータ読み書き|ソリューション AppDelegate で SharedHandler.shared.setUp() 呼び出し Handler をセット ANDPAD 側での SharedHandlerの初期化 SharedHandler.shared.handler の各メソッドを呼び出す 黒板機能ライブラリ各画面での読み書き実行
  21. © 2024 ANDPAD All Rights Reserved. Confidential ANDPAD 黒板のオフラインモード機能は 2

    チームが協力して 開発が進められた オフラインモード機能の開発を進めるにあたって、既存の  アーキテクチャの制約の中で様々な工夫が取られた 1 2 セッションのまとめ 29
  22. © 2024 ANDPAD All Rights Reserved. We are Hiring! 開発部公式

    X アカウント @andpad_dev カジュアル⾯談 応募フォーム