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
Kyash Androidで新しい画面を作る時のコードの書き順
Search
konifar
June 19, 2018
Programming
14
2.6k
Kyash Androidで新しい画面を作る時のコードの書き順
Kyash meetup #1
konifar
June 19, 2018
Tweet
Share
More Decks by konifar
See All by konifar
Android開発以外のAndroid開発経験の活かしどころ
konifar
3
2.3k
初めてのiOS関連GitHub ActionsをMarketplaceに公開するまでの実録
konifar
3
300
オーナーシップを持つ領域を明確にする
konifar
15
5.1k
雑に思考を整理する技術と効能
konifar
76
40k
何のための個人目標設定?
konifar
28
14k
30点で打席に立つ
konifar
79
51k
Linterでチョット安心 iOS多言語化対応 / ios-i18n-linter
konifar
2
1.3k
VPoEとして1年 もっとこうすればよかった3選 / VPoE Retrospective
konifar
13
6.3k
Introduction to API Testing Automation by Postman
konifar
1
3.7k
Other Decks in Programming
See All in Programming
PHPカンファレンス 2024|共創を加速するための若手の技術挑戦
weddingpark
0
140
ATDDで素早く安定した デリバリを実現しよう!
tonnsama
1
1.9k
BEエンジニアがFEの業務をできるようになるまでにやったこと
yoshida_ryushin
0
200
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4.2k
chibiccをCILに移植した結果 (NGK2025S版)
kekyo
PRO
0
130
自分ひとりから始められる生産性向上の取り組み #でぃーぷらすオオサカ
irof
1
150
ChatGPT とつくる PHP で OS 実装
memory1994
PRO
3
190
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
1.3k
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
HTML/CSS超絶浅い説明
yuki0329
0
190
DevinとCursorから学ぶAIエージェントメモリーの設計とMoatの考え方
itarutomy
0
150
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
450
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
jQuery: Nuts, Bolts and Bling
dougneiner
62
7.6k
Being A Developer After 40
akosma
89
590k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Raft: Consensus for Rubyists
vanstee
137
6.7k
How to train your dragon (web standard)
notwaldorf
89
5.8k
The Invisible Side of Design
smashingmag
299
50k
Building Applications with DynamoDB
mza
93
6.2k
How GitHub (no longer) Works
holman
312
140k
Documentation Writing (for coders)
carmenintech
67
4.5k
YesSQL, Process and Tooling at Scale
rocio
170
14k
Transcript
Kyash AndroidͰ ৽͍͠ը໘Λ࡞Δ࣌ͷ ίʔυͷॻ͖ॱ Kyash meetup #1 @konifar
ઃܭࣗମͷ͍͍Ͱ͕͢ ͱ͋ΔઃܭͷதͰ ଞͷਓ͕Ͳ͏ॻ͍͍ͯΔͷ͔ ؾʹͳΓ·ͤΜ͔ʁ
ࠓ͢͜ͱ • Kyash AndroidΞϓϦͰ৽͍͠ը໘Λ։ൃ͢Δ ࣌ʹɺ͕ࣗͲ͏͍͏ॱ൪ͰԿΛߟ͑ͳ͕Β ίʔυΛॻ͍͍ͯΔͷ͔ɻ ※ ݱঢ়͜͏ͬͯΔΑɺͱ͍͏Ͱվળ͋Γ·͢ɻKyashͰৗʹมԽΛ ָ͠Έͳ͕Β։ൃ͍ͯ͠·͢ɻ
ࠓ͞ͳ͍͜ͱ • MVVMͷৄࡉͳઆ໌ • DataBindingͷجຊతͳ༰ • DIɾDaggerͷઆ໌ • Ϣχοτςετͷॻ͖ํ •
JetpackͳͲΛͬͨࠓޙͷల
ϦΞϧΧʔυΛ༗ޮԽ͢Δ࣌ ͷը໘Λྫʹઆ໌͠·͢ɻ ※ Ұ෦ίʔυΛมߋ͍ͯ͠·͢
None
1. ด͡ΔϘλϯ 2. εΫϩʔϧͨ͠ΒӨ͕ͭ ͘Toolbar 3. ΧʔυൃߦࡁΈ͔Ͳ͏͔ APIͰऔಘͯ͠ɺൃߦࡁΈ ͩͬͨΒදࣔΛม͑ΔϨ ΠΞτ
4. λοϓͨ͠ΒભҠ͢ΔϘ λϯͱϦϯΫ
7JFX.PEFM 6TF$BTF 3FQPTJUPSZ 7JFX "1*1SFGFSFODF
7JFX.PEFM 6TF$BTF 3FQPTJUPSZ 7JFX "1*1SFGFSFODF Activity.kt Fragment.kt activity.xml fragment.xml databinding
ViewModel.kt CheckKyashCardExistsUseCase.kt KyashCardRepository.kt KyashApi.kt (Retrofit service)
7JFX.PEFM 6TF$BTF 3FQPTJUPSZ 7JFX "1*1SFGFSFODF Activity.kt Fragment.kt activity.xml fragment.xml databinding
ViewModel.kt CheckKyashCardExistsUseCase.kt KyashCardRepository.kt KyashApi.kt (Retrofit service) σʔλऔ͖ͬͯͯ ϨΠΞτʹදࣔ
σʔλऔಘͱϨΠΞτදࣔ • ͲͪΒΛઌʹ࣮͢Δ͔ɺAPIͱσβΠϯͷ ͲͪΒ͕ઌʹͰ͖͍ͯΔ͔ʹΑΔɻ • API͕ઌʹͰ͖͍ͯΕσʔλऔಘ෦ɺσβ Πϯ͕ઌʹ͋ΕϨΠΞτ͔Β࡞Δɻ • ͲͪΒͰ͖͍ͯͳ͔ͬͨ߹ϨΠΞτ͔ Βࡶʹ࡞͓ͬͯ͘ʢKyashͰ͋·Γͳ͍ʣ
σʔλऔಘ෦ͷ࣮ॱ • Ϋϥεґଘͷͳ͍ͱ͜Ζ͔Β࡞ΔɻAPIͷΫϥ εϝιου͕ͳ͍ͱRepositoryΛ࣮Ͱ͖ ͳ͍ʢTDDͰΔ߹ผͰ͕͢ʣ • API => Repository =>
UseCase ͷॱ൪ɻ
KyashApi.kt • RetrofitͷΠϯλʔϑΣʔεʹϦΫΤετ༻ͷϝιουΛՃɻ • ϨεϙϯεύϥϝʔλͰ৽͍͠Entity͕ඞཁͳΒ͜ͷλΠϛ ϯάͰ࡞͓ͬͯ͘ɻ
KyashCardRepository.kt • nonceΛऔಘͯ͠ɺͦΕΛͬͯผͷAPIΛୟ͘ɻ RxͷflatMapΛͬͯAPIͷྻԽɻ
CheckKyashCardExistsUseCase.kt • UseCaseɺRepositoryͷϝιουͷ݁ՌΛϏδωεϩδοΫʹԊͬͨܗ ʢࠓճͩͱBooleanʣʹՃ͢Δɻ RxͩͱՃ͍͢͠ͷͰฦΓSingleCompletableʹ͍ͯ͠Δɻ
ʊਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰॳϏϧυɹʻ ʉ^Y^Y^Y^Y^Y^Y^ʉ
ॳΊͯͷϏϧυ • Ϗϧυ͕͍ͷͰɺσʔλऔಘ෦Ψοͱ Ұؾʹॻ͍ͯ͠·͏͜ͱ͕ଟ͍ɻ • ͜ͷྫͩͱUseCaseʹϩδοΫ͕ೖ͍ͬͯΔ ͷͰϢχοτςετ͜ͷλΠϛϯάͰॻ͘ɻ
ϨΠΞτදࣔ෦ͷ࣮ॱ • Ϋϥεґଘͷͳ͍ͱ͜Ζ͔Β࡞Δɻ • ViewModel => xml => Fragment =>
Activity
ViewModelͷଊ͑ํ • ViewͷදࣔཁૉΛϓϩύςΟʹ࣋ͭɻ • View͔ΒͷΞΫγϣϯʢϥΠϑαΠΫϧ λοϓͳͲʣΛϝιουͰ࣮͢Δɻ • ͲΜͳϓϩύςΟͱΞΫγϣϯ͕ඞཁ͔Λ಄ ͷதͰཧ͓ͯ͘͠ɻ
1. ΧʔυൃߦࡁΈ͔Ͳ͏͔νΣοΫ தͷϩʔυதදࣔͷVisibility 2. ൃߦࡁΈͩͬͨ࣌ͷViewͷ Visibility 3. ະൃߦͩͬͨ࣌ͷViewͷVisibility දࣔཁૉͱͳΔϓϩύςΟ
ViewModel.kt - ϓϩύςΟ • ίϯετϥΫλʹɺΧʔυൃߦࡁΈ͔Ͳ͏͔ΛνΣοΫ͢ΔUseCaseͱը໘ ભҠͷͨΊͷNavigatorΫϥεΛDaggerͰInjectɻ • ViewͷදࣔʹඞཁͳVisibilityͷIntͷϓϩύςΟΛॻ͘ɻ͜ͷྫͰVisibilityͩ ͚͕ͩɺදࣔ͢ΔςΩετͷStringͳͲViewModelʹॻ͍͍ͯΔɻ
1. onResumeͰΧʔυൃߦ͍ͯ͠ Δ͔Ͳ͏͔ͷνΣοΫ 2. λοϓͨ͠Βը໘ભҠ ΞΫγϣϯ
ViewModel.kt - onResume() • ϩʔυͨ݁͠ՌʹΑͬͯϓϩύςΟΛมߋ͢Δɻ͜ͷϓϩύςΟΛ͋ͱͰdatabindingͰxmlʹόΠϯυ͢Δͧʔͱ͍͏ؾ࣋ͪͰॻ͘ɻ • ͪͳΈʹ subscribeOnͱobserveOnΛ͜͜Ͱ྆ํΔͷ͋·ΓΑ͘ͳ͍ͱࢥ͍ͬͯΔɻ
ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰςετΛॻ͘ɹʻ ʉ^Y^Y^Y^Y^Y^Y^Y^ʉ
σʔλऔಘͱදࣔͷςετ • UseCaseΛϞοΫͯ͠ɺϝιου͕ݺΕͯ ͍Δ͔ΛVerify͢Δɻ • ϝιουͷฦΓͷ݁ՌʢSingleͷsuccess errorʣʹΑͬͯɺϓϩύςΟͷ͕దʹม ߋ͞Ε͍ͯΔ͔Λςετ͢Δɻ
ViewModel.kt - ด͡ΔϘλϯ • DataBindingͷonClickͰόΠϯυ͢ΔͨΊʹɺҾʹViewΛ͢ɻ • NavigatorݱࡏͷActivityͷࢀরΛ͍࣋ͬͯͯɺfinishActivity() ΛݺͿͱ Activity͕ด͡ΔʢNavigatorΛͻͱͭ࡞ΔΓํ͕͍͍͔ʹ͍ͭͯݕ౼ ͷ༨͋ΓͰ͢ʣ
• ͢Ͱʹը໘ભҠઌ͕͋Δ߹ʹnavigatorͷϝιουΛݺͿΑ͏ʹ͢Δɻ • ·ͩͰ͖͍ͯͳ͍߹TODOίϝϯτ͚ͩॻ͍͓ͯ͘ɻ ViewModel.kt - ϘλϯͱϦϯΫ
ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰςετΛॻ͘ɹʻ ʉ^Y^Y^Y^Y^Y^Y^Y^ʉ
ը໘ભҠͷςετ • NavigatorΛϞοΫͯ͠ɺదͳϝιουͱҾ ͕ݺΕ͍ͯΔ͔ΛVerify͢Δ͜ͱͰը໘ભ ҠͷςετΛॻ͘ɻ
fragment.xml • dataʹViewModelΛએݴɻ • ͜͜ͰඞཁʹͳΔͷͰɺViewModelͷํΛઌʹॻ͘Α͏ʹ͍ͯ͠Δɻ
fragment.xml - Toolbar • Toolbar styleΛηοτ͢Δ͚ͩͰӨͷ༗ແɺΔϘλϯͷΞΠίϯͳͲΛม ͑ΒΕΔΑ͏ʹ͍ͯ͠Δɻ • navigationOnClickListenerʹViewModelͷΫϦοΫΠϕϯτΛηοτɻ •
shadowAnimationScrollViewId͓खͷBindingAdapterͰɺScrollViewͷid Ληοτ͢ΔͱεΫϩʔϧ͢ΔͱӨ͕ͭ͘ಈ͖Λ͚ͭΒΕΔɻ
ToolbarExt.kt • ҾͰ͞ΕͨϨΠΞτIDΛͱʹScrollViewΛ୳ͯ͠ɺεΫϩʔϧͨ͠ΒToolbar ͷelevationΛม͑ΔΑ͏ʹ͍ͯ͠Δɻ͜ΕʹݶΒͣɺlottieͷΞχϝʔγϣϯͳͲ ViewͷׂͰڞ௨ԽͰ͖ͦ͏ͳͷ݁ߏDataBindingͰΔΑ͏ʹ͍ͯ͠Δɻ
fragment.xml - දࣔΓସ͑
ʊਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜ͰϏϧυᶄɹʻ ʉ^Y^Y^Y^Y^Y^Y^ʉ
̎ճͷϏϧυ • DataBindingͨ·ʹͲ͕͜ѱ͍ͷ͔શ͘Θ͔ Βͳ͍ΤϥʔΛग़͖ͯͯͭ͠Β͍ɻ • xmlʹόΠϯυͨ͋͠ͱͰҰϏϧυ͕௨ΔΑ ͏ʹ͓ͯ͘͠ͱ҆৺͢Δɻ
Fragment.kt
Activity.kt
ʊਓਓਓਓਓਓਓਓਓਓਓʊ ʼɹ͜͜Ͱ֬ೝͷϏϧυɹʻ ʉY^Y^Y^Y^Y^Y^Y^Yʉ
σόοάϝχϡʔ • ҙͷը໘Λϝχϡʔ͔Β ։͚ΔΑ͏ʹ͍ͯ͠Δɻ • ͱΓ͋͑ͣ࡞ͬͨը໘Λ ͙͢ʹ։͍ͯ֬ೝ͍ͨ࣌͠ʹ ศརɻ
Զͷίʔυͷॻ͖ॱ·ͱΊ
σʔλऔಘɺϨΠΞτදࣔ ͷͲͪΒ͔Βઌʹ࣮͢Δ͔ APIͱσβΠϯͲͪΒ͕ ઌߦ͍ͯ͠Δ͔࣍ୈ
Ϗϧυ͕͍ͷͰ σʔλऔಘ෦Ұؾʹॻ͘
දࣔ෦ViewModelͷ ϓϩύςΟͱΞΫγϣϯ ʹཧͯ͠ॻ͘
DataBindingͰ ͭͳ͛ͯϏϧυͯ͠Έͯ Τϥʔ͕ग़ͳ͍͜ͱΛفΔ
ίʔυͷॻ͖ํ ਓͦΕͧΕ
ઃܭ͞ΕͨΞϓϦͷίʔυΛ ࣮ࡍʹͲ͏ॻ͍͍ͯΔͷ͔ ͱ͍͏հͰͨ͠
͋Γ͕ͱ͏͍͟͝·ͨ͠