Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

potatotips #79 2. Package 構成

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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