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
310
オーナーシップを持つ領域を明確にする
konifar
15
5.2k
雑に思考を整理する技術と効能
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
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
250
Amazon Nova Reelの可能性
hideg
0
230
CNCF Project の作者が考えている OSS の運営
utam0k
3
450
2,500万ユーザーを支えるSREチームの6年間のスクラムのカイゼン
honmarkhunt
1
460
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
4.4k
“あなた” の開発を支援する AI エージェント Bedrock Engineer / introducing-bedrock-engineer
gawa
7
770
盆栽転じて家具となる / Bonsai and Furnitures
aereal
0
2k
Lookerは可視化だけじゃない。UIコンポーネントもあるんだ!
ymd65536
1
130
php-conference-japan-2024
tasuku43
0
440
ゼロからの、レトロゲームエンジンの作り方
tokujiros
3
1.1k
Rubyでつくるパケットキャプチャツール
ydah
0
210
rails newと同時に型を書く
aki19035vc
6
730
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
521
39k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
3k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Building Your Own Lightsaber
phodgson
104
6.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
Writing Fast Ruby
sferik
628
61k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Designing for humans not robots
tammielis
250
25k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
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Ͱ ͭͳ͛ͯϏϧυͯ͠Έͯ Τϥʔ͕ग़ͳ͍͜ͱΛفΔ
ίʔυͷॻ͖ํ ਓͦΕͧΕ
ઃܭ͞ΕͨΞϓϦͷίʔυΛ ࣮ࡍʹͲ͏ॻ͍͍ͯΔͷ͔ ͱ͍͏հͰͨ͠
͋Γ͕ͱ͏͍͟͝·ͨ͠