Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Multi Module Project at Merpay

C6364c3b33b6508f1f41733f57576d83?s=47 takenach
March 27, 2019

Multi Module Project at Merpay

C6364c3b33b6508f1f41733f57576d83?s=128

takenach

March 27, 2019
Tweet

Transcript

  1. Multi Module Project at Merpay Chiharu TAKANAKA

  2. 自己紹介 • 竹中 千晴(Chiharu TAKENAKA) • Android エンジニア@Merpay •   takenach

    (@ctake0005) • shibuya.apk オーガナイザー
  3. 宣伝(shibuya.apk #33 @Mercari) 4月12日(金)19:30〜 https://shibuya-apk.connpass.com/event/124946/

  4. 職歴 アプリエンジニア 2009 年 1 月~2009 年 12 月 株式会社ナビタイムジャパン

    Androidエンジニア 2010 年 1 月~2018 年 4 月 株式会社ナビタイムジャパン Androidエンジニア 2018 年 5 月~現在 株式会社メルペイ 受託ソフトウェア開発 2003 年 4 月~2008 年 12 月 いろいろ作ってた
  5. Project’s Core Concepts • Favor Modularization • Emphasize State Mutation

    • Refactor over creation
  6. Project’s Core Concepts • Favor Modularization • Emphasize State Mutation

    • Refactor over creation
  7. Merpay Androidが目指したプロジェクト構成 • プロジェクトは、アトミックで再利用可能なユニット(≒モジュール) の集合である こと • プロジェクトがスケールし、エンジニアが “どれだけ” 増えても、全員が気持ちよく

    担当機能開発に集中できる構成であること • (メルペイ機能を) 利用する側(=メルカリ) が必要とする機能のみをフレキシブル に機能提供できること Favor Modularization
  8. • ちなみに、『Gradle Build はマルチモジュール化して、ちゃんと設定するとこでビ ルドが早くなるよ』という内容の Google I/O 2017 のセッション内容を発表したと きのスライドが下記なので、興味ある方はご覧ください。

    https://speakerdeck.com/ctake0005/speeding-up-your-android-gradle-builds Favor Modularization
  9. 構成概要 モジュール群は、大きく4つのコ ンセプトで分割されている • Common • Feature • API •

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

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

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

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

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

  15. Project’s Core Concepts • Favor Modularization • Emphasize State Mutation

    • Refactor over creation
  16. Redux アーキテクチャを採用しています。 Emphasize State Mutation

  17. Featureモジュール内の tree(イメージ) • feature/nfc/provisioning ◦ ProvisioningAction.kt ◦ ProvisioningContract.kt ◦ ProvisioningController.kt ←

    Viewの更新をしてる ◦ ProvisioningReducer.kt ◦ ProvisioningState.kt ← data class ◦ ProvisioningViewModel.kt ← Storeを持っている Emphasize State Mutation
  18. 実際にどのように使っているか知りたい方へ • 以前の Tech Talk で 発表された資料がありますので、興味のある方はそちらを ご参照ください。 ◦ https://slides.com/yukochee/redux-powered-android-dev#/

    ▪ Talked by kittinunf Emphasize State Mutation
  19. Project’s Core Concepts • Favor Modularization • Emphasize State Mutation

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

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

  22. 現状の課題 • “利用する側(=メルカリ) が必要とする機能のみをフレキシブルに機能提供でき ること” が実現できていない ◦ SDKが持つ Feature 間の遷移処理と各

    Feature モジュールの依存が高く、 個々の切り離しが難しい状態になっている • Feature 間の遷移処理部が “賢く” なってしまっている • “common.android” “common.ui” などの共通コンポーネントが 整理できていない
  23. まとめ プロジェクト開始時から、チームとプロ ダクトの大規模化を想定したマルチモ ジュール化は ◎ GO BOLD なアーキテクチャ選択と長 期間の開発でいろいろな負債が溜 まっているのも事実

    リリースしたので 負債を返済していくぞ!
  24. Thank you!