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

アーキテクチャを明文化して開発に臨んだ話

akkie76
June 22, 2022

 アーキテクチャを明文化して開発に臨んだ話

akkie76

June 22, 2022
Tweet

More Decks by akkie76

Other Decks in Technology

Transcript


  1. Architecture
    を事前準備して臨んだ開発を振り返る 〜
    Android Architecture を明文化して
    新規開発に臨んだ話
    Akihiko Sato
    #78 iOS / Android
    開発
    Tips
    共有会

    View full-size slide

  2. 自己紹介
    佐藤 晶彦
    株式会社ラクス
    楽楽精算開発 モバイル開発
    / Lead Engineer
    SaaS (Backend, Frontend) / Mobile (iOS, Android)
    主な業務は、設計 〜 受入、チームの課題改善など
    最近のマイブームは、縄跳びトレーニング

    View full-size slide

  3. 今日伝えたいこと
    開発開始前に
    Architecture
    を明文化して
    良かったこと
    &
    課題となったこと

    View full-size slide

  4. 背景
    弊社では、
    Native (Kotlin)
    版と
    Cordova
    版の
    2
    つの
    Android
    アプリをリリースしています。
    昨年
    Native
    版では
    Android 12
    対応などを進めて来ましたが、
    Cordova
    版では
    FW
    のリリースと開発期間が合わないこともあり、
    タイムリーな対応ができない状況でした。

    View full-size slide

  5. 背景
    2
    また、今後
    Cordova
    自体の開発が終了して
    EOL
    となった場合、
    セキュリティリスクが生じる可能性も。。。

    View full-size slide

  6. 背景
    3
    他にも、市場に
    Cordova
    開発者が少なくなっており、
    採用面においてもなかなか厳しい状況でした・・・。
    心機一転
    Native
    版に作り替えることになりました!

    View full-size slide

  7. Android
    チームの現状
    しかしながら、
    Android
    チームは若手が中心で、
    開発の苦戦は目に見えていたため、
    事前に基本的方針として
    Architecture
    を定めることしました。

    View full-size slide

  8. Architecture
    選定にあたって
    基本型として
    MVVM Architecture
    を採用することにしました。
    まず
    Architecture
    を選定するにあたり

    Android
    の公式
    Architecture
    である
    ・モダンな
    Architecture
    を扱える技術力あるチームではない

    View full-size slide

  9. Architecture
    選定にあたって
    MVVM Architecture

    2017~8
    年位から
    RxJava
    を主軸に
    台頭した
    Architecture
    ですが、
    Jetpack Compose
    の進化と今後の展望を考えると、
    Android
    の標準
    Architecure
    として
    MVVM Architecture

    今後も
    Architecture
    として運用しやすいと考えました。

    View full-size slide

  10. Architecture
    選定にあたって
    加えて
    Architecture
    検討する上で関心の分離を重要な原則とし、
    クラスの責務をできるだけシンプルに保つことで、
    ライフサイクルに関連する多くの問題を回避し、
    クラスごとのテストの容易性を向上させることにしました。

    View full-size slide

  11. 3
    層レイヤー構造による構成
    基本的なレイヤー構造として、
    ・プレゼンテーションレイヤー
    ・ドメインレイヤー
    ・データレイヤー
    3

    MVVM Architecture
    構成を採用

    View full-size slide

  12. プレゼンテーション層(
    Presentation Layer

    プレゼンテーション層からユーザーに情報を表示し、入力を受け付ける機能を
    持っています。具体的には、または外部入力によってデータが変更されるたび
    に、変更された情報を反映するよう
    UI
    を更新する必要があります。
    主にプレゼンテーション層は、
    Activity, Fragment, ViewModel

    BindingModel
    に変換するための
    Converter
    を配置します。また、
    RecyclerView
    を用いる場合、
    Adapter

    ViewHolder
    などもプレゼンテーション層に配置しま
    す。

    View full-size slide

  13. ドメイン層(
    Domain Layer

    複雑なビジネスロジックや複数の
    ViewModel
    で再利用される単純なビジネスロ
    ジックが隠蔽(カプセル化)されたレイヤーです。
    ビジネスロジックの複雑さに対処する場合や再利用性を優先する場合、対象の
    ロジックをこのレイヤーに実装します。
    また、各ユースケースでは異なるビジネスロジックが集約されるため、それぞれ
    のユースケースクラスは疎であることがアーキテクチャとして重要です。

    View full-size slide

  14. データ層(
    Data Layer

    データ層は、アプリで扱うデータに関連するロジックが集約されます。
    具体的には、アプリで使用するデータの作成、保存、変更方法(
    API
    に関するも
    のを含む)を決定する実際のロジックで構成されることがこのレイヤーの期待で
    す。
    データ層は、それぞれが
    0
    から複数のデータソースを含むことができるリポジトリ
    で構成されます。また、アプリで処理するデータの種類ごとに
    Repository
    を作成
    する必要があります。

    View full-size slide

  15. Package
    構成を明示

    View full-size slide

  16. 基本クラスのルールも明文化

    Activity

    Fragment

    ViewModel

    UseCase

    Repository

    DI Module
    ・責務
    ・命名規則
    ・ルール(制約)
    ・実装例
    ・テストで確認すること
    ・テスト実装例
    明文化
    ルールを明文化して、サンプルプロジェクトも用意

    View full-size slide

  17. 開発を進めて感じたこと
    ・チームの基本的技術力が向上
    ・開発中に基本的なアーキテクチャの議論することがない
      👉 開発に集中できる
    👉 チームの生産性が高まった
    ・責務によりクラスを小さく分けたためテストが書きやすかった
      👉 テスト品質の担保

    View full-size slide

  18. 課題に感じたこと

    Package
    構造
      👉 技術駆動パッケージングよる参照関係
    👉 レイヤー横断的な
    component
    をどう扱うか
    ・各レイヤーごとのによる依存性
      👉 依存関係逆転原則を活用できていない
    今後改善予定

    View full-size slide

  19. まとめ
    Architecture
    を明文化すると
      👉 チームの基本技術の向上
    👉 チームの生産性の向上
      👉 品質の向上
    といった恩恵を受けることができるので、
    皆様のチームでもトライしてみてはいかがでしょうか。

    View full-size slide

  20. オンラインイベントや中途採用を積極的に行ってます!
    最後に

    View full-size slide

  21. ご清聴ありがとうございました

    View full-size slide