Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AACという武器を手に1,400行のFragment2体と戦った話
Search
syarihu
February 13, 2019
Technology
18k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AACという武器を手に1,400行のFragment2体と戦った話
Android Reject Conference 2019/2で発表した資料です。
https://connpass.com/event/112296/
syarihu
February 13, 2019
More Decks by syarihu
See All by syarihu
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
1k
Recap #io25 What's new in Google Play
syarihu
0
160
[DroidKaigi 2024] Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 / From Android View to Jetpack Compose: A Guide to Migration
syarihu
4
5.4k
[shibuya.apk #46] Composableの枠を超えてアニメーションする / Animation beyond Composable
syarihu
0
170
[shibuya.apk #41] Jetpack Composeでグリッドに柔軟にスペースを入れたい
syarihu
0
3.7k
[DroidKaigi 2022] 詳解Google Playの新しい定期購入 ~オファーの活用や実装例を添えて~
syarihu
0
4k
5分で分かるGoogle Playの新しいサブスクリプション / Google Play new subscription 2022
syarihu
1
2k
[DroidKaigi 2021] Google Play 定期購入 比例配分モード完全攻略ガイド / Google Play Subscription Proration Mode Complete Guide
syarihu
1
8.2k
[Money Forward Tech Drive] What's new in Google Play [Recap #io21]
syarihu
0
680
Other Decks in Technology
See All in Technology
GitHub、使う?使わない?
happysamurai294
0
100
AI時代、つくる力を自分たちの手に。 ──電通×KAG、アジャイルとAI駆動開発で挑む開発の変革
yuukiyo
3
400
VLA-JEPA: Enhancing Vision-Language-Action Models with Latent World Models
takmin
0
350
ひとりで始めた AI駆動開発、チームに広げて何が変わったのか
kenichiodo
0
120
Claude Code をローカルとサーバー上で利用した際の Bedrock 利用料をユーザー単位で一本化してみる
ohorig
0
170
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
5
2.4k
reInvent2026stby LT00 "Change your life!"
shinichirokawano
1
360
PostgreSQL at Microsoft: Open Source, AI, & Cloud | Claire Giordano | PGConf.EU 2026
clairegiordano
0
110
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
160
Obsidian Vault Architectures
x5gtrn
PRO
0
190
DevelopersIO2026 -バックアップは“消されないこと”が9割-
yoshida0129
0
420
Don't write the architecture only in the prompt.
neohsu
0
150
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
7.2k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.5k
Making Projects Easy
brettharned
120
6.8k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
640
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Visualization
eitanlees
153
17k
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
Rails Girls Zürich Keynote
gr2m
96
14k
From π to Pie charts
rasagy
1
420
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
47k
Un-Boring Meetings
codingconduct
0
470
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とロジックを 分離できた
今後の課題 • 改めて入出金履歴詳細画面の仕様自 体が複雑すぎることが分かったのでこ の画面自体の見直しが必要 • 設計ももう少し見直したほうが良いかも
ありがとうございました