2021年6月16日と7月2日の2回に分けて、『iOS Tech Talk 〜 Multi module 戦略座談会 〜』 を開催しました。
この記事では、当日の内容を簡単に紹介します!YouTube上にライブのアーカイブがありますので、詳しくはぜひそちらをご覧ください。
- vol. 1:https://youtu.be/5p6h5yiQ2PQ
- vol. 2:https://youtu.be/glpfnnDDaz8
イベント概要
今回の iOS Tech Talkは、Multi module を活用している/したことがあるエンジニアたちが集まり、過去の失敗事例や解決策、ちょっとしたTipsなどの知見を共有しあうイベントです。
最初に各社の構成や手法を紹介した後、ディスカッションタイムと質疑応答を設けました。
- iOS Tech Talk 〜 Multi module 戦略座談会 vol.1 〜 – connpass
- iOS Tech Talk 〜 Multi module 戦略座談会 vol.2 〜 – connpass
登壇者
今回の登壇者は3名で、登壇者はiOS界隈で活躍中のエンジニア、クックパッド社所属の@giginet 、AbemaTV社所属の@akkyie、そしてメルペイの@masamichiuetaの3名が、各社の構成や手法についてお話しました。
パネルディスカッションでは、メルペイの Shingo Tamaki がモデレータを務めました。 登壇者の詳しいプロフィールはイベントページを参照してください。
iOS Tech Talk 〜 Multi module 戦略座談会 vol.1 〜 – connpass
クックパッド社のレシピアプリの Multi module 構成・手法紹介
まずはじめに、 @giginetさん によるクックパッド社のレシピアプリのMulti module 構成・手法について説明がありました。
クックパッド社のレシピアプリのモジュールの分割は、ビルド時間を減らすことを目的として構成されています。
そのため、検索やレシピ投稿、買い物機能などそれぞれの機能ごとに分けてモジュールとしてまとめた、feature moduleを用意して縦割りにしているそうです。
このような構成にすることで、アプリ全体をビルドしなくても一部のfeatureの動作確認ができるという大きなメリットがあるそうです。
一方で、縦割りにしてしまうとそれぞれの依存の解決が難しいという欠点がありますが、それをうまく解決していることをこちらのクックパッド社のテックブログに書かれているそうなので、ぜひ御覧ください。
コード生成を用いたiOSアプリマルチモジュール化のための依存解決 – クックパッド開発者ブログ
AbemaTV社の Multi module 構成・手法紹介
続いて、 @akkyieさん によるAbemaTV社のMulti module 構成・手法について説明がありました。
AbemaTV社のアプリはiOSとAndroidの設計を共通化する目的があるので、レイヤー分けも両プラットフォームで共通化していて、レイヤー分けは両プラットフォームで共通化していて、クリーンアーキテクチャの考え方を参考に以下のようなレイヤー分けをしているそうです。
- Domain Layer – サービスとして共通の知識
- Application Layer – アプリの仕様
- Data Layer & UI Layer – プラットフォームごとの具体的な実装
- アプリターゲット・共通ライブラリ
メルペイ社の Multi module 構成・手法紹介
最後に、メルペイの @masamichiueta がメルペイの構成を説明しました。
メルペイの機能はメルカリアプリの中に入っていることが前提なので、メルカリの機能の一部として開発しており、メルカリアプリ内で共通して使っているモジュール(shared)があり、さらにMerpay内で使用するsharedモジュールとfeatureモジュールがあります。
そして、featureモジュールはQRやCoupon、NFCなど機能ごとに分割されています。
メルカリアプリから、各featureモジュールに対して必要なDependencyをInjectionして(DI)、直接参照しなくても良いようにモジュールとの依存関係を解消しています。
座談会(ディスカッション)
座談会ではざっくばらんに以下の2つの話題についてディスカッションしました
- 各社の構成についてのメリット・デメリットについて
- 依存関係の解決について
その他、Q&Aの時間では以下のような内容が取り上げられ、内容を深堀りして議論しました。
Q. SandboxアプリってQAとかにも使用しますか?それとも主に開発やデバッグ向けだけですか?
Q. 分割された細かいモジュールの外部依存はどのようにハンドリングしていますか?
Q. 各社、全部SPMとかに統一しているのか、Cocoapodsとかと混用しているのか気になります。
Q. Featureモジュール分割すればするほど、Coreが肥大化する減少が起きているのですがどのように対処・対策されていますか?
Q. XCFrameworkは何で作っているんだろう?Carthage?
Q. ビルドしたライブラリのキャッシュはどうしている?(内外)
などなど…たくさんの質問が寄せられ、更にその質問から深堀りした議論が展開されてとても盛り上がり、あっという間に時間切れとなってしまったので、続編として第2回も開催されました。
第2回はまるっと1時間贅沢にお時間を頂いて、アンケートの事前質問やチャットからの質問に答えていきながら、更に深堀りした議論が展開されていました。
ぜひ第2回目は動画を視聴してほしいです!
- vol. 2:https://youtu.be/glpfnnDDaz8
最後に
メルカリグループはMerpay Tech Talk をはじめとしたエンジニア向けのイベントを定期的に開催しています。イベント開催案内を受け取りたい方は、connpassグループのメンバーになってくださいね!