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
AACという武器を手に1,400行のFragment2体と戦った話
Search
syarihu
February 13, 2019
Technology
1
17k
AACという武器を手に1,400行のFragment2体と戦った話
Android Reject Conference 2019/2で発表した資料です。
https://connpass.com/event/112296/
syarihu
February 13, 2019
Tweet
Share
More Decks by syarihu
See All by syarihu
[shibuya.apk #41] Jetpack Composeでグリッドに柔軟にスペースを入れたい
syarihu
0
1.7k
[DroidKaigi 2022] 詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~
syarihu
0
2.7k
5分で分かるGoogle Playの新しいサブスクリプション / Google Play new subscription 2022
syarihu
1
1.5k
[DroidKaigi 2021] Google Play 定期購入 比例配分モード完全攻略ガイド / Google Play Subscription Proration Mode Complete Guide
syarihu
1
6.8k
[Money Forward Tech Drive] What's new in Google Play [Recap #io21]
syarihu
0
490
[Android 11 Meetups] Google Play Commerce からのアップデート / Android 11 Meetups Google Play Commerce
syarihu
4
2.6k
[potatotips #70] license-list-pluginを使ってOSSライセンス画面を自動生成する / license-list-plugin
syarihu
4
4.2k
[potatotips #69] Wi-Fi Suggestion API / Wi-Fi Suggestion API
syarihu
2
1.8k
[DroidKaigi 2020] Re:ゼロから始める Play Billing Library / Re: Zero - starting uses of Play Billing Library
syarihu
0
11k
Other Decks in Technology
See All in Technology
生産性向上チームの紹介
cybozuinsideout
PRO
1
870
ChatworkのSRE部って実は 半分くらいPlatform Engineering部かもしれない
saramune
0
160
プロトタイピングによる不確実性の低減 / Reducing Uncertainty through Prototyping
ohbarye
5
390
20240418_Google ColabにLLMが搭載されたようなのでPython x データ分析の勉強方法を考えてみる
doradora09
0
140
Além do else! Categorizando Pokemóns com Pattern Matching no JavaScript
wmsbill
0
620
Azure犬駆動開発の記録/GlobalAzureFukuoka2024_20240420
nina01
1
210
Gitlab本から学んだこと - そーだいなるプレイバック / gitlab-book
soudai
4
420
推しは推せるときに推せ! プロダクトにフィードバックしていこう
nakasho
0
310
チームでロジカルシンキングに改めて向き合っている話 〜学習環境と実践⽅法〜
sansantech
PRO
3
2.5k
ServiceNow Knowledge Learning Rise up
manarobot
0
210
サーバー間 GraphQL と webmock-graphql の話 / server-to-server graphql and webmock-graphql
qsona
2
190
プラットフォームってつくることより計測することが重要なんじゃないかという話 / Platform Engineering Meetup #8
taishin
1
370
Featured
See All Featured
Building an army of robots
kneath
300
41k
10 Git Anti Patterns You Should be Aware of
lemiorhan
648
58k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
244
20k
Unsuck your backbone
ammeep
663
57k
Optimizing for Happiness
mojombo
370
69k
Documentation Writing (for coders)
carmenintech
60
3.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
2
1.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
227
16k
Rails Girls Zürich Keynote
gr2m
91
13k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
322
20k
Transcript
AACという武器を手に 1,400行のFragment2体と 戦った話 Android Reject Conference 2019/2 2019/02/13 (Wed.) @syarihu
Taichi Sato (@syarihu) • Money Forward, Inc. ◦ Android Engineer
• TechBooster
None
None
戦うことになった経緯
戦うことになった経緯 • 手入力画面のデザイン改善をすること になった
Before
After
比較
入出金履歴詳細の電卓デザイン
戦うことになった経緯 • 手入力画面のデザイン改善をすること になった ◦ 電卓のデザインが変わった
戦うことになった経緯 • 手入力画面のデザイン改善をすること になった ◦ 電卓のデザインが変わった • 入出金履歴詳細画面も新しいデザイン に合わせる必要があった
戦うことになった経緯 • 手入力画面のデザイン改善をすること になった ◦ 電卓のデザインが変わった • 入出金履歴詳細画面も新しいデザイン に合わせる必要があった
戦うことになった経緯 • 手入力画面のデザイン改善をすること になった ◦ 電卓のデザインが変わった • 入出金履歴詳細画面も新しいデザイン に合わせる必要があった これがやばい
戦うことになった経緯 ※よく見たら片方は1,300行だったのでタイトルと微妙に違うんですがゆるしてください TransactionDetailFragment.java TransactionEditFragment.java
戦うことになった経緯 ManualInputFragment.java
戦うことになった経緯
戦うことになった経緯
戦うことになった経緯 • 2つのFragmentが互いに依存してる • どっちのFragmentも色んなところに依 存してる • ちょっと修正しようとするとバグる • とにかくやばい
戦いの準備
戦いの準備 • 手入力改善をやることになったのが6月 ごろ ◦ この時期は1人で開発していたので 全てを把握しやすい状況だった ◦ 新卒も入ってくるしメンバーが 増えると今のままだとやばい
アプリ全体の設計を整えよう!
設計を整える
以前の設計 ※この時点での設計をざっくりまとめただけで、色々な作り方で作られていたので 全部これ通りに整っていたわけではない
設計を整える • 人によって作りがバラバラで全体的に 整ってなかったけどMVVMっぽいのに 寄せていくのが良さそうだった • テストコードが書きにくいのでDIは入れ たい
設計を整える • あんまり設計を固めすぎても全てを移 行できるとは思えない ◦ 移行を推進できる人がいなくなった途 端にそれが負債になる • 既存の作りにできるだけ合う形で きれいにしていきたい
新しい設計
設計を整える • MVVM ◦ AAC ▪ ViewModel, LiveData ◦ DataBinding
• DI ◦ Dagger2
設計を整える • 新しい設計をドキュメントにまとめてプロ ジェクトに関わる人に説明 • 後の入出金履歴詳細画面も見据えて 手入力画面の改善から新しい設計を適 用することにした
入出金履歴詳細画面の 仕様を整理する
仕様を整理する - 入出金履歴詳細画面(自動連携 - 出金)
仕様を整理する - 入出金履歴詳細画面(自動連携 - 入金)
仕様を整理する - 入出金履歴詳細画面(手入力)
仕様を整理する - レシート項目編集画面
仕様を整理する - ジョルテ連携
やること 1. 入出金履歴詳細画面のリファクタ 2. レシート項目編集画面のリファクタ 3. ジョルテ対応 4. TransactionDetailFragment.javaと TransactionEditFragment.javaを
消し飛ばす
入出金履歴詳細画面のリファクタ
やること • レイアウトを作り直す • 表示する項目をLiveDataで宣言 • ViewModelにロジックを実装 • Viewに反映する ◦
レイアウトにViewModelをbind ◦ LiveDataをobserveする
やった結果
やった結果 - 手入力履歴 ※実際の発表ではGIF動画で再生しました
やった結果 - 自動連携履歴 ※実際の発表ではGIF動画で再生しました
やった結果 • 表示する項目多すぎ ◦ 出し分けめっちゃ多い ◦ 振替とかが特にやばい • 色々なところからデータとってきて加工 しないといけないからどうしても行数が
増える
やった結果 • 結果約1,200行のViewModelになって しまった • ただ設計変えたおかげでコードの 見通しは良くなった • Viewとロジックが分離できた •
仕様がだいぶ把握できた
やった結果 • エラーハンドリングをちゃんと実装したり 細かいところも直せた
やった結果 • アプリの設計を少し見直そうかとも思っ たけどこの画面の仕様が複雑すぎるの で一旦このままにすることにした
レシート項目編集画面の リファクタ
やること • レシート項目編集画面を新しく作る ◦ 振替などの出し分けが無い ◦ 入金 / 出金先が財布だけ ◦
保存を押したらレシート読み取り結果 画面に反映
やった結果
ジョルテ連携対応
やること • レシート項目編集画面に送信機能がつ いた感じなので送信ボタンを押したとき の挙動だけ変えて作る • あとはジョルテ連携用の実装を ごにょごにょする
やった結果
TransactionDetailFragment.javaと TransactionEditFragment.javaを 消し飛ばす
やること • ここまでの対応で2つのFragmentへの 依存が完全に消えたので関連ファイル をすべて消し飛ばす
やった結果
戦いの終わり
None
None
None
None
戦いの終わり • 4ヶ月くらいの長い戦いだった • 当初の目的だった電卓のデザインの統 一はもちろんできてよかった • 仕様がだいぶ整理できたのは良かった
戦いの終わり • リファクタしてコードも増えたけど5,337 行増えて7,312行減ったので 1,975行は減らせた • 設計を変えたおかげでViewとロジックを 分離できた
今後の課題 • 改めて入出金履歴詳細画面の仕様自 体が複雑すぎることが分かったのでこ の画面自体の見直しが必要 • 設計ももう少し見直したほうが良いかも
ありがとうございました