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
180
4年続くアプリにおけるチーム開発 #DroidKaigi 2017
cutmail
13
4.9k
フリルにおけるドッグフーディング / Fashion Tech Meetup #2 LT
cutmail
2
3.8k
Adapter and Custom Layout
cutmail
3
880
いかにして不具合発見時の フィードバックを素早く行うか #potatotips 12
cutmail
0
2.5k
Androidのログ出力をいい感じにする #potatotips 9
cutmail
8
9.7k
コーディング規約を緩く守りつつ仕事の成果を出す方法
cutmail
2
590
Other Decks in Technology
See All in Technology
RECRUIT TECH CONFERENCE 2025 プレイベント【高橋】
recruitengineers
PRO
0
160
プロダクトエンジニア構想を立ち上げ、プロダクト志向な組織への成長を続けている話 / grow into a product-oriented organization
hiro_torii
1
170
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
24
7.1k
個人開発から公式機能へ: PlaywrightとRailsをつなげた3年の軌跡
yusukeiwaki
11
3k
Goで作って学ぶWebSocket
ryuichi1208
0
160
リーダブルテストコード 〜メンテナンスしやすい テストコードを作成する方法を考える〜 #DevSumi #DevSumiB / Readable test code
nihonbuson
11
7.2k
全文検索+セマンティックランカー+LLMの自然文検索サ−ビスで得られた知見
segavvy
2
100
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
600
OpenID Connect for Identity Assurance の概要と翻訳版のご紹介 / 20250219-BizDay17-OIDC4IDA-Intro
oidfj
0
270
急成長する企業で作った、エンジニアが輝ける制度/ 20250214 Rinto Ikenoue
shift_evolve
3
1.3k
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
17
6.7k
自動テストの世界に、この5年間で起きたこと
autifyhq
10
8.5k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Building an army of robots
kneath
303
45k
Facilitating Awesome Meetings
lara
52
6.2k
RailsConf 2023
tenderlove
29
1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Being A Developer After 40
akosma
89
590k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
Bash Introduction
62gerente
611
210k
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
·ͱΊ
ٕज़ސͷࣄͱ • ֎෦ɺ෦ଟذʹΘͨΔ • αʔϏεͷͨΊʹɺظతͳઢͰٕज़Λ બఆ͢Δ • ࣾͰΘΕ͍ͯΔٕज़ελοΫΛັྗʹม͑ Δ •
ձࣾͷΧϧνϟʔ࡞ΓʹӨڹ͢Δ
࠷ޙʹ
ٕज़ސ͔ΒίʔϙϨʔτΤϯ δχΞϦϯά • ΑΓ৫ͷ෦Λվળ͍ͯͨ͘͠Ίɺ ίʔϙϨʔτΤϯδχΞϦϯάࣨΛઃཱ • αʔϏεڞ௨ͷج൫ɺཧγεςϜɺશࣾʹ ඥͮ͘։ൃΛਐΊΔ
͝੩ௌ͋Γ͕ͱ͏ ͍͟͝·ͨ͠