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
37
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
3
3.5k
[shibuya.apk #46] Composableの枠を超えてアニメーションする / Animation beyond Composable
syarihu
0
53
[shibuya.apk #41] Jetpack Composeでグリッドに柔軟にスペースを入れたい
syarihu
0
3.2k
[DroidKaigi 2022] 詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~
syarihu
0
3.6k
5分で分かるGoogle Playの新しいサブスクリプション / Google Play new subscription 2022
syarihu
1
1.8k
[DroidKaigi 2021] Google Play 定期購入 比例配分モード完全攻略ガイド / Google Play Subscription Proration Mode Complete Guide
syarihu
1
7.8k
[Money Forward Tech Drive] What's new in Google Play [Recap #io21]
syarihu
0
580
[Android 11 Meetups] Google Play Commerce からのアップデート / Android 11 Meetups Google Play Commerce
syarihu
4
2.9k
Other Decks in Technology
See All in Technology
Clineを含めたAIエージェントを 大規模組織に導入し、投資対効果を考える / Introducing AI agents into your organization
i35_267
4
1.6k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
26k
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
150
生成AI時代 文字コードを学ぶ意義を見出せるか?
hrsued
1
300
Uniadex__公開版_20250617-AIxIoTビジネス共創ラボ_ツナガルチカラ_.pdf
iotcomjpadmin
0
160
登壇ネタの見つけ方 / How to find talk topics
pinkumohikan
5
440
Oracle Cloud Infrastructure:2025年6月度サービス・アップデート
oracle4engineer
PRO
2
240
監視のこれまでとこれから/sakura monitoring seminar 2025
fujiwara3
11
3.9k
AWS CDK 実践的アプローチ N選 / aws-cdk-practical-approaches
gotok365
6
740
Observability infrastructure behind the trillion-messages scale Kafka platform
lycorptech_jp
PRO
0
140
あなたの声を届けよう! 女性エンジニア登壇の意義とアウトプット実践ガイド #wttjp / Call for Your Voice
kondoyuko
4
440
Liquid Glass革新とSwiftUI/UIKit進化
fumiyasac0921
0
210
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
329
21k
Code Reviewing Like a Champion
maltzj
524
40k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
YesSQL, Process and Tooling at Scale
rocio
173
14k
The Language of Interfaces
destraynor
158
25k
Building Adaptive Systems
keathley
43
2.6k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
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とロジックを 分離できた
今後の課題 • 改めて入出金履歴詳細画面の仕様自 体が複雑すぎることが分かったのでこ の画面自体の見直しが必要 • 設計ももう少し見直したほうが良いかも
ありがとうございました