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

アプリアーキテクチャを明文化しチームの開発効率をアップ

akkie76
October 30, 2022

 アプリアーキテクチャを明文化しチームの開発効率をアップ

「potatotips #79 iOS/Android 開発 Tips 共有会」で登壇した資料になります。

akkie76

October 30, 2022
Tweet

More Decks by akkie76

Other Decks in Technology

Transcript

  1. potatotips #79
    ©2022 RAKUS Co., Ltd.
    アプリアーキテクチャを明文化して
    チームの開発効率をアップ
    Android アーキテクチャを
    明文化して臨んだ新規開発を振り返る
    @akkiee76
    potatotips #79 iOS/Android 開発 Tips 共有会

    View full-size slide

  2. potatotips #79
    今日伝えたいこと
    アーキテクチャを明文化して
    得られたことと今後に向けての課題

    View full-size slide

  3. potatotips #79
    Akihiko Sato / 株式会社ラクス Lead Engineer / @akkiee76
    SaaS 開発 (Backend, Frontend) / Mobile 開発 (iOS, Android)
    上流工程、コードレビュー、チームの課題改善など
    読書 / コーヒー / HHKB / 腹筋ローラー・体幹トレーニング
    自己紹介

    View full-size slide

  4. potatotips #79
    会社紹介
    株式会社ラクス
    「ITサービスで企業の成長を継続的に支援します」
    をミッションに、お客様の課題解決やビジネスの成
    長をを継続的に支援するクラウドサービスを提供し
    ています。

    View full-size slide

  5. potatotips #79
    背景
    楽楽精算では、現在 Kotlin 版と Cordova 版の
    2つの Android アプリをリリースしています。
    これまで Kotlin 版では、最新の Android バージョンに追従してきました
    が、Cordova 版では FW の対応の遅れにより、
    タイムリーな対応が難しい状況でした。

    View full-size slide

  6. potatotips #79
    背景
    他にも
    ・ Cordova 自体の EOL (セキュリティリスク)
    ・ Cordova 開発者減少といった採用面での課題
    といった背景もあり、
    Cordova から Kotlin へリプレースすることに

    View full-size slide

  7. potatotips #79
    Android チームの現状
    現在のチームは、
    ・ Android 開発のナレッジが少ない
      ・ 新規アプリの開発経験がない
    という課題があり、
    リプレース開発の苦戦は目に見えていました。

    View full-size slide

  8. potatotips #79
    現状へのアクション
    開発の推進を目的としたアクションとして
    アーキテクチャを選定し、明文化することにしました。

    View full-size slide

  9. potatotips #79
    アーキテクチャ選定にあたって①
    以下の観点から、MVVM アーキテクチャを採用
    ・ Android 公式アーキテクチャ
    ・ モダンアーキテクチャは、技術的に難しい
    * MVVM アーキテクチャイメージ

    View full-size slide

  10. potatotips #79
    アーキテクチャ選定にあたって②
    また、アーキテクチャを検討する上で
    ・ 関心の分離を重要原則とする
    ・ クラスの責務をできるだけシンプル/コンパクトに保つ
    ・ 各クラスのテストの容易性を向上させること
    を大方針とすることに。

    View full-size slide

  11. potatotips #79
    ここからは
    実際に明文化した内容を紹介します。

    View full-size slide

  12. potatotips #79
    1. アプリケーションレイヤー構成
    基本的なレイヤー構成として、
    3層レイヤー構成を採用。
     ・ Presentation Layer
     ・ Domain Layer
     ・ Data Layer
    それぞれを役割を定義しました。

    View full-size slide

  13. potatotips #79
    2. Package 構成

    View full-size slide

  14. potatotips #79
    3. 基本クラスに各ルールを明文化
    ・Activity
    ・Fragment
    ・ViewModel
    ・UseCase
    ・Repository
    ・責務
    ・命名規則
    ・ルール(制約)
    ・実装例
    ・テストで確認すること
    ・テスト実装例
    明文化
    明文化した各ルールを適用したサンプルプロジェクトも用意

    View full-size slide

  15. potatotips #79
    2ヶ月程度で開発完了
    振り返ってみると・・・

    View full-size slide

  16. potatotips #79
    実践してよかったこと
    ● チームの技術力が向上
    ○ オブジェクト指向の成長
    ● 設計の議論をすることが少なく、開発に注力できた
    ○ チームの生産性が高まった (見積に対しての実績)
    ● クラスの責務を小さくしたため、テストが描きやすかった
    ○ テスト品質の担保

    View full-size slide

  17. potatotips #79
    実践してイマイチだったこと
    ● メンバーによってアーキテクチャの理解度がバラけた
    ○ 事前の学習コスト(準備コスト)がやや不十分だった
    ● ライブラリ選定がややモダンだった
    ○ AndroidX を中心としたライブラリの学習コストが不十分だった

    View full-size slide

  18. potatotips #79
    技術的課題
    技術駆動パッケージング* による参照関係
      ・ 横断的に利用されるクラス・コンポーネントの配置
      ・ package private を維持できない
    * 設計パターンによるフォルダ分け

    View full-size slide

  19. potatotips #79
    技術的課題イメージ
    NetworkError は Presentation Layer
    に配置されているが、
    ・ Data Layer から throw
    ・ Presentation Layer で catch
    されるため各層から参照されることに。
    このように層を跨いで参照されるクラスが存在している。

    View full-size slide

  20. potatotips #79
    技術的課題へのアプローチ
    Before After
    ● マルチプロジェクトを採用し、抽象クラスはコアドメインに移行
    ● 技術駆動パッケージングからドメイン駆動パッケージングに移行

    View full-size slide

  21. potatotips #79
    まとめ
    アーキテクチャを明文化すると、
    1. チームの技術力の向上
    2. 開発の生産性向上
    3. 品質向上
    といった恩恵を受けることができます。

    View full-size slide

  22. potatotips #79
    まとめ
    また、開発中に発生する技術的負債を解決することで、
    よりチームの技術力の向上に繋がります!
    ぜひチームでトライしてみてはいかがでしょうか。

    View full-size slide

  23. potatotips #79
    ご静聴ありがとうございました

    View full-size slide