Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
アプリアーキテクチャを明文化しチームの開発効率をアップ
akkie76
October 30, 2022
Technology
1
420
アプリアーキテクチャを明文化しチームの開発効率をアップ
「potatotips #79 iOS/Android 開発 Tips 共有会」で登壇した資料になります。
akkie76
October 30, 2022
Tweet
Share
More Decks by akkie76
See All by akkie76
Crashlytics と Android の連携で トラブルシューティングを効率化する
akkie76
0
140
こんなコードレビューは嫌だ
akkie76
0
420
アプリアーキテクチャを明文化しチームの開発効率をアップ
akkie76
1
870
チームの設計力を高めるためのTIPS
akkie76
0
510
明日からできるコードレビューの心構え
akkie76
0
300
これで失敗しない! JUnit 5 へのマイグレーション方法
akkie76
0
220
オブジェクト指向で類型化するコードレビュー
akkie76
0
230
アーキテクチャを明文化して開発に臨んだ話
akkie76
0
530
レビューガイドラインで技術力を見える化する
akkie76
0
710
Other Decks in Technology
See All in Technology
The Stable Team - 機能する安定したチームをつくる - / The Stable Team
takaking22
14
7.5k
Google Cloud Updates 2022/12/01-12/15
no24oka
1
150
エアドロップ for オープンソースプロジェクト
epicsdao
0
120
マネーフォワードクラウドを支える事業者基盤
machisuke
0
220
プログラミング支援AI GitHub Copilot すごいの話
moyashi
0
260
WINTICKET QA における Autify 活用
kj455
1
180
Deep dive in Reserved Instance ~脳死推奨量購入からの脱却~
kzkmaeda
0
130
PHPのimmutable arrayとは
hnw
1
130
オンプレk8sとEKSの並行運用の実際
ch1aki
0
110
テクニカルライターよ概念図を描くのです 〜テクニカルライターのためのイラストテクニック2〜 / cybozu illust technique2
yuki_kondo
13
3.7k
マイクロサービス宣言から8年 振り返りとこれから / Eight Years After the Microservices Declaration A Look Back and A Look Ahead
eisuke
2
120
UNIX は知らない。でも AWS は知ってる。 そんな僕が『 UNIX という考え方』を 読んでみた件
kentosuzuki
1
280
Featured
See All Featured
Debugging Ruby Performance
tmm1
67
11k
The Invisible Customer
myddelton
113
12k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
22
1.7k
Typedesign – Prime Four
hannesfritz
34
1.5k
VelocityConf: Rendering Performance Case Studies
addyosmani
317
22k
How to name files
jennybc
46
73k
Clear Off the Table
cherdarchuk
79
290k
Git: the NoSQL Database
bkeepers
PRO
418
60k
Web Components: a chance to create the future
zenorocha
304
40k
Visualization
eitanlees
128
12k
Raft: Consensus for Rubyists
vanstee
130
5.7k
Why Our Code Smells
bkeepers
PRO
326
55k
Transcript
potatotips #79 ©2022 RAKUS Co., Ltd. アプリアーキテクチャを明文化して チームの開発効率をアップ Android アーキテクチャを
明文化して臨んだ新規開発を振り返る @akkiee76 potatotips #79 iOS/Android 開発 Tips 共有会
potatotips #79 今日伝えたいこと アーキテクチャを明文化して 得られたことと今後に向けての課題
potatotips #79 Akihiko Sato / 株式会社ラクス Lead Engineer / @akkiee76
SaaS 開発 (Backend, Frontend) / Mobile 開発 (iOS, Android) 上流工程、コードレビュー、チームの課題改善など 読書 / コーヒー / HHKB / 腹筋ローラー・体幹トレーニング 自己紹介
potatotips #79 会社紹介 株式会社ラクス 「ITサービスで企業の成長を継続的に支援します」 をミッションに、お客様の課題解決やビジネスの成 長をを継続的に支援するクラウドサービスを提供し ています。
potatotips #79 背景 楽楽精算では、現在 Kotlin 版と Cordova 版の 2つの Android
アプリをリリースしています。 これまで Kotlin 版では、最新の Android バージョンに追従してきました が、Cordova 版では FW の対応の遅れにより、 タイムリーな対応が難しい状況でした。
potatotips #79 背景 他にも ・ Cordova 自体の EOL (セキュリティリスク) ・ Cordova 開発者減少といった採用面での課題
といった背景もあり、 Cordova から Kotlin へリプレースすることに
potatotips #79 Android チームの現状 現在のチームは、 ・ Android 開発のナレッジが少ない ・ 新規アプリの開発経験がない という課題があり、
リプレース開発の苦戦は目に見えていました。
potatotips #79 現状へのアクション 開発の推進を目的としたアクションとして アーキテクチャを選定し、明文化することにしました。
potatotips #79 アーキテクチャ選定にあたって① 以下の観点から、MVVM アーキテクチャを採用 ・ Android 公式アーキテクチャ ・ モダンアーキテクチャは、技術的に難しい * MVVM
アーキテクチャイメージ
potatotips #79 アーキテクチャ選定にあたって② また、アーキテクチャを検討する上で ・ 関心の分離を重要原則とする ・ クラスの責務をできるだけシンプル/コンパクトに保つ ・ 各クラスのテストの容易性を向上させること を大方針とすることに。
potatotips #79 ここからは 実際に明文化した内容を紹介します。
potatotips #79 1. アプリケーションレイヤー構成 基本的なレイヤー構成として、 3層レイヤー構成を採用。 ・ Presentation Layer ・
Domain Layer ・ Data Layer それぞれを役割を定義しました。
potatotips #79 2. Package 構成
potatotips #79 3. 基本クラスに各ルールを明文化 ・Activity ・Fragment ・ViewModel ・UseCase ・Repository ・責務
・命名規則 ・ルール(制約) ・実装例 ・テストで確認すること ・テスト実装例 明文化 明文化した各ルールを適用したサンプルプロジェクトも用意
potatotips #79 2ヶ月程度で開発完了 振り返ってみると・・・
potatotips #79 実践してよかったこと • チームの技術力が向上 ◦ オブジェクト指向の成長 • 設計の議論をすることが少なく、開発に注力できた ◦
チームの生産性が高まった (見積に対しての実績) • クラスの責務を小さくしたため、テストが描きやすかった ◦ テスト品質の担保
potatotips #79 実践してイマイチだったこと • メンバーによってアーキテクチャの理解度がバラけた ◦ 事前の学習コスト(準備コスト)がやや不十分だった • ライブラリ選定がややモダンだった ◦
AndroidX を中心としたライブラリの学習コストが不十分だった
potatotips #79 技術的課題 技術駆動パッケージング* による参照関係 ・ 横断的に利用されるクラス・コンポーネントの配置 ・ package private を維持できない *
設計パターンによるフォルダ分け
potatotips #79 技術的課題イメージ NetworkError は Presentation Layer に配置されているが、 ・ Data
Layer から throw ・ Presentation Layer で catch されるため各層から参照されることに。 このように層を跨いで参照されるクラスが存在している。
potatotips #79 技術的課題へのアプローチ Before After • マルチプロジェクトを採用し、抽象クラスはコアドメインに移行 • 技術駆動パッケージングからドメイン駆動パッケージングに移行
potatotips #79 まとめ アーキテクチャを明文化すると、 1. チームの技術力の向上 2. 開発の生産性向上 3. 品質向上
といった恩恵を受けることができます。
potatotips #79 まとめ また、開発中に発生する技術的負債を解決することで、 よりチームの技術力の向上に繋がります! ぜひチームでトライしてみてはいかがでしょうか。
potatotips #79 ご静聴ありがとうございました