Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アーキテクチャを明文化して臨んだ新規アプリ開発戦略
Search
akkiee76
September 26, 2023
Programming
0
150
アーキテクチャを明文化して臨んだ新規アプリ開発戦略
「After DroidKaigi LT Night」2023/09/25の登壇資料です。
akkiee76
September 26, 2023
Tweet
Share
More Decks by akkiee76
See All by akkiee76
コードレビューで開発を加速させるAIコードレビュー
akkie76
0
64
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
400
コードレビューを支援するAI技術の応用
akkie76
5
520
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
6.9k
Jetpack Compose で Adaptive Layout に対応しよう
akkie76
0
220
Observationではじめる値監視
akkie76
3
2.4k
TextField 表示スタイル変更の 有効活用例 5 選
akkie76
0
350
rememberUpdatedState の使いどころを考える
akkie76
0
230
M3 NavigationBar をマスターする
akkie76
0
560
Other Decks in Programming
See All in Programming
『改訂新版前処理大全』の話と Apache Parquet の話 #TokyoR
bob3bob3
0
150
20240525_社内でPower Platform勉強会開いたら900人来た話
ponponmikankan
0
640
My favorite script, "dsl.rb"
yui_knk
2
360
Goでリフレクションする、その前に / Kansai.go #1
utgwkk
5
680
Pure GoでアニメーションGIFのリサイズを実装する
logica0419
0
230
#kaigieffect LT 2024 - rexml-css_selector: A REXML extension for supporting CSS selector
makenowjust
1
230
Svelte採用記 - 位置情報と可視化の会社で、全社の標準技術スタックに選ぶまで / Svelte Japan Online Meetup #3
sorami
2
270
短期AHCで勝つためのテクニック
shun_pi
2
740
"統合ERP"とアプリケーションアーキテクチャ
keitatomozawa
0
330
DevTools と デバッグ と 私
kozy4324
1
550
Module Harmony について
yosuke_furukawa
PRO
3
1.2k
マルチクラウドで認証したい ~CloudRunと.NET8 Blazor ServerでAzure Open AIをセキュアに呼び出す~
ymd65536
0
100
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
133
6.4k
Designing Experiences People Love
moore
136
23k
The Cult of Friendly URLs
andyhume
74
5.8k
Git: the NoSQL Database
bkeepers
PRO
423
64k
KATA
mclloyd
18
12k
Thoughts on Productivity
jonyablonski
61
4k
Principles of Awesome APIs and How to Build Them.
keavy
122
16k
The Brand Is Dead. Long Live the Brand.
mthomps
51
33k
From Idea to $5000 a Month in 5 Months
shpigford
377
46k
Clear Off the Table
cherdarchuk
87
310k
Building Applications with DynamoDB
mza
88
5.7k
jQuery: Nuts, Bolts and Bling
dougneiner
60
7.2k
Transcript
©2023 RAKUS Co., Ltd. アーキテクチャを明文化して臨んだ 新規アプリ開発戦略 After DroidKaigi LT Night
2023/09/25 @akkiee76
Akihiko Sato 株式会社ラクス 楽楽精算開発 iOS / Android / バックエンド @akkiee76
自己紹介
既存アプリのリプレース案件で 実際に行なった開発戦略 😃
リプレースの背景 弊社1アプリのフレームワークとして Cordova を使用 • Cordova Android の開発が遅延 ◦ 新バージョン、API
への対応の遅れ • Cordova 自体の EOL リスク ネイティブアプリとしてリプレースすることに
開発に向けてのチーム課題 • Android ネイティブアプリのナレッジが少ない • 新規アプリ開発の経験がない リプレース案件の苦戦が明らか・・・ 😕
アーキテクチャを確立し ガイドラインとして明文化しよう😃
アーキテクチャ選定にあたって • モダンなアーキテクチャは学習コストが大きい • 開発のスケジュールもタイト オーソドックスな MVVM アーキテクチャを採用 (Compose の採用は見送りに)
https://developer.android.com/jetpack/guide
設計の基本原則 ガイドライン作成にあって以下を基本原則に • 「関心の分離(単一責任の原則)」を重要原則とする • クラスの責務をできるだけシンプル/コンパクトに保つ • 責務の細分化により、テスト容易性を向上させる
では、明文化した内容を一部紹介します😃
レイヤー構造 3層レイヤー構造を採用し定義を記載 • Presentation Layer • Domain Layer • Data
Layer https://developer.android.com/jetpack/guide
Presentation Layer の定義 プレゼンテーション層は、ユーザーに情報を表示し、入力を受け付ける機能を 持っています。具体的には、ユーザー操作や外部入力(レスポンス)によって データが変更されるたびに、変更された情報を反映するよう UI を更新する必要 があります。 主にプレゼンテーション層は、Activity、Fragment、ViewModel
や BindingModel に変換するための Converter などを配置します。また、 RecyclerView を用いる場合、 Adapter や ViewHolder などもプレゼンテーショ ン層に配置します。
Domain Layer の定義 ドメイン層は、複雑なビジネスロジックや複数の ViewModel で再利用される単 純なビジネスロジックが隠蔽(カプセル化)されたレイヤーです。 ビジネスロジックの複雑さに対処する場合や再利用性を優先する場合、対象の ロジックをこのレイヤーに実装します。また、各ユースケースでは異なるビジネ スロジックが集約されるため、それぞれのユースケースクラスは疎であることが
アーキテクチャとして重要です。
Data Layer の定義 データ層は、アプリで扱うデータに関連するロジックが集約されます。具体的に は、アプリで使用するデータの作成、保存、変更方法(APIに関するものを含 む)を決定する実際のロジックで構成されることがこのレイヤーの期待です。 データ層は、それぞれが 0 から複数のデータソースを含むことができるリポジト リで構成されます。また、アプリで処理するデータの種類ごとに
Repository を 作成する必要があります。
Package 構成を定義
基本クラスの各ルールを記載 ・Activity ・Fragment ・ViewModel ・UseCase ・Repository ・責務 ・命名規則 ・ルール(制約) ・実装例
・テストで確認すること ・テスト実装例 明文化 各ルールを適用したサンプルプロジェクトも用意
開発完了後に 振り返ってみると・・・
良かったこと ✅ チームの技術力が向上 ・オブジェクト指向の成長 ✅ 設計の議論をすることが少なく、開発に注力できた ・チームの生産性が 20% 向上 ✅
クラスの責務を小さくしたため、テストが実装しやすかった ・テスト品質の担保
イマイチだったこと 🚫 アプリ規模に対してファイル数が多くなる ・責務を細かく分けすぎてしまった 🚫 メンバーにより理解度の乖離が出てしまった ・ガイドラインを作成しても実践するための学習コストは必要 🚫 package 構成を各レイヤーで限定しすぎてしまった
・レイヤーを跨いで使用するクラスの置き場に困る(後述)
package 構成の技術的課題 「NetworkError」のようにレイヤーを跨いで使用するクラスが複数登場 package private が望ましい
課題へのアプローチ • アプリ本体はドメイン駆動の package 構造に変更 • マルチモジュールを採用し、どのドメインからも参照可能に
まとめ アーキテクチャの明文化により以下の恩恵を受けることができます • チームの技術力向上 • 開発の生産性アップ • 品質担保 チームでぜひトライしてみてはいかがでしょうか
Thank you !