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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for tinpay tinpay
April 12, 2023

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

Avatar for tinpay

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