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 共有会
  2. potatotips #79 今日伝えたいこと アーキテクチャを明文化して 得られたことと今後に向けての課題

  3. potatotips #79 Akihiko Sato / 株式会社ラクス Lead Engineer / @akkiee76

    SaaS 開発 (Backend, Frontend) / Mobile 開発 (iOS, Android) 上流工程、コードレビュー、チームの課題改善など 読書 / コーヒー / HHKB / 腹筋ローラー・体幹トレーニング 自己紹介
  4. potatotips #79 会社紹介 株式会社ラクス 「ITサービスで企業の成長を継続的に支援します」 をミッションに、お客様の課題解決やビジネスの成 長をを継続的に支援するクラウドサービスを提供し ています。

  5. potatotips #79 背景 楽楽精算では、現在 Kotlin 版と Cordova 版の 2つの Android

    アプリをリリースしています。 これまで Kotlin 版では、最新の Android バージョンに追従してきました が、Cordova 版では FW の対応の遅れにより、 タイムリーな対応が難しい状況でした。
  6. potatotips #79 背景 他にも ・ Cordova 自体の EOL (セキュリティリスク) ・ Cordova 開発者減少といった採用面での課題

    といった背景もあり、 Cordova から Kotlin へリプレースすることに
  7. potatotips #79 Android チームの現状 現在のチームは、 ・ Android 開発のナレッジが少ない   ・ 新規アプリの開発経験がない という課題があり、

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

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

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

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

  12. potatotips #79 1. アプリケーションレイヤー構成 基本的なレイヤー構成として、 3層レイヤー構成を採用。  ・ Presentation Layer  ・

    Domain Layer  ・ Data Layer それぞれを役割を定義しました。
  13. potatotips #79 2. Package 構成

  14. potatotips #79 3. 基本クラスに各ルールを明文化 ・Activity ・Fragment ・ViewModel ・UseCase ・Repository ・責務

    ・命名規則 ・ルール(制約) ・実装例 ・テストで確認すること ・テスト実装例 明文化 明文化した各ルールを適用したサンプルプロジェクトも用意
  15. potatotips #79 2ヶ月程度で開発完了 振り返ってみると・・・

  16. potatotips #79 実践してよかったこと • チームの技術力が向上 ◦ オブジェクト指向の成長 • 設計の議論をすることが少なく、開発に注力できた ◦

    チームの生産性が高まった (見積に対しての実績) • クラスの責務を小さくしたため、テストが描きやすかった ◦ テスト品質の担保
  17. potatotips #79 実践してイマイチだったこと • メンバーによってアーキテクチャの理解度がバラけた ◦ 事前の学習コスト(準備コスト)がやや不十分だった • ライブラリ選定がややモダンだった ◦

    AndroidX を中心としたライブラリの学習コストが不十分だった
  18. potatotips #79 技術的課題 技術駆動パッケージング* による参照関係   ・ 横断的に利用されるクラス・コンポーネントの配置   ・ package private を維持できない *

    設計パターンによるフォルダ分け
  19. potatotips #79 技術的課題イメージ NetworkError は Presentation Layer に配置されているが、 ・ Data

    Layer から throw ・ Presentation Layer で catch されるため各層から参照されることに。 このように層を跨いで参照されるクラスが存在している。
  20. potatotips #79 技術的課題へのアプローチ Before After • マルチプロジェクトを採用し、抽象クラスはコアドメインに移行 • 技術駆動パッケージングからドメイン駆動パッケージングに移行

  21. potatotips #79 まとめ アーキテクチャを明文化すると、 1. チームの技術力の向上 2. 開発の生産性向上 3. 品質向上

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

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