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
18k
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
Recap #io25 What's new in Google Play
syarihu
0
69
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
4
4k
[shibuya.apk #46] Composableの枠を超えてアニメーションする / Animation beyond Composable
syarihu
0
71
[shibuya.apk #41] Jetpack Composeでグリッドに柔軟にスペースを入れたい
syarihu
0
3.4k
[DroidKaigi 2022] 詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~
syarihu
0
3.7k
5分で分かるGoogle Playの新しいサブスクリプション / Google Play new subscription 2022
syarihu
1
1.9k
[DroidKaigi 2021] Google Play 定期購入 比例配分モード完全攻略ガイド / Google Play Subscription Proration Mode Complete Guide
syarihu
1
7.9k
[Money Forward Tech Drive] What's new in Google Play [Recap #io21]
syarihu
0
590
[Android 11 Meetups] Google Play Commerce からのアップデート / Android 11 Meetups Google Play Commerce
syarihu
4
2.9k
Other Decks in Technology
See All in Technology
開発者が知っておきたい複雑さの正体/where-the-complexity-comes-from
hanhan1978
6
1.9k
戦えるAIエージェントの作り方
iwiwi
24
12k
Boxを“使われる場”にする統制と自動化の仕組み
demaecan
0
220
Master Dataグループ紹介資料
sansan33
PRO
1
3.9k
QAEが生成AIと越える、ソフトウェア開発の境界線
rinchsan
0
890
品質保証の取り組みを広げる仕組みづくり〜スキルの移譲と自律を支える実践知〜
tarappo
2
650
龍昌餃子で理解するWebサーバーの並行処理モデル - 東葛.dev #9
kozy4324
1
140
3年ぶりの re:Invent 今年の意気込みと前回の振り返り
kazzpapa3
0
180
エンジニアにとってコードと並んで重要な「データ」のお話 - データが動くとコードが見える:関数型=データフロー入門
ismk
0
150
初海外がre:Inventだった人間の感じたこと
tommy0124
1
200
ubuntu-latest から ubuntu-slim へ移行しよう!コスト削減うれしい~!
asumikam
0
380
激動の2025年、Modern Data Stackの最新技術動向
sagara
0
1.1k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.3k
Product Roadmaps are Hard
iamctodd
PRO
55
11k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
36
6.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Become a Pro
speakerdeck
PRO
29
5.6k
RailsConf 2023
tenderlove
30
1.3k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
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とロジックを 分離できた
今後の課題 • 改めて入出金履歴詳細画面の仕様自 体が複雑すぎることが分かったのでこ の画面自体の見直しが必要 • 設計ももう少し見直したほうが良いかも
ありがとうございました