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
チーム開発と Android アプリの構成
Search
Ryutaro Miyashita
July 14, 2017
Programming
5
1.2k
チーム開発と Android アプリの構成
第4回スタートアップAndroid勉強会
https://connpass.com/event/59928/
Ryutaro Miyashita
July 14, 2017
Tweet
Share
More Decks by Ryutaro Miyashita
See All by Ryutaro Miyashita
Java で書かれた Android アプリを Kotlin で書き直すまでの話 / Talk of rewrite Android app for Java to Kotlin
ryugoo
0
1.7k
開発 4 年目のアプリへの Kotlin 導入
ryugoo
0
430
開発 4 年目のアプリへの Kotlin 導入
ryugoo
1
2.7k
Either で想定内のエラーと想定外のエラーを別ものにしたい!
ryugoo
2
1.7k
全て S になる -RxJava と LWS を持ち込む楽しさ-
ryugoo
4
760
Transition at RxJava 1.x to 2.x
ryugoo
0
550
Kotlin さんと誕生日が近いだけの男の話
ryugoo
2
520
Android エンジニアになって 2 年の学び
ryugoo
1
2.7k
年末だしお掃除をしよう!
ryugoo
0
800
Other Decks in Programming
See All in Programming
ソフトウェア設計の実践的な考え方
masuda220
PRO
3
470
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
3k
2分台で1500examples完走!爆速CIを支える環境構築術 - Kaigi on Rails 2025
falcon8823
3
3.1k
2025年版 サーバーレス Web アプリケーションの作り方
hayatow
23
25k
アメ車でサンノゼを走ってきたよ!
s_shimotori
0
140
株式会社 Sun terras カンパニーデック
sunterras
0
220
育てるアーキテクチャ:戦い抜くPythonマイクロサービスの設計と進化戦略
fujidomoe
1
150
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
220
ИИ-Агенты в каждый дом – Алексей Порядин, PythoNN
sobolevn
0
150
Your Perfect Project Setup for Angular @BASTA! 2025 in Mainz
manfredsteyer
PRO
0
120
Django Ninja による API 開発効率化とリプレースの実践
kashewnuts
0
930
Railsだからできる 例外業務に禍根を残さない 設定設計パターン
ei_ei_eiichi
0
230
Featured
See All Featured
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
Building Applications with DynamoDB
mza
96
6.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Practical Orchestrator
shlominoach
190
11k
The Language of Interfaces
destraynor
162
25k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
19
1.2k
Designing Experiences People Love
moore
142
24k
Code Review Best Practice
trishagee
72
19k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
A Modern Web Designer's Workflow
chriscoyier
697
190k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.6k
Transcript
νʔϜ։ൃͱ"OESPJEΞϓϦͷߏ ୈճελʔτΞοϓ"OESPJEษڧձ ελʔτΞοϓʹ͓͚ΔΞʔΩςΫνϟͱͷ͖߹͍ํ
ٶԼཽେ $IBU8PSLגࣜձࣾ ΞϓϦέʔγϣϯ։ൃ෦νʔϜϦʔμʔ !SZVHPP@
ߏ
"OESPJEΞϓϦͷߏ ΞʔΩςΫνϟ ύοέʔδߏ
ΞʔΩςΫνϟ .7$ .71 .77. 'MVY 7*1&3 $MFBO"SDIJUFDUVSF FUD
ϥΠϑαΠΫϧʹண͢ΔΞʔΩςΫνϟ ‣ 3Y+BWB&WFOU#VTΛ͍ͬͯΕҙࣝ͢Δͣ PO4UBSUPO4UPQͰTVCTDSJCFVOTVCTDSJCF ߪಡ͕ഁغ͞Εͨͱ͖ͷࢹରͷదͳഁغ ‣ ϥΠϑαΠΫϧʹண͢Δͱ͞Βʹҙࣝ͢Δ͜ͱ
ׂͷ ը໘ͱใ ใͱϩδοΫ ϩδοΫͱӬଓԽػߏ
"OESPJE"SDIJUFDUVSF$PNQPOFOUT ‣ (PPHMF*0Ͱൃද͞Εͨ ‣ (PPHMFͷߟ͑ΔਪનΞʔΩςΫνϟ ‣ "DUJWJUZ'SBHNFOUͷϥΠϑαΠΫϧʹண ؍ଌՄೳͳϥΠϑαΠΫϧͱඥ͘σʔλ -JGFDZDMF-JWF%BUB
ը໘ճసʹӨڹ͞Εͳ͍σʔλͷอ࣋ 7JFX.PEFM σʔλͷӬଓԽΛखॿ͚͢Δ 3PPN1FSTJTUFODF-JCSBSZ
ΞʔΩςΫνϟࣅͯ͘Δ ‣ "DUJWJUZ'SBHNFOU$VTUPN7JFX 7JFX6*ͷ੍ޚʹूத͢Δ ‣ 7JFX.PEFM 7JFXͷͨΊͷΛอ࣋͢Δ
7JFXͱϏδωεϩδοΫͷڮ͠ ‣ #VTJOFTT-PHJD ΦϒδΣΫτ ϏδωεϩδοΫ
7JFX 7JFX.PEFM #VTJOFTT-PHJD ‣ 3Y+BWB ‣ JOUFSGBDF ‣ &WFOU#VT
7JFX 7JFX.PEFM #VTJOFTT-PHJD ‣ 3Y+BWB ‣ JOUFSGBDF ‣ &WFOU#VT
"OESPJEͷ7JFX͍͜͠ ‣ "DUJWJUZ 'SBHNFOU %JBMPH'SBHNFOU #PUUPN4IFFU $VTUPN7JFX ‣
ը໘ͷίϯϙʔωϯτಉ࢜௨৴͕ඞཁ 7JFX.PEFMΛͲͷΑ͏ʹ͏͔ %BUB#JOEJOHͱͲ͏Έ߹ΘͤΔ͔
7JFX.PEFMΛͲͷΑ͏ʹ͏͔ ‣ Ϣʔβʔ͕ݟ͍ͯΔlը໘zʹؔ৺Λ͚Δ ʷ )PHF"DUJWJUZ⾮)PHF"DUJWJUZ7JFX.PEFM ̋ )PHF"DUJWJUZ )PHF'SBHNFOU )PHF$VTUPN7JFX )PHF7JFX.PEFM
lը໘zͷؔ৺ʹରͯ͠7JFX.PEFM͕͋Δ ۃྗ"OESPJE߹ʹҾͬுΒΕͨ͘ͳ͍
7JFX.PEFMΛͲͷΑ͏ʹ͏͔ ‣ "OESPJE"SDIJUFDUVSF$PNQPOFOUT 7JFX.PEFM1SPWJEFSTܦ༝Ͱڞ༗Ͱ͖Δ class MyFragment: Fragment() { val
viewModel: MyViewModel by lazy { ViewModelProviders.of(activity) .get(MyViewModel::class.java) } }
%BUB#JOEJOHͱͲ͏Έ߹ΘͤΔ͔ ‣ ֤ϨΠΞτͱ7JFX.PEFMΛόΠϯυ 7JFX.PEFMը໘ͷτοϓίϯϙʔωϯτ͔Βऔಘ <?xml version="1.0" encoding="utf-8"?> <layout> <data>
<variable name="hogeViewModel" type="com.example.view.hoge.HogeViewModel"/> </data> </layout>
%BUB#JOEJOHͱͲ͏Έ߹ΘͤΔ͔ ‣ 0CTFSWBCMF'JFMEͳͲͬͯํόΠϯυ <TextView android:text="@={hogeViewModel.textValue}"> data class HogeViewModel( val textValue:
ObservableField<String> = ObservableField() )
7JFXͱ7JFX.PEFM )PHF "DUJWJUZ )PHF 'SBHNFOU )PHF 7JFX l)PHFz %BUB#JOEJOH l)PHF7JFX.PEFMz
0CTFSWBCMF'JFME SY0CTFSWBCMF $PNNBOE &WFOU
Έ ‣ Ϣʔβʔ͕ݟ͍ͯΔlը໘zʹؔ৺Λ͚Δ Ͳ͜·Ͱ͕ಉ͡ίϯςΩετͷը໘ͳͷ͔ )PHF"DUJWJUZ͕ΞΫςΟϒͰ͋Εɺ ͦ͜ʹදࣔ͞ΕΔͷಉ͡ίϯςΩετʁ ྫ͑l%JBMPH'SBHNFOUzͲ͏ͩΖ͏ʁ
)PHF7JFX.PEFMΛ͖͔࣋ͭ൱͔ ઐ༻ͷ7JFX.PEFM͕͋ͬͨํ͕ྑ͍ͷ͔ දࣔ͞ΕΔ%JBMPHͷதͰมΘΓͦ͏͚ͩͲ ʅЏʆʀ řŖƃʜ
ύοέʔδߏ
ύοέʔδߏ ‣ "OESPJEΞϓϦͷύοέʔδߏࣗ༝͕ߴ͍ ϓϩδΣΫτσϑΥϧτͰ.BJO"DUJWJUZ͕ ύοέʔδԼʹυʔϯͱஔ͔Ε͍ͯΔ ‣ ྫ͑044ͳ"OESPJEϓϩδΣΫτͰʁ - root
- ui - activities - fragments - views - viewmodels - root - ui - Activity.java - Fragment.java - model - utils
Ͳ͜ʹ͢Δ͔ ‣ ύοέʔδߏΛͲ͏ׂ͢Δ͔ lVJzlNPEFMzʹ͚Δͷྑ͋͘Δ ͔Γ͍͢ ‣ Ͱ
lBDUJWJUZzͳͲͰ͚͍ͯ͘ͷ͕ຊʹྑ͍ͷ͔ lը໘zʹண͢Δͱίʔυ͕ࢄͯ͘͠Δ ͞ΒʹlWJFXNPEFMzग़ͯ͘Δͱʜʜʁ ̻̻̻ƅЧƅ űŘŎŎŎ
ఏҊ ‣ Ϣʔβʔ͕ண͢Δը໘Λߏ͢ΔཁૉͰ·ͱΊΔ - root - ui - hoge -
HogeActivity.kt - HogeFragment.kt - HogeCustomView.kt - HogeViewModel.kt - fuga - ……
ఏҊ ‣ ϝϦοτ ύοέʔδϓϥΠϕʔτʹͰ͖Δ ը໘Λߏ͢ΔཁૉͰ·ͱΊΒΕΔͷͰࢄΒΒͳ͍ (JU)VCͷ3FQPTJUPSZ7JFXFSͰݟΔͱָ͖ʑ ‣
σϝϦοτ ࢥ͍͔ͭͳ͍ʂ
ʹΌΜͳΜͷͨΊʹ
ͳͥlΞʔΩςΫνϟzʹ͢Δͷ͔ ‣ ਓͳΒ ଟ ͲΜͳܗͰͳ͍ ਓ ਓʜʜνʔϜʹͳ͖ͬͯͨΒʁ டং͕ඞཁ
ΞʔΩςΫνϟடং νʔϜͷͨΊʹΞʔΩςΫνϟ͕͋Δ ‣ டং͕ͳ͍ͱͲ͏ͳΔͷ͔ ։ൃ͕མͪɺόάੜ·ΕɺΧΦεʹͳΔ ϢʔβʔͷՁఏڙ͕ૄ͔ʹͳΔ
ελʔτΞοϓͱΞʔΩςΫνϟ ‣ Ϗδωεޭ͢Δ͔͔Βͳ͍ ϐϘοτ͢Δ͜ͱ͋Δ ૉૣ͘։ൃͯ͠ɺՁͷݕূΛߦ͍͍ͨ ͰɺϢʔβʔͷͱͯख़͍ͯ͠Δ ͡Ί͔Βҙਤ͢ΔػೳΛਖ਼͘͠ಈ࡞ͤ͞Δඞཁ͕͋Δ
ૉૣ͍։ൃWTਖ਼͘͠ಈ࡞͢ΔϓϩάϥϜ ΞʔΩςΫνϟʹΑͬͯடংΛखʹೖΕΑ͏ டংʹΑͬͯϢʔβʔͷՁఏڙΛखॿ͚͢Δ
டং͋Δ։ൃΛߦ͏ؒΛ୳͍ͯ͠·͢ ‣ $IBU8PSLͰ"OESPJEJ04ΤϯδχΞΛืूத ΞʔΩςΫνϟͱڞʹ͋Δ։ൃΛ͠·ͤΜ͔ʁ ౦ژΦϑΟεେࡕΦϑΟε ౦ژΦϑΟε݄ʹ౦ژλϫʔͦʹҠస͠·͢ ࠓઙ ͔ͬͺڮಓ۩֗ͷத
ʹ͋Γ·͢ IUUQDPSQDIBUXPSLDPNKBSFDSVJUFOHJOFFS
͓͠·͍