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アプリ開発における技術顧問としての役割 #DroidKaigi 2018
Search
Tatsuya Arai
February 22, 2018
Technology
1
2.3k
Androidアプリ開発における技術顧問としての役割 #DroidKaigi 2018
2018/2/9
#DroidKaigi 2018 でお話した「Androidアプリ開発における技術顧問としての役割」の資料です
Tatsuya Arai
February 22, 2018
Tweet
Share
More Decks by Tatsuya Arai
See All by Tatsuya Arai
5 minutes PWA
cutmail
0
180
4年続くアプリにおけるチーム開発 #DroidKaigi 2017
cutmail
13
4.8k
フリルにおけるドッグフーディング / Fashion Tech Meetup #2 LT
cutmail
2
3.8k
Adapter and Custom Layout
cutmail
3
860
いかにして不具合発見時の フィードバックを素早く行うか #potatotips 12
cutmail
0
2.4k
Androidのログ出力をいい感じにする #potatotips 9
cutmail
8
9.6k
コーディング規約を緩く守りつつ仕事の成果を出す方法
cutmail
2
580
Other Decks in Technology
See All in Technology
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
200
OCI Network Firewall 概要
oracle4engineer
PRO
0
4.1k
オープンソースAIとは何か? --「オープンソースAIの定義 v1.0」詳細解説
shujisado
5
560
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
190
インフラとバックエンドとフロントエンドをくまなく調べて遅いアプリを早くした件
tubone24
1
430
Making your applications cross-environment - OSCG 2024 NA
salaboy
0
180
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
rootlessコンテナのすゝめ - 研究室サーバーでもできる安全なコンテナ管理
kitsuya0828
3
380
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
670
隣接領域をBeyondするFinatextのエンジニア組織設計 / beyond-engineering-areas
stajima
1
270
B2B SaaS × AI機能開発 〜テナント分離のパターン解説〜 / B2B SaaS x AI function development - Explanation of tenant separation pattern
oztick139
2
220
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
5
570
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
The Cult of Friendly URLs
andyhume
78
6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
654
59k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
The World Runs on Bad Software
bkeepers
PRO
65
11k
What's new in Ruby 2.0
geeforr
343
31k
Producing Creativity
orderedlist
PRO
341
39k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Thoughts on Productivity
jonyablonski
67
4.3k
Transcript
AndroidΞϓϦ։ൃʹ ͓͚Δٕज़ސͱͯ͠ ͷׂ DroidKaigi 2018 @cutmail
͢Δ • ٕज़ސͱͯ͠νʔϜΛͲ͏ཱ͔ͯͨ͠ • ٕज़ސͱͯ͠ձࣾʹͲ͏ߩݙ͢Δ͔ • ۙͷϓϩδΣΫτͰԿΛ࠾༻͔ͨ͠
͠ͳ͍ • MVVMɺMVP….ͳͲͷઃܭͷ
ࣗݾհ
ࣗݾհ • @cutmail • ߥҪ ୡ࠸ • ϐοΫΞοϓגࣜձࣾ ٕज़ސ •
Android / iOS / GAE / Go
ΞδΣϯμ • ٕज़ސͱ • ٕज़ސͱ͍ͯͬͯ͠Δ͜ͱ • ٕज़ސͱͯ͠AndroidΞϓϦ։ൃͰ͍ͬͯ Δ͜ͱ • ·ͱΊ
ٕज़ސͱ
ٕज़ސͱ • ٕज़ऀͷ৬Ͱٕज़ࢦಋऀ • ٕज़ͷಛఆྖҬͷΞυόΠβʔ • ৫ʹର͢ΔΞυόΠβʔ
ٕज़ސͱͯ͠ ͍ͬͯΔ͜ͱ
ٕज़ސͷࣄ • ։ൃମ੍ͷཱͯ͠ • ٕज़ใ • ࠾༻ • ࣾͷ੍࡞Γ •
ٕज़ͷબఆ
։ൃମ੍ͷཱͯ͠
%..άϧʔϓ ϐοΫΞοϓ ωΫετΧϨϯγʔ ͦͷଞ άϧʔϓձࣾ
CHIPS
None
։ൃνʔϜମ੍ • PM 1ਓ • σβΠφʔ 1ਓ • αʔόʔ 2ਓ
• iOS 2ਓ • Android 1ਓ
ϓϥοτϑΥʔϜ • iOS • AndroidʢະϦϦʔεʣ • Ұ෦Web
ॳ
ϓϩδΣΫτʹ ೖͬͯΈͨΒ
ۀظͷΑ͏ͳ։ൃ͕ ߦΘΕ͍ͯͨ
ޱ಄ͰͷΓͱΓ
୭Ѳ͍ͯ͠ͳ͍ ։ൃεέδϡʔϧ
ಉ͡ํΛ ͍͍ͯͳ͍
࣋ଓੑͷͳ͍։ൃ
ϚΠϧετʔϯ͕ͳ͍
ʮઓ͔ͳʁʯ
Ͳ͏͔ͨ͠
νʔϜϏϧσΟϯά
߹॓ͷ࣮ࢪ
None
None
߹॓ͷ࣮ࢪ • ΦϑΟεͱ͋͑ͯԕ͍ॴʹ͋͑ͯंͰ • άϧʔϓʹΘ͔ΕͯंͰҠಈ • υϥοΧʔ෩ΤΫααΠζΛத৺ͱͨ͠ϫʔ Ϋγϣοϓ
υϥοΧʔ෩ΤΫααΠζ • 3ͭͷ࣭Ͱ͓ޓ͍ͷ͜ͱΛΓɺظΛ͢Γ ߹ΘͤΔ • ࣗͷಘҙͳ͜ͱ • νʔϜϝϯόʔ͕ࣗʹظ͍ͯ͠Δͱࢥ͏͜ ͱ •
ଞͷϝϯόʔʹظ͢Δ͜ͱ
݁Ռ
͓ޓ͍ͷظΛ͢Γ͋Θͤ Δ͜ͱͰ
νʔϜϝϯόʔͷ૬ޓཧղ͕ ਐΜͩ
νʔϜͷ݁ଋྗ͕ߴ·ͬͨ
։ൃମ੍ͷඋ
։ൃମ੍ͷඋ • 2िؒͷεϓϦϯτ • ελϯυΞοϓϛʔςΟϯά • ϓϩμΫτόοΫϩά • ίʔυϨϏϡʔͷಋೖ
֤ʑ͕͍࣋ͬͯΔλεΫͷ ݟ͑ΔԽ
λεΫͷՄࢹԽ • TrelloΛಋೖ • EleganttͰΨϯτνϟʔτΛݟΕΔΑ͏ʹ
ZenHubಋೖ • issueϚΠϧετʔϯΛGitHubͰ݁Ͱ͖ ΔΑ͏ʹ • ͜ΕΛݟͳ͕ΒελϯυΞοϓMTGΛ࣮ࢪ
None
None
ίʔυϨϏϡʔͷಋೖ
ίʔυϨϏϡʔ࣌ʹϥϕϧΛ͚ͭΔ • [nits] : খ͍͞ࢦఠɻΠϯσϯτtypo • [IMO] : In My
Opinion ࢲ͜͏ࢥ͏͚Ͳผʹ͢͜ͱඞ ਢͰͳ͍ • [COULD] : Ͱ͖Εͨ͠΄͏͕ྑ͍ • [MUST] : ͦ͏ • [Q] : ࣭
ίʔυϨϏϡʔͷ؍ • ༷ͦͦΛຬ͍ͨͯ͠Δ͔ • iOS / AndroidͰۃʹ༷͕ҧ͍ͬͯͳ͍͔ • ໋໊͕ద͔ •
ςετ͕ॻ͔Ε͍ͯΔ͔ • ίϝϯτ͕ͳͯ͘ཧղͰ͖Δ͔ • ࣮ࡍʹಈ͔ͯ͠Έͯҧײ͕ͳ͍͔
ϦϦʔε༰Λ͢ • GitHubͷϦϦʔεػೳΛͬͯɺͦͷόʔ δϣϯʹԿΛϦϦʔε͔ͨ͢͠ • Slack͔Βgit-pr-releaseΛ͚ͨͨΔΑ͏ʹͯ͠ ͍Δ • ։ൃҎ֎ͷϝϯόʔʹϦϦʔεϖʔδΛݟͯ มߋΛѲͯ͠Β͏
ٕज़ใ
ٕज़ใ • ࣾͰ͍ͬͯΔٕज़τϐοΫΛ֎ʹൃ৴ ͢Δ • ςοΫϒϩά • Πϕϯτͷڠࢍɺग़ల
None
%..άϧʔϓ ϐοΫΞοϓ ωΫετΧϨϯγʔ ͦͷଞ άϧʔϓձࣾ
GAE/Go • TELLER શࠃCM์ө࣌GAEͷΦʔτεέʔ ϧͰ༨༟ • ύϑΥʔϚϯε͕མͪΔ͜ͱͳ͍ • ϩʔϧόοΫόʔδϣϯΛ͚ͩ͢
None
None
ࣾͰΘΕ͍ͯΔ ٕज़ελοΫΛ၆ᛌͯ͠ هࣄԽ
֎෦ͷΞτϓοτΛ ૿͢ΈΛ࡞Δ
Πϕϯτͷڠࢍ • ձࣾͷٕज़ελοΫʹ͋͏Πϕϯτʹڠࢍ͢Δ • ڠࢍۚͷ֬อ • ڠࢍ͢Δ͚ͩͰͳ͘ɺొஃґཔ͢Δ
ΤϯδχΞ࠾༻ͷαϙʔτ
ΤϯδχΞ࠾༻ͷαϙʔτ • ٕज़ϒϥϯσΟϯά • Γ͍ͯͳ͍ਓࡐͷཧ/ൃ۷
ٕज़ϒϥϯσΟϯά • ٕज़ϒϥϯσΟϯά࠾༻ϒϥϯσΟϯά • ֎͔Βͷݟ͑ํΛ౿·͑ͯ෦Λվળ͍ͯ͘͠ • ॏཁͳͷද໘͚ͩͰͳ͘ɺ݁Ռతʹ αʔϏε͕ྑ͘ͳΔ͜ͱ
Γ͍ͯͳ͍ਓࡐΛ໌֬Խ • ֤νʔϜ͕ࠓͲͷ৬छΛืू͍ͯ͠Δͷ͔ • Ϧιʔεঢ়گʁ • ืूཁ߲Λ࡞͢Δ • Ͳ͏͍͏εϖοΫͷਓ͕ඞཁͳͷ͔
੍࡞Γ
੍࡞Γ • 50%ϑϦʔϧʔϧ • ηϛφʔࢀՃ੍ • ϑϨϯυγοϓαϙʔτ • ͓ࢼ͠ब৬੍
50%ϑϦʔϧʔϧ • ۀ࣌ؒͷ50%ΛҎԼͷ׆ಈʹ͋ͯͯྑ੍͍ • OSSͷߩݙ • ຊͷࣥච • Πϕϯτొஃɺͦͷ४උ •
࠾༻ʹؔΘΔ׆ಈશൠ
ΧϯϑΝϨϯεࢀՃ੍ • ༗ྉͷ֎෦ηϛφʔΧϯϑΝϨϯεʹࢀՃ Ͱ͖Δ • DroidKaigiɺtry! Swift • ۙͩͱGopherConɺKotlinConfʹϝϯόʔ ͕ࢀՃ༧ఆ
ϑϨϯυγοϓαϙʔτ • ༏लͳ༑ਓͱͷ͝൧ͷඅ༻Λձ͕ࣾෛ୲ • 1ճʹ͖ͭ1ਓ1ສԁ·Ͱิॿ • ༏लͳϝϯόʔ༏लͳ༑ਓΛ͍ͬͯΔ ͣ
͓ࢼ͠ब৬੍ • ҆৺ͯ͠ೲಘͯ͠ೖࣾͯ͠Β͏ͨΊʹɺస ৬લʹ࣮ࡍʹҰॹʹಇ͚Δ • 1~1िؒఔ • ͪΖΜใु͓ࢧ͍
ࣾΠϕϯτͷ։࠵ • ϞόΠϧڞ༗ձ • Goձ • ʮΈΜͳͷGoݴޠʯྠಡձ • ϐοΫΞοϓφΠτ
ϞόΠϧڞ༗ձ • ϞόΠϧΞϓϦΤϯδχΞ͕ू·ͬͯίʔυΛ ಡΜͩΓɺ࠷ۙͷ։ൃτϐοΫʹ͍ͭͯ͢ • DroidKaigiΞϓϦͷιʔείʔυϦʔσΟϯ άΛͨ͠Γ
ϞόΠϧڞ༗ձ • ଞνʔϜͷαʔϏεͷίʔυΛಡΜͰɺઃܭ ʹ͍ͭͯ͋Ε͜Ε • ΞʔΩςΫνϟʹ͍ͭͯͷٞ
Goձ • αʔόʔΤϯδχΞ͕ू·Γɺ֤ϓϩδΣΫ τͷίʔυΛಡΜͩΓɺࠔ͍ͬͯΔ͜ͱɺ ϗοτͳτϐοΫઃܭʹ͍ͭͯ͢ • ΞϓϦΤϯδχΞࢀՃOK
ʮΈΜͳͷGoݴޠʯྠಡձ • 1ষͮͭ࣋ͪճΓͰղઆ • ΞϓϦΤϯδχΞࢀՃ • αʔόʔͷؾ࣋ͪΛཧղͯ͠ Β͏
ϐοΫΞοϓφΠτ • ࣾLTձ • ࢿྉجຊతʹͳ͠Ͱ • ͯ͘5 • ٕज़Ҏ֎ͷτʔΫWelcome
None
Ϟνϕʔγϣϯ • ୯७ʹؾ͍ͮͨ͜ͱΛ൸࿐͍ͨ͠ • খωλΛൃදͰ͖ΔػձΛఏڙ͢Δ • νʔϜؒͰ͢Λ࡞Δ • ·ͣࣾͰ͢ͷʹ׳Ε͔ͯΒ֎෦Ͱొஃ ͢Δಓےʹͯ͠Β͏
ٕज़ސͱͯ͠ AndroidΞϓϦ։ൃͰͬͯ ͍Δ͜ͱ
ٕज़ͷબఆ
None
CHIPSͰͷϥΠϒϥϦ • Kotlin • RxJava2 • Dagger2 • Android Architecture
Component • Lifecycle • Room • Paging
Handling Lifecycles • ActivityFragmentͳͲͷίϯϙʔωϯτʹ ؔ͢ΔใΛอ࣋͠ɺΦϒδΣΫτ͕؍ଌͰ ͖ΔΑ͏ʹ͢Δ
Handling Lifecycles • CHIPSͰLifecycleͷมߋ࣌ʹExoPlayerͷڍ ಈΛม͑ͨΓ͢Δͷʹ͍ͬͯͨΓ͢Δ
Room • SQLiteʹΞΫηε͢ΔநԽϨΠϠʔΛఏڙ
@Entity data class Task( @PrimaryKey val id: String, val name:
String) { } @Dao interface TaskDao { @Query("DELETE FROM task") fun deleteAll() } Room
Paging • RoomͳͲͷίϯϙʔωϯτͱγʔϜϨεʹ࿈ ܞͰ͖ΔϖʔδϯάϥΠϒϥϦ
Paging • PositionalDataSource • RoomΛ࣮͍ͯ͠Εɺ˓͔Β˓݅औಘΈ ͍ͨͳΠϯλϑΣʔεΛࣗಈతʹੜͯ͘͠ ΕΔ https://developer.android.com/topic/libraries/architecture/paging.html
جຊతʹGoogleίϛϡχςΟ ओྲྀͷٕज़Λ࠾༻͍ͯ͘͠
ͦͷଞϥΠϒϥϦ • Firebase Authentication • Firebase Performance • Retrofit2 •
ExoPlayer • Glide
CIڥͷඋ • Bitrise • Danger • Android Lint • ktlint
• Fabric betaͰࣾ • ৗʹ࠷৽൛͕QAͰ͖Δମ੍ʹ
Πϕϯτܭଌڥͷඋ • Firebase Analytics →BigQuery → CHATIO • ͲͷϓϩμΫτ͜ͷߏʹ
None
None
ۙͷࣄྫ
ೝূΛஔ͖͑ͨ
ಠࣗೝূ͔Β Firebase Authentication • ॳճىಈ࣌ʹήετϢʔβʔΛ࡞ • ݩʑಠࣗͷϩδοΫͰϢʔβʔ࡞ɺೝূ • ಠࣗOAuth࣮
ಠࣗೝূ͔ΒFirebase Auth firebaseAuthInstance.signInAnonymously() .addOnCompleteListener { task -> if (task.isSuccessful) {
observer.onSuccess(task.result.user) } else { val cause = task.exception.toOption() .fold({ RuntimeException("unknown firebase auth error") }, { th -> th }) observer.onError(cause) } } ΞϓϦFirebaseͷtokenΛαʔόʔʹ͛Δ͚ͩ
ೝূFirebase Auth ೝՄࣗαʔόʔͰ
ೝূํ๏Λ૿͢߹ Firebase AuthenticationͰ ಠࣗೝূΛ࣮͢Δ https://firebase.google.com/docs/auth/web/custom-auth?hl=ja https://developers-jp.googleblog.com/2016/10/authenticate-your- firebase-users-with.html
ӡ༻Λָʹ͢Δ ΞʔΩςΫνϟΛબ͢Δ
ӡ༻ΑΓαʔϏε։ൃʹ ूத͠Α͏
αʔϏεͷίΞͳՁఏڙʹ ྗ͢Δ
͜Ε͔ΒΓ͍ͨ͜ͱ
API Documentͷࣗಈੜ • ιʔείʔυ͔Βࣗಈੜ • ৽͍͠ΫϥΠΞϯτΞϓϦͳͲΛ࡞Δ࣌ʹඞ ਢ
GAE/GoɺFirebaseΛͬͨ αʔϏεج൫ͷ։ൃ • ϘΠϥʔςϯϓϨʔτ • ೝূϩάͳͲͷجຊతͳίϯϙʔωϯτΛ ཏͨ͠αʔϏεج൫ • αʔϏεͷ্ཱͪ͛Λૣ͘Ͱ͖ΔΑ͏ʹ •
ӡ༻ָʹ
• iOS, AndroidͰڞ௨ͷίϯϙʔωϯτͱͯ͠ Γग़ͤΔͷΛReact NativeԽ
None
·ͱΊ
ٕज़ސͷࣄͱ • ֎෦ɺ෦ଟذʹΘͨΔ • αʔϏεͷͨΊʹɺظతͳઢͰٕज़Λ બఆ͢Δ • ࣾͰΘΕ͍ͯΔٕज़ελοΫΛັྗʹม͑ Δ •
ձࣾͷΧϧνϟʔ࡞ΓʹӨڹ͢Δ
࠷ޙʹ
ٕज़ސ͔ΒίʔϙϨʔτΤϯ δχΞϦϯά • ΑΓ৫ͷ෦Λվળ͍ͯͨ͘͠Ίɺ ίʔϙϨʔτΤϯδχΞϦϯάࣨΛઃཱ • αʔϏεڞ௨ͷج൫ɺཧγεςϜɺશࣾʹ ඥͮ͘։ൃΛਐΊΔ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠