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
420
開発 4 年目のアプリへの Kotlin 導入
ryugoo
1
2.6k
Either で想定内のエラーと想定外のエラーを別ものにしたい!
ryugoo
2
1.7k
全て S になる -RxJava と LWS を持ち込む楽しさ-
ryugoo
4
740
Transition at RxJava 1.x to 2.x
ryugoo
0
530
Kotlin さんと誕生日が近いだけの男の話
ryugoo
2
510
Android エンジニアになって 2 年の学び
ryugoo
1
2.6k
年末だしお掃除をしよう!
ryugoo
0
790
Other Decks in Programming
See All in Programming
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
0
820
Enterprise Web App. Development (1): Build Tool Training Ver. 5
knakagawa
1
110
gen_statem - OTP's Unsung Hero
whatyouhide
1
200
5年間継続して開発した自作OSSの記録
bebeji_nappa
0
210
エンジニアが挑む、限界までの越境
nealle
1
180
音声プラットフォームのアーキテクチャ変遷から学ぶ、クラウドネイティブなバッチ処理 (20250422_CNDS2025_Batch_Architecture)
thousanda
0
180
生成AIを使ったQAアプリケーションの作成 - ハンズオン補足資料
oracle4engineer
PRO
3
220
Lambda(Python)の リファクタリングが好きなんです
komakichi
3
200
MCP調べてみました! / Exploring MCP
uhzz
2
2.3k
Building Scalable Mobile Projects: Fast Builds, High Reusability and Clear Ownership
cyrilmottier
2
280
リストビュー画面UX改善の振り返り
splcywolf
0
140
ComposeでWebアプリを作る技術
tbsten
0
110
Featured
See All Featured
Become a Pro
speakerdeck
PRO
27
5.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Adopting Sorbet at Scale
ufuk
76
9.3k
Optimizing for Happiness
mojombo
377
70k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
StorybookのUI Testing Handbookを読んだ
zakiyama
29
5.6k
Why Our Code Smells
bkeepers
PRO
336
57k
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
͓͠·͍