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
2.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Androidアプリ開発における技術顧問としての役割 #DroidKaigi 2018
2018/2/9
#DroidKaigi 2018 でお話した「Androidアプリ開発における技術顧問としての役割」の資料です
Tatsuya Arai
February 22, 2018
More Decks by Tatsuya Arai
See All by Tatsuya Arai
5 minutes PWA
cutmail
0
240
4年続くアプリにおけるチーム開発 #DroidKaigi 2017
cutmail
13
5k
フリルにおけるドッグフーディング / Fashion Tech Meetup #2 LT
cutmail
2
4k
Adapter and Custom Layout
cutmail
3
990
いかにして不具合発見時の フィードバックを素早く行うか #potatotips 12
cutmail
0
2.6k
Androidのログ出力をいい感じにする #potatotips 9
cutmail
8
10k
コーディング規約を緩く守りつつ仕事の成果を出す方法
cutmail
2
670
Other Decks in Technology
See All in Technology
組織にどうSREを根付かせるか?〜IVRyの場合〜
abnoumaru
0
330
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
150
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
6
1k
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
150
SmartHR Engineering Team Deck
smarthr
1
1.2k
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
2
220
老害フォレンジッカーはAI羊の夢を見るか?
tadmaddad
0
310
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
250
サイバー捜査員研修(後半)
nomizone
1
810
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
230
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
230
Redmine 7.0 新機能・機能強化解説(OSC2026京都ダイジェスト版)
vividtone
1
210
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Deep Space Network (abreviated)
tonyrice
0
250
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Optimising Largest Contentful Paint
csswizardry
37
3.9k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
200
Crafting Experiences
bethany
1
240
Building an army of robots
kneath
306
46k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
RailsConf 2023
tenderlove
30
1.5k
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
·ͱΊ
ٕज़ސͷࣄͱ • ֎෦ɺ෦ଟذʹΘͨΔ • αʔϏεͷͨΊʹɺظతͳઢͰٕज़Λ બఆ͢Δ • ࣾͰΘΕ͍ͯΔٕज़ελοΫΛັྗʹม͑ Δ •
ձࣾͷΧϧνϟʔ࡞ΓʹӨڹ͢Δ
࠷ޙʹ
ٕज़ސ͔ΒίʔϙϨʔτΤϯ δχΞϦϯά • ΑΓ৫ͷ෦Λվળ͍ͯͨ͘͠Ίɺ ίʔϙϨʔτΤϯδχΞϦϯάࣨΛઃཱ • αʔϏεڞ௨ͷج൫ɺཧγεςϜɺશࣾʹ ඥͮ͘։ൃΛਐΊΔ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠