iOS アーキテクチャ 会社(サービス)ごとに調べてみた 2024年4月版

## 背景

現プロジェクトでSwiftUI導入にあたり、リアーキテクチャの必要が出てきたため、他社導入事例を調査しました。

## 登場アーキテクチャ

* MVVM
* Redux系統(TCA, 独自)
* Clean Architecture系統(VIPER)
* その他

## おことわり

* 実際に会社の人に聞きに行ったわけではないので非公式です
* インターネット上で取得できる情報に限るため正確性に欠ける恐れがあります
* また参照した情報が古い場合もあります
* より正確に知りたい場合は自分で調べていただけるとありがたいです
* 情報の出所(採用ページ、技術ブログなど)
* 大量の情報を扱っているため企業名など正確性に欠けます
* 選出企業条件：iOSDCスポンサー企業で自社でサービスを持っているなど
* 順不同

## 一覧

### MVVM

|企業名|サービス名|アーキテクチャ| 参考URL|
|:----|:----|:----|:----|
|yappli| |MVVM| [URL](https://open.talentio.com/r/1/c/yappli/pages/48785)|
|GMO INTERNET GROUP |minne|MVVM<br>変更前：MVC -> MVP|[URL](https://tech.pepabo.com/2023/05/24/minne-ios-refactoring-swiftui/)|
|ZOZO|ZOZO|MVVM + Coordinators|[URL](https://speakerdeck.com/player/48ae3ad104ac418faaea00ade1ec3fed)|
|ZOZO|ZOZOFIT|View、Config、Manager(ほぼMVVM)| |
|coconala| |MVVM + CleanArchitecture <br>変更前：アーキテクチャが混在|[URL](https://zenn.dev/coconala/articles/e2bb785d60c6b9) <br> [URL](https://zenn.dev/coconala/articles/d721a5f0edca6e)|
|cluster| |MVVM(ViewController / ViewModel / Coordinator / storyboard) uikitがメイン？|[URL](https://qiita.com/ulaph/items/09f6f46516f5cf3dde9a) <br> [URL](https://tech-blog.cluster.mu/entry/2022/04/04/141600)|
|Wantedly|People|MVVM| [URL](https://docs.wantedly.dev/fields/apps/mobile-architecture) |
|DeNA|マンガボックス|MVVMもどき|[URL](https://qiita.com/kenmaz/items/18c31577f8ab712d7080)|
|Andpad| |MVVM| |
|STORES| |MVVM +  Layerd Architecture|[URL](https://hrmos.co/pages/storesinc/jobs/1955532759412572164)|
|JCB| |MVVM + CleanArchitecture|[URL](https://tech.jcblab.jp/entry/2022/09/14/173512)|

### Redux系統(TCA, 独自)

|企業名|サービス名|アーキテクチャ| 参考URL|
|:----|:----|:----|:----|
|mercari|メルペイ|GU Appでは、それが一新され共通アーキテクチャが策定されました。SwiftUIをベースし、Reduxや TCA などからインスパイアされた単方向データフローの独自のアーキテクチャです。<br>変更前：色々| |
|wealthnavi| |Statefulアーキテクチャ(ReduxやTCAに近い)<br>変更前：（MVP,MVVM,Clean Architecture etc..）|[URL](https://tech.wealthnavi.com/entry/20230428/1682643600)|
|Wantedly|Visit|Flux(ReactorKit) -> Flux(KMP Reactor) -> Flux(KMP Reactor)|[URL](https://docs.wantedly.dev/fields/apps/mobile-architecture)|
|RIZAP| |TCA|[URL](https://note.com/rizap_tech/n/ne1bffa1c6279)|
|pixiv|pixiv Sketch|TCA|[URL](https://inside.pixiv.blog/2023/11/20/120000)|
|Cyber Agent| |TCA | |
|freee|freee請求書|TCA (swiftui)| |

### Clean Architecture系統(VIPER)

|企業名|サービス名|アーキテクチャ| 参考URL|
|:----|:----|:----|:----|
|moneyfoward|iOS版マネーフォワードME|Clean Architecture| |
|DMM|DMMポイントクラブ|VIPER
Combineを使ったVIPERアーキテクチャにFlowControllerパターンを加えた設計| |
|voicy| |VIPER| |
|medpeer|DietPlus|VIPER(uikit)| |


### その他

|企業名|サービス名|アーキテクチャ| 参考URL|
|:----|:----|:----|:----|
|ZOZO|ZOZOTOWN|MVC| |
|ZOZO|WEAR|MVC| |
|DeNA|Kencom|MVC+Storeパターン|[URL](https://speakerdeck.com/buildersbox/beyond-clean-architecture-and-introducing-swiftui?slide=27)|
|yahoo japan|PayPayモールiOS|MVP+Coordinator <br>Model層はUseCase+Repository+Entitiy|[URL](https://techblog.yahoo.co.jp/entry/20191202785270/)<br> [URL](https://techblog.yahoo.co.jp/entry/2021120130233754/)<br> [URL](https://techblog.yahoo.co.jp/entry/20191225797663/)|
|medley| |MVP + Router| |
|GO| |RIBs アーキテクチャ<br>変更前: MVVM と独自|[URL](https://lab.mo-t.com/blog/ribs-in-part)|
|Chatwork| |独自<br>『SVVS』はStore / View / ViewStateの頭文字を取ったものです。| |
|LINE|LINE漫画|MVCとMVVMが混在
RxSwiftとRealmとSnapKit| |
|サイボウズ| |明言がなく試行錯誤中？<br>変更前: MVVM + VIPER(Router)|[URL](https://speakerdeck.com/daikimat/iosdc-2023?slide=50)|


### まとめ

* iOSにおけるアーキテクチャのベストプラクティスは今のところ無さそうです。
* MVVM, Redux系統, Clean Architecture系統で、ややMVVM,Redux系統が主流のような印象を受けました。
* Androidだと公式にMVVMが推奨アーキテクチャとしているみたいなのでiOSもそうだと楽になりそうだなと思いました。
* Redux系統でもTCAを使わずに独自で進めているアプリもあり、なるべくサードパーティに頼らないような動きを感じました。

## あとがき

* 自分の担当プロジェクトだけではなく、どのアプリも同じような問題(様々なアーキテクチャが混在していたり、自動テストが存在しない、リアーキテクチャの必要性)に遭遇しているということが分かりました。