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

Mercari 10years iOS Development

Motoki Narita
September 03, 2023

Mercari 10years iOS Development

フリマ・スマホ決済事業を提供するメルカリは、サービスローンチから今年で10周年を迎えることができました。

この10年間、Objective-C での開発から始まり、Swift での Re-architecture、 SwiftUI での作り直しと、数年に一度、そのタイミングでのメルカリにとってベストであろう技術選定を行い、刷新を行ってきました。UI/UXにおいても、下タブ化、 Design System、UXモニタリングシステムの構築など、メルカリはより使いやすいサービスを提供するため、技術の進化に Go Bold に挑戦を続けています。

このトークでは、メルカリのiOS開発10年の歩みを様々な観点から振り返り、どのような課題に向き合い、技術的チャレンジを行ってきたかをご紹介します。

Motoki Narita

September 03, 2023
Tweet

More Decks by Motoki Narita

Other Decks in Technology

Transcript

  1. 2 • 株式会社メルカリ
 • Director of Engineering
 • 2016年入社 (在籍7年)


    • メルカリ本体や新規事業の開発を経て
 現在は Mobile, Web, Backend のArchitect チームを管轄
 • 現在 iOSアプリ開発はしていない
 • 2016年〜2019年まで iOSDC の
 コアスタッフ
 @motokiee

  2. 6 バリュー Go Bold All for One Be a Pro

    https://careers.mercari.com/jp/mission-values/
  3. 21 • フリマアプリ「メルカリ」開始 ◦ 2013年7月2日 にAndroid版スタート ◦ 2013年7月23日 にiPhone版スタート •

    「App Store Best of 2013 今年のアプリ」を受賞 ◦ https://about.mercari.com/press/news/articles/ 201312appstore/ サービスとしての主な出来事
  4. 30 • Objective-C、MVC(Model-View-Controller)ベー スの開発 ◦ iOS4~iOS7がサポート対象 • UICollectionViewはiOS6以降サポートだったため、 iOS4, 5向けには

    PSTCollectionView を 使っていた • AFNetworking, SVProgressHUDなどお馴染みの Libraryに加え、まだ Apple に買収される前の Testflight SDK も利用されていた 2013年の技術トピック1
  5. 34 2014年のiOS周辺技術の主な出来事 • Swift 発表 • iOS8 発表 • iPhone

    6, iPhone 6 Plus • Apple Watch 発表 (9月、発売は2015年)
  6. 43 2015年のiOS周辺技術の主な出来事 • Swift 2 発表 • iOS9 発表 •

    iPhone 6s, iPhone 6s Plus • Apple Watch 発売 (4月)
  7. 44 • 1月に1000万ダウンロード突 破 • らくらくメルカリ便の スタート • 新規事業を手掛ける子会社 ソウゾウの設立

    2015年のサービス・会社としての主な出来事 https://about.mercari.com/press/news/articles/20150202_infographic/
  8. 50 • iOS10 発表 • iPhone 7, iPhone 7 Plus

    • 第1回 iOSDC Japan 2016 が開催 2016年のiOS周辺技術の主な出来事
  9. 52 • 匿名配送でより安心して取引できるように • アメリカのApp Store で US版メルカリが Top3にラ ンクイン

    • 新規事業である メルカリ アッテ がリリース (クローズ済み) 2016年のサービス・会社としての主な出来事 https://about.mercari.com/press/news/articles/20160317_mercariatte/
  10. 60 • プロダクトの情報としては信頼度が高い • ただし途中で Redmine から JIRAに切り替わっている • Redmineもまだ生きているが検索はもうできない

    ◦ どちらにしろチケット多すぎて見きれない ◦ Pull Request に書かれているチケット番号らしきものを 手がかりにして調査しながら当時の動きや流れを把握 チケット管理ツールの探索
  11. 61 デザインファイルの捜索 • デザインファイルはコードのようにバージョン管理されない • この10年でツールが目まぐるしく移り変わった ◦ Photoshop, Sketch, Zeplin,

    Figma • 管理する場所も Dropbox → Google Drive に • 在籍歴の長いデザイナーに発掘を依頼しGet • App Store Connect APIを駆使してスクリーンショットの発掘に 成功
  12. 62 • git, GitHub を使う • 先人に頼る • コミュニケーションツールを使う •

    チケット管理ツールで検索 • デザインファイルをたどる → git 以外はいずれもなくなってしまう可能性が高い まとめ Tips
  13. 66 • USメルカリがリニューアル(iOS版は6月) • イギリスでサービスローンチ(3月) ※終了済み • メルカリ内新サービスや姉妹アプリが続々とリリース ◦ メルカリ

    カウル(5月) ◦ メルカリ メゾンズ(8月) ◦ メルカリチャンネル (7月) ◦ メルカリ Now(11月) ◦ ※全てクローズ済み • メルペイ設立 2017年のサービス・会社としての主な出来事 2
  14. 69 • USアプリのRewriteプロジェクト “Double” は ネイティブコードに加えて React Native を導入 •

    ソウゾウから立ち上がった姉妹アプリは全てメルカリ アッテの 設計をベースとし、Swift, RxSwift, MVVM で 開発されていた • メルカリ本体の新機能のメルカリNow、 メルカリチャンネルもSwiftでの開発 2017年の技術トピック1
  15. 70 2017年の技術トピック2 • Objective-C と Swift 、新しい画面と古い画面が 混在するようになり少しずつ課題となってきていた • 事業として重要なコンポーネントほど複雑になる一方、

    複雑がゆえに改修が困難な状態 • また複数人で同じ機能に改修を入れる際、コンフリクトが発生 しやすくなり、人数を増やしても開発の速度が 上がりづらくなっていた
  16. 72 • iOS12 発表 • iPhone Xs, iPhone Xs Max,

    iPhone XR 2018年のiOS周辺技術の主な出来事
  17. 73 • メルチャリのリリース(2月) ※事業譲渡済み • マザーズ上場(6月) • メルカリロゴのリニューアル (10月) •

    メルカリ アッテ、メルカリ カウル、メルカリ メゾン ズ、メルカリNOW などがクローズ • 海外からの採用が進む 2018年のサービス・会社としての主な出来事
  18. 83 • 結果2: 着実に進行したが一部課題も残る ◦ 2018年7月にスタート以降、継続して取り組みが行われ 約1年後には全ての画面のリプレイスが完了 ◦ テストは以前に比べてかなり充実 ◦

    仕様書については継続的にアップデートが行われず課 題として残り続けることになった 2018年の技術トピック - Re-architecture
  19. 84 • 結果3: エンジニアの人数と比例して生産性も向上 ◦ コミッター数が 約4倍に ◦ コミット数が 3倍以上に

    ◦ コードの追加・削除も文字通り"桁違い"に ▪ 2017: ++401,142, --362,530 ▪ 2018: ++1,006,104, --724,462 2018年の技術トピック - Re-architecture
  20. 90 • SwiftUI発表 • iOS13, ダークモード 発表 • iPhone 11,

    iPhone 11 Pro, iPhone 11 Pro Max • iPadOS が iOS から独立 2019年のiOS周辺技術の主な出来事
  21. 99 • iOS14 • iPhone 12, iPhone 12 mini, iPhone

    12 Pro, iPhone 12 Pro Max • Apple Silicon 発表、M1 MacBook 発売 2020年のiOS周辺技術の主な出来事
  22. 102 • アプリ開発周辺基盤強化が本格化 ◦ Design System (2019年から継続) ◦ Test Automation

    (UI Test 強化) ◦ Weekly Release ◦ Client Event Logging 2020年の技術トピック - アプリ開発周辺基盤強化
  23. 104 • GroundUp App プロジェクトの開始 • アプリをゼロから書き換えるプロジェクト • 大規模リファクタリングではなく、 "GroundUp"

    でベースから書き直すことを選択 • “式年遷宮” を行う意思決定 2020年の技術トピック - GroundUp App 始動
  24. 105 • 方針 ◦ 宣言的UI (Swift UI, Jetpack Compose) をベースに

    iOS/Androidアプリをゼロから作り直し、Platform が提 供する新機能に素早く対応していけるようベースから書き 直す ◦ レガシーアプリ開発チームとは別に専属チームが 独立して開発をスタート 2020年の技術トピック - GroundUp App 始動
  25. 110 • iOS15 発表 • iPhone 13, iPhone 13 mini,

    iPhone 13 Pro, iPhone 13 Pro Max 2021年のiOS周辺技術の主な出来事
  26. 114 • Weekly Release スタート • アプリの更新サイクルが2週に1 度のリリースから週1リリースへ • 自動化によりリリース判定テス

    トを1日に短縮するなどこれまで の取り組みを土台として実現 2021年の技術トピック1 https://engineering.mercari.com/blog/entry/20211210-b5d0a7dc9c/
  27. 116 • USメルカリでは、React Native で フルスクラッチでアプリを書き直す プロジェクト “Denali” が4月にス タート

    • USでは2017年以来、2回目のリラ イトプロジェクト 2021年の技術要素 - 3 https://medium.com/mercari-engineering/why-we-de cided-to-rewrite-our-ios-android-apps-from-scratch-i n-react-native-9f1737558299
  28. 118 • iOS16 発表 • iPhone 14, iPhone 14 Plus,

    iPhone 14 Pro, iPhone 14 Pro Max • PassKey 2022年のiOS周辺技術の主な出来事
  29. 124 • Legacy リポジトリ のコードフリーズを実施 • iOSエンジニアも全て GroundUp App の開発に移り、

    2022年9月に GroundUp App の v5系がリリースされプ ロジェクト完了 • GroundUp App を前提に進んでいたプロジェクトもあった ため、全社を挙げてのプロジェクトとなった GroundUp App リリース
  30. 125 1. TestFlight でベータテスト(4月-7月) ◦ バグリポートを集め修正 2. App Store への部分的リリース(7月-9月)

    ◦ Weekly Release は維持 ◦ Legacy App(v4系) リリースは停止 ◦ GroundUp App (v5系) 段階リリースで徐々にロールアウト 3. Full Public Release (9.20にv5系を100%公開) GroundUp App ロールアウトプラン
  31. 130 • iOS17 発表 • Apple Vision Pro, visionOS 発表

    2023年のiOS周辺技術の主な出来事
  32. 138 • Architecture v2 • PassKeys • Performance Observation Platform

    • Release cycle stabilization いま取り組んでいること
  33. 141 • Apple プラットフォームでは、新しい技術要素も2-3年後に はスタンダードに変化していくサイクル • メルカリの場合 ◦ Swift 発表

    (2014年) ▪ → フルSwiftアプリ登場が2016年 (メルカリ アッテ) ◦ SwiftUI 発表 (2019年) ▪ → SwiftUIへの書き換え完了(2022年) 技術変化への適応
  34. 142 プロダクト、ビジネス、組織による環境の変化への適応 • メルカリでの組織的な取り組み ◦ Re-design (2014, 2019) ◦ Re-architecture(2018-2019)

    ◦ Re-write(2020-2022) ◦ US Re-write (2017, 2021-2022) ◦ Core/Architectチームの設立(2018年〜) ◦ アプリ開発周辺基盤強化(2019年〜)