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
React 19でお手軽にCSS-in-JSを自作する
yukukotani
5
560
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.3k
20241217 競争力強化とビジネス価値創出への挑戦:モノタロウのシステムモダナイズ、開発組織の進化と今後の展望
monotaro
PRO
0
280
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
2
2.6k
AIレシート読み取り機能をRuby on Rails on AWSで実現するLLMにまつわるアレコレ / AI-based receipt reading function powered by LLM on Ruby on Rails on AWS
moznion
3
130
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
290
Fibonacci Function Gallery - Part 2
philipschwarz
PRO
0
210
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
Jaspr Dart Web Framework 박제창 @Devfest 2024
itsmedreamwalker
0
150
chibiccをCILに移植した結果 (NGK2025S版)
kekyo
PRO
0
120
ESLintプラグインを使用してCDKのセオリーを適用する
yamanashi_ren01
2
230
盆栽転じて家具となる / Bonsai and Furnitures
aereal
0
1.8k
Featured
See All Featured
Done Done
chrislema
182
16k
Into the Great Unknown - MozCon
thekraken
34
1.6k
We Have a Design System, Now What?
morganepeng
51
7.3k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Navigating Team Friction
lara
183
15k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.6k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.5k
Side Projects
sachag
452
42k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Designing for Performance
lara
604
68k
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Ͱ ͭͳ͛ͯϏϧυͯ͠Έͯ Τϥʔ͕ग़ͳ͍͜ͱΛفΔ
ίʔυͷॻ͖ํ ਓͦΕͧΕ
ઃܭ͞ΕͨΞϓϦͷίʔυΛ ࣮ࡍʹͲ͏ॻ͍͍ͯΔͷ͔ ͱ͍͏հͰͨ͠
͋Γ͕ͱ͏͍͟͝·ͨ͠