Slide 1

Slide 1 text

Multi Module Project at Merpay Chiharu TAKANAKA

Slide 2

Slide 2 text

自己紹介 ● 竹中 千晴(Chiharu TAKENAKA) ● Android エンジニア@Merpay ●   takenach (@ctake0005) ● shibuya.apk オーガナイザー

Slide 3

Slide 3 text

宣伝(shibuya.apk #33 @Mercari) 4月12日(金)19:30〜 https://shibuya-apk.connpass.com/event/124946/

Slide 4

Slide 4 text

職歴 アプリエンジニア 2009 年 1 月~2009 年 12 月 株式会社ナビタイムジャパン Androidエンジニア 2010 年 1 月~2018 年 4 月 株式会社ナビタイムジャパン Androidエンジニア 2018 年 5 月~現在 株式会社メルペイ 受託ソフトウェア開発 2003 年 4 月~2008 年 12 月 いろいろ作ってた

Slide 5

Slide 5 text

Project’s Core Concepts ● Favor Modularization ● Emphasize State Mutation ● Refactor over creation

Slide 6

Slide 6 text

Project’s Core Concepts ● Favor Modularization ● Emphasize State Mutation ● Refactor over creation

Slide 7

Slide 7 text

Merpay Androidが目指したプロジェクト構成 ● プロジェクトは、アトミックで再利用可能なユニット(≒モジュール) の集合である こと ● プロジェクトがスケールし、エンジニアが “どれだけ” 増えても、全員が気持ちよく 担当機能開発に集中できる構成であること ● (メルペイ機能を) 利用する側(=メルカリ) が必要とする機能のみをフレキシブル に機能提供できること Favor Modularization

Slide 8

Slide 8 text

● ちなみに、『Gradle Build はマルチモジュール化して、ちゃんと設定するとこでビ ルドが早くなるよ』という内容の Google I/O 2017 のセッション内容を発表したと きのスライドが下記なので、興味ある方はご覧ください。 https://speakerdeck.com/ctake0005/speeding-up-your-android-gradle-builds Favor Modularization

Slide 9

Slide 9 text

構成概要 モジュール群は、大きく4つのコ ンセプトで分割されている ● Common ● Feature ● API ● SDK SDK API Common Feature …

Slide 10

Slide 10 text

Common モジュール共通の基本機能の モジュール郡 ● common.android ● common.jvm ● common.networking ● common.ui ︙ SDK API Common Feature …

Slide 11

Slide 11 text

Feature 機能単位のモジュール郡 UIの有無によらず、提供する 個々の機能を1モジュールとし ている。モジュール間の参照関 係はない ● feature.dashboard ● feature.code ● feature.passcode ● feature.nfc ︙ SDK API Common Feature …

Slide 12

Slide 12 text

API SDKを正しく動作させるための 設定用インターフェースや利用 側が参照するデータモデルなど ● api.identity ● api.model ︙ SDK API Common … Feature

Slide 13

Slide 13 text

SDK SDK全体の最上位レベルモ ジュール 利用側に提供するAPIや各 Featureの呼び出し、Feature 間の遷移のハンドリング ● sdk.ftbo SDK API Common … Feature

Slide 14

Slide 14 text

現在 EM SDK API Feature Common メンバー 10

Slide 15

Slide 15 text

Project’s Core Concepts ● Favor Modularization ● Emphasize State Mutation ● Refactor over creation

Slide 16

Slide 16 text

Redux アーキテクチャを採用しています。 Emphasize State Mutation

Slide 17

Slide 17 text

Featureモジュール内の tree(イメージ) ● feature/nfc/provisioning ○ ProvisioningAction.kt ○ ProvisioningContract.kt ○ ProvisioningController.kt ← Viewの更新をしてる ○ ProvisioningReducer.kt ○ ProvisioningState.kt ← data class ○ ProvisioningViewModel.kt ← Storeを持っている Emphasize State Mutation

Slide 18

Slide 18 text

実際にどのように使っているか知りたい方へ ● 以前の Tech Talk で 発表された資料がありますので、興味のある方はそちらを ご参照ください。 ○ https://slides.com/yukochee/redux-powered-android-dev#/ ■ Talked by kittinunf Emphasize State Mutation

Slide 19

Slide 19 text

Project’s Core Concepts ● Favor Modularization ● Emphasize State Mutation ● Refactor over creation

Slide 20

Slide 20 text

当たり前のことなので割愛します!! Refactor over creation

Slide 21

Slide 21 text

現状の課題(だと思っていること)

Slide 22

Slide 22 text

現状の課題 ● “利用する側(=メルカリ) が必要とする機能のみをフレキシブルに機能提供でき ること” が実現できていない ○ SDKが持つ Feature 間の遷移処理と各 Feature モジュールの依存が高く、 個々の切り離しが難しい状態になっている ● Feature 間の遷移処理部が “賢く” なってしまっている ● “common.android” “common.ui” などの共通コンポーネントが 整理できていない

Slide 23

Slide 23 text

まとめ プロジェクト開始時から、チームとプロ ダクトの大規模化を想定したマルチモ ジュール化は ◎ GO BOLD なアーキテクチャ選択と長 期間の開発でいろいろな負債が溜 まっているのも事実 リリースしたので 負債を返済していくぞ!

Slide 24

Slide 24 text

Thank you!