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

6年間運用したiOSアプリの リアーキテクトについて 具体的に解説 / iOSDC 2023

Daiki Matsumoto
September 02, 2023

6年間運用したiOSアプリの リアーキテクトについて 具体的に解説 / iOSDC 2023

https://fortee.jp/iosdc-japan-2023/proposal/bf58e5d0-a9c5-4ebb-beed-1a6c6c92de8f

kintone は、サイボウズが世界中にチームワークを広めるため開発している「業務改善プラットフォーム」のクラウドサービスです。
kintone のモバイルアプリは約6年運用してきました。
日々の開発の中で、いくつかの保守的な判断が積み重なりコードの複雑性は増していきました。
ビジネスモデルの変化やチーム構成の変化への対応に追われ、開発速度は徐々に低下していきました。
既存のプロダクトの負債とどんなやり方で向きあったのか。弊社の1ケースをありのまま紹介します。

以下の内容は取り扱いません
- リアーキテクトの技術的な詳解
- iOS開発において最高のアーキテクチャとは何か

Daiki Matsumoto

September 02, 2023
Tweet

Other Decks in Programming

Transcript

  1. ⾃⼰紹介 • 松元 ⼤樹(まつもと だいき) • 𝕏: daikimat • 2011年にサイボウズに⼊社

    • web → モバイル、⼈材マネージャー等 • リモートワーカー • ⼦供3⼈と⾍取りや川遊びの⽇々
  2. リアーキ前の問題の例 • データフローとデータ⼿続がどちらもRx で表現されていて難解 • 複雑性をModelのネットワークで表現し ているのが難解→ヒエラルキーを追いか けなくてはいけない • モジュールとレイヤーが紐付いていない

    • 役割や命名がわかりにくい • レイヤードアーキテクチャが守られてい ない • iOS/Androidでドメイン層を共通化 →共通化⽤のコードが多い&難解 • ⼀部の機能をライブラリとして無理やり 切り出した後戻したことによって、 レイヤーと機能の⼀部が分散していて 理解に苦しむ • 密度がすごい • ゴミが多い • etc…
  3. • 開発開始時(kintone v2) プロダクトの設計思想が異なるプロト タイプ(1年もの)をベースにして開発 • iOS/Androidを1チームで • ビジネスロジックを iOS/Androidで共通化

    • この頃はモバイルエンジニアが5名と少なかった • 複数のサービスのモバイルアプリを担っていた • 最⼩コストで最速で作ると⾔う選択
  4. • サイボウズ Office 作り直しを始める (Apache Cordova → フルネイティブ) • サーバーサイドが共通の処理の部分を

    ライブラリとしてゴッソリ切り出し • 切り出しに引っ張られてユーティリティな どもライブラリ側に引越し • Officeを素早く作るための選択 • 3⼈体制に突⼊ プラットフォームの変更や ライブラリアップデートで⼿⼀杯に • この頃から求⼈活動に⼒をいれる
  5. リアーキ前の問題の例 • データフローとデータ⼿続がどちらもRx で表現されていて難解 • 複雑性をModelのネットワークで表現し ているのが難解→ヒエラルキーを追いか けなくてはいけない • モジュールとレイヤーが紐付いていない

    • 役割や命名がわかりにくい • レイヤードアーキテクチャが守られてい ない • iOS/Androidでドメイン層を共通化 →共通化⽤のコードが多い&難解 • ⼀部の機能をライブラリとして無理やり 切り出した後戻したことによって、 レイヤーと機能の⼀部が分散していて 理解に苦しむ • 密度がすごい • ゴミが多い • etc…
  6. 分割リアーキテクト メリット • 作業のスコープが⼩さくなりリスクをコントロールし やすい • 遅延・作業中の外部環境変化に柔軟に対応できる • ⾒積もりがしやすい •

    影響範囲が限定される • 理想的なアーキテクチャや その実装イメージが明確でなくても作業を進めること ができる • 機能開発と並⾏してリアーキテクト活動ができる
  7. 新技術導⼊や Swiftバージョン追従への⾒通しの変化 • モジュール単位なら導⼊の敷居は⾮常に下がった • Strict Concurrency Check • RxSwift

    → Swift Concurrency • Storyboard → SwiftUI • また業務で利⽤できることによって新技術を実プロ ダクトで⼿を動かしながら学ぶことができるように
  8. まとめ • モバイルアプリ開発は取り巻く環境の変化と切り離せない • ビジネスの中でのモバイルアプリの⽴ち位置の変化 • チーム構成の変化 • 保守的な判断によって認知負荷が⾼いコードになり得る •

    我々は全体リライトを検討したが挫折、 ⼩さく分割する⽅針のリアーキテクトを始めた • 分割によるマルチモジュール化は巨⼤な何かと向き合うのに相性が良かった • 初めの1歩を踏み出す事は偉⼤ やってみるとちゃんと進んだ 理解が進む、技術継承が進む、コード品質改善が進む