1Mercari iOSにおけるきらやばArchitectureとAutomationAkira Fukunaga (@kagemiku)iOS Engineer2019/11/25
View Slide
2Today’s Outlines01 ● 自己紹介0203● MercariにおけるiOS Engineer● きらやばArchitectureとAutomation
301 自己紹介
4Akira Fukunaga (@kagemiku)Software Engineer (iOS)Tech Lead at NewBiz & Category
5人生学校Mercari東京工業大学情報理工学院2018.04休学 2018.07退学 2019.03MerpayIntegration2018.08(サマーインターン)MerpayIntegration2018.09 - 2019.02(内定者インターン)退学旅行2019.03新卒入社2019.04New CustomerGrowth2019.07 - 09NewBiz2019.10 -(Tech Lead)
6● Merpay Integration (2018.08 - 2019.02)○ メルカリアプリへのメルペイ導入を行うチーム■ サイドメニュー撤廃 & 下タブ導入■ マイページ追加■ タイムラインUIの変更■ その他、必要な作業すべて ...● (Sub) Developer Menu Rearchitecture○ 社内向けの開発者機能の Rearchitecture (後述)○ Objc-C && 1 Storyboard でやばかったので勝手にやったインターン時代 (2018.08 - 2019.02)
7● New Customer Growth (2019.07 - 2019.09)○ 新規お客様向けの施策チーム■ 新規会員登録■ 各種オンボーディング■ まだ A/B テスト段階のため、詳細は割愛● NewBiz & Category (2019.10 - )○ 新規領域の開拓やカテゴリ特化を行う施策チーム■ 絶賛新機能開発中○ iOSのTech Lead新卒入社後 (2019.04 -)
802 MercariにおけるiOS Engineer
9● お客様に機能を届ける最後のまとめ役○ どんなに良いUI DesignやMLのモデルがあってもクライアントアプリに落とし込まないとお客様へは届けられない○ スーパー大事● バックグラウンド・国籍は様々○ 現在は全員で27人ほど (Mercari JPのみ)○ PR・Slack・Document全てにおいて英語iOS Engineerについて
10チーム構成mercari-iosProductivityTechnical ProblemsArchitectClientFeature1Feature1Feature1Feature1Feature NCI & CD
11チーム構成mercari-iosProductivityTechnical ProblemsArchitectClientFeature1Feature1Feature1Feature1Feature NCI & CD20数人で同時に開発、無理では
1203 きらやばArchitectureとAutomation
1303 きらやばArchitectureとAutomation
14きらやばArchitecture= MVVM + μVC + Store(※僕が勝手にそう呼んでるだけです )
15MVVMViewController (VC)ViewModelModel
16MVVM + μVCVCViewModelModelViewModelViewModelViewModelVC VC VC
17MVVM + μVCVCVC μVCμVC μVCVCμVC μVCComponent orientedarchitecture, like React
18MVVM + μVC
19● Rearchitectureチームの発足とコードベースの刷新 (2018年)○ iOSエンジニアが100人体制になってもスピードを落とさずに開発できるようなコードベースを作る○ 現在はその役割の一部を Architectチームが担う○ 共同開発でありがちな XIB(View)ファイルのconflictを見ることはほぼなくなった○ 事実として、現在20数人が同時に一つのアプリを開発できている => ✅成功● 参考○ メルカリJP初のiOSリアーキテクチャは、なぜ「最高に楽しい」のか○ MicroViewControllerで無限にスケールするiOS開発 - iOSDC 2018MVVM + μVC
20MVVM + μVCVMVM VMVM VMVMVM VMStateStateStateState StateStateStateStateEach VM has own StateIt’s hard to pass statechanges to other VMs...
21MVVM + μVC + StoreRootVMVM VMVM VMVMVM VMStateStoreDispatcherActionIntroduce Store like Fluxown
22Architectureの歴史2013: Pure MVC (Objc-C)2014: Pure MVC (Objc-C)2015: Pure MVC, heading to MVVM (Objc-C)2016: MVVM (Objc-C + Swift)2017: MVVM (Objc-C + Swift)2018: MVVM + μVC (Swift)2019: MVVM + μVC + Store (Swift)2020: heading to SwiftUI + Combine… Swift SwiftUI
23きらやばArchitecture= MVVM + μVC + Store(※僕が勝手にそう呼んでるだけです )
2403 きらやばArchitectureとAutomation
25Automation一ヶ月で約665 commitsがdevelopに入るdevelop branchとのconflict解決がやばいのでは
26Automation (GitHub Label)● In House Dev○ 内製のバイナリ配布システムにより commitされるたび自動配布● Nightly Merge○ 自動的にdevelopのmergeを行うPRを毎晩作成する● Auto Merge○ CIが終わり次第、自動で mergeする
27● Nightly Merge + Auto Mergeの組み合わせが強力○ CIがNightly Merge PR作成時に、conflictがない場合は自動で mergeする○ 朝会社に来ると「feature branchは既に最新のdevelop branchに追従した状態」になっている○ つまり、勝手にdevelop branchとの差分が解消されているため、 develop へ mergeする際に大量のconflictが発生することがほとんどなくなるAutomation (GitHub Label)最高
28● 最強のBotを社内で飼っている○ Binary Submit, App Release, Crash Report, Distribute Binary, etc….○ 諸般の事情により、その姿をお見せすることはまだできない。。。。○ (最強すぎるため)Automation (Bot)
29● Mercari iOSのコードベースは日々進化を遂げている○ 100人で同時に開発できるスケーラブルな Architectureを目指して○ 数々の技術的な挑戦が積み重なっている● Automationもがんばってる○ GitHub Label系Automation○ 社内最強Bot○ 参考: Automation/karakuri for increasing engineering productivity - TechBlog● 最高に楽しい○ iOS Engineerとして、メルカリ iOSのコードベースや開発環境はとても刺激的○ 技術で世界を殴っていきたい方、お待ちしております。Wrap up