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

iOSアプリの 大きな技術的負債に立ち向かう

tinpay
April 12, 2023

iOSアプリの 大きな技術的負債に立ち向かう

tinpay

April 12, 2023
Tweet

More Decks by tinpay

Other Decks in Technology

Transcript

  1. 4 一部の先進的な人だけではな 、 世界中で働 あらゆる人 、自分自身の働 方を 常に「一歩先」へと進めていける プラットフォームを提供する すべての人に、

    一歩先の働き方を 働くをもっと楽しく、 創造的に  人生の大半を過ごすことになる「働 」という 時間に いて、ただ生活の糧を得るためだけではな 、 1人でも多 の人 より楽し 、自由な創造性を 存分に発揮で る社会を実現する Vision Mission ミッション・ビジョン
  2. 事業概要 *1 Chatworkセグメント以外の事業として、ESET社提供のセキュリティ対策ソフトウェア「ESET」の代理販売事業を展開。安定的な収益貢献となっている *2 Nielsen NetView 及びNielsen Mobile NetView Customized

    Report 2022年5月度調べ月次利用者(MAU:Monthly Active User)調査。   調査対象はChatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む47サービスをChatwork株式会社にて選定。 *3 2022年12月末時点 • 国内最大級のビジネスチャット「Chatwork」 を中心に、複数の周辺サービスを展開*1 • ビジネスチャットのパイオニアであり国内利用 者数No.1*2、導入社数は38.6万社*3を突破 • 電話やメール ら効率的なチャットへ、ビジネ スコミュニケーションの変化を加速させ、 プラットフォーム化を目指しています 5
  3. iOSアプリの歴史 ファーストリリース (Titanium) ネイティブ版リリース CoreData → Realm ReactiveCocoa → RxSwift

    Swift化 Chatwork Live リアクション モバイルマルチアカウント リンクプレビュー iOS5 iOS16 2023年 2011年 2016年 2018年 2020年 2014年 ネイティブ版 実装開始 (Objective-C / ReactiveCocoa) AST ブックマーク ダークモード対応 モバイル広告 行動分析(TreasureData) iPad 2カラム対応 メッセージ閲覧制限 Google / Apple 認証 In-App Purchase GDPR対応 RxSwift → Combine Swift Concurrency SwiftUI Swift Package Manager Carthage CocoaPods XcodeGen Mantle → Codable モバイルの技術 Chatwork新機能 9年
  4. iOSアプリが抱える技術的負債 1. Objective-Cのコード 残っている 2. ビルド時間 長い 3. ユニットテスト 少ない

    4. 特定の機能に ける属人性 高い 5. リアーキテクチャ 中途半端な状態で、レガシーなコード 多い
  5. iOSアプリが抱える技術的負債 1. Objective-Cのコード 残っている 2. ビルド時間 長い 3. ユニットテスト 少ない

    4. 特定の機能に ける属人性 高い 5. リアーキテクチャ 中途半端な状態で、レガシーなコード 多い
  6. 2022年までのチーム構成 • 部署メンバーを2つチームに分 けた • iOS / Androidエンジニアが 1つのチームに混在している •

    両チームともスクラム開発を 行っている • 両チームを兼任しているPOと ScMがいる
  7. (参考) 認知負荷とは? ワーキングメモリに対して る負荷のこと。ワーキングメモリの容量は大 な 、認知負荷 増えす ると情報を処理し れな なる。

    出典: https://speakerdeck.com/mizuman/team-agility-by-learning-from-team-topology?slide=18 脳が処理できる量は限界があり、 負荷 高 なることでパフォーマンス 落ち、 学習や理解 止まる 開発生産性の低下
  8. 現在のチーム構成の特徴 ストリームアラインドチーム (Rouge) iOSプラットフォーム(Blanc) 価値 価値 Androidプラットフォーム(Noir) チームトポロジーで 定義されているチーム 役割

    Rouge ストリームアラインドチーム ユーザーに対して価値提供を行う Blanc プラットフォームチーム Rougeに対して価値提供を行う (iOS) Noir Rougeに対して価値提供を行う (Android)
  9. 各チームが行っている作業の一例 ストリームアラインドチーム (Rouge) • 新機能開発 • 不具合調査、修正 • テスト、検証 •

    運用、保守 プラットフォームチーム (Blanc / Noir) • リアーキテクチャ • コーディングルール策定 • リリース作業 • CI / CD • Rougeのサポート
  10. 現在のチームにおける課題 プラットフォームチーム作業の肥大化 • ストリームアラインドチームとプラットフォームチームの境界にある ボールをプラットフォームチームが全て取りがち ◦ 今後の対策 → 適切な境界を探し、権限委譲が必要 •

    自己組織化できていないストリームアラインドチームが増えると、プ ラットフォームチームと密にコミュニケーションが必要になり、コスト が増える ◦ 今後の対策 → チーム内で完結できるようなモジュール分割
  11. iOS/Android、ともにリアーキテクチャすすめています iOS • マルチモジュール化 • ApplicationService層のDI化 • Swift Concurrency •

    SwiftUI • SwiftUIを実現するためのリアーキテクチャ ◦ Single Source of Truthを実現する独自アーキテ クチャ (SVVS: State, View, ViewState) Android • マルチモジュール化 • MVVM再設計 • Clean Architecture • Jetpack Compose