Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ANDPAD黒板のオフラインモード機能 リリースまでの軌跡
Search
ANDPAD inc
August 24, 2024
Technology
0
320
ANDPAD黒板のオフラインモード機能 リリースまでの軌跡
栗山 徹
@kotetu
2024 年 8 月 24 日
iOSDC Japan 2024
ANDPAD inc
August 24, 2024
Tweet
Share
More Decks by ANDPAD inc
See All by ANDPAD inc
読もう! Android build ドキュメント
andpad
1
190
アンドパッドにおける CocoaPods ライブラリ群の SwiftPackageManager への移行戦略
andpad
0
37
Flutter は DCM が 9 割
andpad
1
52
Amplify で SPA をホスティングする際の注意点
andpad
1
48
マルチプロダクト開発の現場でAWS Security Hubを1年以上運用して得た教訓
andpad
0
71
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
430
本編では話さない Zig の話
andpad
2
270
"noncopyable types" の使いどころについて考えてみた
andpad
0
410
アンドパッドのマルチプロダクト戦略を支える SRE
andpad
1
280
Other Decks in Technology
See All in Technology
目次機能実装から理解するLexical Editor
wtdlee
0
120
Cline を知ると世界が広がった(だが、俺は Claude for Desktop で行く)
nassy20
3
200
RubyKaigi で得た課題解決法・美意識・モチベーション
morihirok
0
280
AIエージェント完全に理解した
segavvy
3
170
頻繁リリース × 高品質 = 無理ゲー? いや、できます!/20250306 Shoki Hyo
shift_evolve
0
120
ClineにNext.jsのプロジェクト改善をお願いしてみた / 20250321_reacttokyo_LT
optim
1
1k
Explainable Software Engineering in the Public Sector
avandeursen
0
190
fukuoka.ts #3 社内でESLintの共通設定を配りたい2025年春版
pirosikick
1
260
ISUCONにPHPで挑み続けてできるようになっ(てき)たこと / phperkaigi2025
blue_goheimochi
0
120
VISITS_20250311_こねくとあいとりおす.pdf
iotcomjpadmin
0
210
移行できそうでやりきれなかった 10年超えのシステムを葬るための戦略 / phper-kaigi-2025-ryu
carta_engineering
0
660
セマンティックレイヤー入門
ikkimiyazaki
7
2.1k
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
69
4.7k
Raft: Consensus for Rubyists
vanstee
137
6.8k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Into the Great Unknown - MozCon
thekraken
35
1.7k
How GitHub (no longer) Works
holman
314
140k
Building an army of robots
kneath
304
45k
Agile that works and the tools we love
rasmusluckow
328
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Site-Speed That Sticks
csswizardry
4
440
Transcript
© 2024 ANDPAD All Rights Reserved. ANDPAD 黒板のオフラインモード機能 リリースまでの軌跡 1
© 2024 ANDPAD All Rights Reserved. Confidential ANDPAD の紹介、および ANDPAD
黒板のオフラインモード機能の開発で得られた 知見の共有 セッションのテーマ 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
© 2024 ANDPAD All Rights Reserved. Confidential ANDPAD の紹介 ANDPAD
および ANDPAD 黒板 オフラインモード機能とリリースまでの道のり 開発中の様々な取り組み まとめ 1 2 3 4 5 アジェンダ 4
© 2024 ANDPAD All Rights Reserved. ANDPAD の紹介 01 5
© 2024 ANDPAD All Rights Reserved. Confidential 現場の効率化から経営改善まで一元管理できる クラウド型建設プロジェクト管理サービス 社 内
社 外 営業 / 監督 / 設計 事務 / 管理職 職人 / 業者 メーカー / 流通 案件管理 資料 工程表 写真 報告 チャット 黒板 図面 受発注 • • • ANDPAD とは 6
© 2024 ANDPAD All Rights Reserved. 幸せを築く人を、幸せに。 ※『建設業マネジメントクラウドサービス市場の動向とベンダシェア(ミックITリポート 2023年10月号)』(デロイト トーマツ
ミック経済研究所調べ) ANDPAD が支える建設 DX 利用社数 20.2万社 ユーザー数 51.0万人 住まいをつくる。ビルや施設をつくる。街をつくる。 生活を豊かにする建築・建設業は、幸せづくりと例えられます。 私たちは、その幸せづくりをする人たちをテクノロジーの力で 後押ししていきたい。心からそう考えてます。 我々はこれからもお客様の声をサービスに反映して、 建設業界及び建設業従事者様の業務効率化、 DX化を支援してまいります。 7 Mission
© 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
© 2024 ANDPAD All Rights Reserved. ANDPAD および ANDPAD 黒板
02 9
© 2024 ANDPAD All Rights Reserved. Confidential ANDPAD 10 •案件管理
•工程表 •写真管理 主な機能 •資料管理 •報告 •黒板 ANDPAD サービスのハブとなるアプリ 建設現場で利用するために必要な機能が詰まった 多機能アプリ
© 2024 ANDPAD All Rights Reserved. Confidential ANDPAD 黒板 11
工事で使用する黒板をデジタル化 黒板写真の撮影や写真管理を効率化 •事前に黒板情報を用意できる •黒板の作成・変更が楽 •黒板写真の管理・検索が楽 •改ざん検知機能を搭載 •写真台帳作成が楽 •オフライン環境で黒板写真を撮影できる など できること
© 2024 ANDPAD All Rights Reserved. Confidential ANDPAD 黒板は ANDPAD
の機能のひとつ 12 黒板機能は一部を除き社内ライブラリとして分離 黒板機能開発チーム・ANDPAD アプリ開発チーム間の連携が重要 ANDPAD 黒板機能 ANDPAD アプリ開発チーム 黒板機能開発チーム
© 2024 ANDPAD All Rights Reserved. オフラインモード機能とリリースまでの道のり 03 13
© 2024 ANDPAD All Rights Reserved. Confidential 14 建設現場の中には、十分な通信環境ではない現場もある 工事現場の通信環境|課題
地下 僻地 高所
© 2024 ANDPAD All Rights Reserved. Confidential 15 オンライン状態での利用が前提のアプリは通信環境が悪いと利用できない 特に写真撮影は現場でしかできないので、利用できないのはクリティカル
通信環境が悪い場合の弊害|課題 •案件情報の閲覧 •報告 •工程表の閲覧 など 利用できなくてもクリティカルではない機能 •黒板付き写真の撮影 → 現場でしか撮影できない、時間と共に現場は変化する 利用できないとクリティカルな機能
© 2024 ANDPAD All Rights Reserved. Confidential 16 通信環境が悪い現場でも黒板付き写真撮影できる機能を提供 オフラインモード機能|ソリューション
https://prtimes.jp/main/html/rd/p/000000102.000018154.html
© 2024 ANDPAD All Rights Reserved. Confidential 17 モード切り替えの概念を利用して利用方法を明確化 オフラインモード機能の使い方|ソリューション
(通信環境の良い場所で操作) •黒板データを予めダウンロードする (通信環境の悪い場所で操作) •オフラインモードへ切り替える •黒板写真を撮影する (ローカルへ保存される) (通信環境の良い場所で操作) •オフラインモードを終了する •ローカルへ保存した黒板写真をサーバーへ登録する 使い方
© 2024 ANDPAD All Rights Reserved. Confidential 18 2024 年
4 月 2 日 提供開始! 開発完了 https://prtimes.jp/main/html/rd/p/000000102.000018154.html
© 2024 ANDPAD All Rights Reserved. 開発中の様々な取り組み 04 19
© 2024 ANDPAD All Rights Reserved. Confidential 20 事前調査を経て、2023 年
11 月より本格着手 2 チーム合同で開発を進行 開発体制 •写真周りの Core Data の DB設計 •撮影した写真をローカルへ保存する機能 •黒板関連以外の画面のオフラインモード対応 ※ オフラインモード対応以外の機能開発も並行して進行 ANDPAD アプリ開発チーム •黒板情報周りの Core Data の DB設計 •黒板情報のダウンロード処理 •黒板関連画面のオフラインモード対応 黒板機能開発チーム
© 2024 ANDPAD All Rights Reserved. Confidential 21 Core Data
/ SDWebImage を利用 長期的な保守性担保や将来的な SwiftData の利用も考慮し判断 ローカルデータ管理方式の選定 •黒板情報の読み書き・検索 •写真情報の読み書き 画像以外のデータ管理 •黒板検索履歴の読み書き 既存ローカルデータ管理 ※ Realm を利用 •豆図画像の管理 •写真画像の管理 画像データの管理 黒板写真 (写真画像、写真情報) 黒板情報 豆 図 画 像 Core Data を利用 黒板情報・写真情報の管理 SDWebImage を利用 豆図画像の管理 将来的に Core Data へ移行 黒板検索履歴の管理 ※サンプル情報
© 2024 ANDPAD All Rights Reserved. Confidential 22 Strict Concurrency
対応を見据え、Sendable な struct へ変換して利用 Core Data の利用 Core Data のモデル Sendable な struct
© 2024 ANDPAD All Rights Reserved. Confidential 23 オンラインモード・オフラインモードでほぼ同じ UI
既存コードを活かしつつオフラインモード対応したい 既存コードのモード切り替え対応|課題 ANDPAD アプリの設計 MVVM パターン データ取得部分をはじめとして RxSwift を使用している箇所が多い • •
© 2024 ANDPAD All Rights Reserved. Confidential 24 モード切り換え時に画面を生成し直す 画面生成時にデータ取得クラスを差し換える
データ取得処理の差し換え|ソリューション オンラインモード時 ViewModel.dataFetcher に APIFetcher をセット
© 2024 ANDPAD All Rights Reserved. Confidential 25 モード切り換え時に画面を生成し直す 画面生成時にデータ取得クラスを差し換える
データ取得処理の差し換え|ソリューション オンラインモード時 ViewModel.dataFetcher に APIFetcher をセット オフラインモード時 ViewModel.dataFetcher に OfflineFetcher をセット
© 2024 ANDPAD All Rights Reserved. Confidential 26 黒板機能を利用するプロダクトが複数存在 Core
Data / SDWebImage を使った読み書きはアプリ本体側リポジトリに集約 黒板ライブラリでのローカルデータ読み書き|課題 黒板機能ライブラリ アプリA (オフラインモード無し) アプリB (オフラインモード有り、Core Data 未使用) ANDPAD (オフラインモード有り、Core Data 使用) プロダクトによって 対応状況や利用技術が異なる
© 2024 ANDPAD All Rights Reserved. Confidential ライブラリ側で I/F (HandlerProtocol)
を定義し、ANDPAD 側で実装 実装した読み書き処理を SharedHandler へセット 27 黒板ライブラリでのローカルデータ読み書き|ソリューション AppDelegate で SharedHandler.shared.setUp() 呼び出し Handler をセット ANDPAD 側での SharedHandlerの初期化 SharedHandler.shared.handler の各メソッドを呼び出す 黒板機能ライブラリ各画面での読み書き実行
© 2024 ANDPAD All Rights Reserved. まとめ 05 28
© 2024 ANDPAD All Rights Reserved. Confidential ANDPAD 黒板のオフラインモード機能は 2
チームが協力して 開発が進められた オフラインモード機能の開発を進めるにあたって、既存の アーキテクチャの制約の中で様々な工夫が取られた 1 2 セッションのまとめ 29
© 2024 ANDPAD All Rights Reserved. We are Hiring! 開発部公式
X アカウント @andpad_dev カジュアル⾯談 応募フォーム
© 2024 ANDPAD All Rights Reserved. Confidential アフターイベント開催します! 31 https://sansan.connpass.com/event/328182/