#presentation Date : 2021/03/18 [https://www.youtube.com/watch?v=SunXTADSYPc&list=WL&index=2](https://www.youtube.com/watch?v=SunXTADSYPc&list=WL&index=2) ## メルペイのスケーラビリティを支えるマルチモジュール開発 by Masamichi Ueta ![image](https://gyazo.com/63a7ebd45502d09d767ff4d2ad37e3fd/thumb/1000) - メルペイアプリのアーキテクチャ - 機能モジュールは、Static Library - 共通モジュールは、複数の機能モジュールから読み込まれるので Dynamic Framework - 機能モジュールに対して、サンドボックスのアプリがあり最終的にはメインアプリに組み込まれる - 歴史的変遷 - 立ち上げ - 機能モジュール 3つ + 共通モジュール1つ で全て Dynamic Framework - 機能モジュールは依存しなかった - 課題 - Framework 数が増えてしまって、起動時間に影響を与え始めた - 機能モジュールの依存が難しくなってきた - 課題の解決 - 画面参照を共通モジュールに定義して Dependency Injection をした - XcodeGen で依存関係の整理 - 新規モジュールをテンプレート化して簡単にサンドボックスアプリや新規モジュールの追加を容易化 - 機能モジュールの相互参照を整理 - 機能モジュールはアプリターゲットのみから参照されるようになったので Static Library化 ## マルチモジュールだからできる! feature branchを使わないfeature開発 by ku - Featureごとにブランチを切って開発していた - NigtlyでMasterを取り込んでいたが、よくコンフリクトする場合がある - 共通のEnumやLocalizable.stringsや共通のコンポーネントへの機能追加 が主 - QAビルドをそれぞれのFeatureごとにやってたが、本来は全てを結合してQAしたい - 理想 - 開発中もFeatureのコードもmainにブランチにマージ - リリースビルドにはfeatureのコードを含めない - バイナリサイズ - 機密保持 - 昔からある対策 - コンパイル時の `#if` に入れる - 今回の方法 - Featureのコードもmainにマージする - リリースビルド時には、Featureのframeworkをリンクしない - UberとかLyftがやってるモジュールの出し入れをするみたいな話と似てそう ## 複数端末のつらさを乗り越えてiOS UITestを実行する by takeshi - CircleCI での XCUITest の話 - ちょっと興味が薄かったので飛ばして見た