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.4k
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
200
4年続くアプリにおけるチーム開発 #DroidKaigi 2017
cutmail
13
4.9k
フリルにおけるドッグフーディング / Fashion Tech Meetup #2 LT
cutmail
2
3.9k
Adapter and Custom Layout
cutmail
3
920
いかにして不具合発見時の フィードバックを素早く行うか #potatotips 12
cutmail
0
2.5k
Androidのログ出力をいい感じにする #potatotips 9
cutmail
8
9.8k
コーディング規約を緩く守りつつ仕事の成果を出す方法
cutmail
2
620
Other Decks in Technology
See All in Technology
DatabricksのOLTPデータベース『Lakebase』に詳しくなろう!
inoutk
0
160
LLMでAI-OCR、実際どうなの? / llm_ai_ocr_layerx_bet_ai_day_lt
sbrf248
0
140
モバイルゲームの開発を支える基盤の歩み ~再現性のある開発ラインを量産する秘訣~
qualiarts
0
620
生成AIを活用した野球データ分析 - メジャーリーグ編 / Baseball Analytics for Gen AI
shinyorke
PRO
1
240
なぜAI時代に 「イベント」を中心に考えるのか? / Why focus on "events" in the age of AI?
ytake
2
810
大規模組織にAIエージェントを迅速に導入するためのセキュリティの勘所 / AI agents for large-scale organizations
i35_267
6
330
Kiroから考える AIコーディングツールの潮流
s4yuba
1
380
P2P ではじめる WebRTC のつまづきどころ
tnoho
1
270
Wasmで社内ツールを作って配布しよう
askua
0
150
ユーザー理解の爆速化とPdMの価値
kakehashi
PRO
1
110
AI人生苦節10年で会得したAIがやること_人間がやること.pdf
shibuiwilliam
1
210
[MIRU2025]Preference Optimization for Multimodal Large Language Models for Image Captioning Tasks
keio_smilab
PRO
0
110
Featured
See All Featured
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Side Projects
sachag
455
43k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Facilitating Awesome Meetings
lara
54
6.5k
Agile that works and the tools we love
rasmusluckow
329
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Navigating Team Friction
lara
187
15k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Bash Introduction
62gerente
613
210k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
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
·ͱΊ
ٕज़ސͷࣄͱ • ֎෦ɺ෦ଟذʹΘͨΔ • αʔϏεͷͨΊʹɺظతͳઢͰٕज़Λ બఆ͢Δ • ࣾͰΘΕ͍ͯΔٕज़ελοΫΛັྗʹม͑ Δ •
ձࣾͷΧϧνϟʔ࡞ΓʹӨڹ͢Δ
࠷ޙʹ
ٕज़ސ͔ΒίʔϙϨʔτΤϯ δχΞϦϯά • ΑΓ৫ͷ෦Λվળ͍ͯͨ͘͠Ίɺ ίʔϙϨʔτΤϯδχΞϦϯάࣨΛઃཱ • αʔϏεڞ௨ͷج൫ɺཧγεςϜɺશࣾʹ ඥͮ͘։ൃΛਐΊΔ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠