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
継続的な開発スタイル 「AbemaTV iOSアプリを週一で リリースしている話」
Search
Yuji Hato
February 22, 2019
Technology
6
3.8k
継続的な開発スタイル 「AbemaTV iOSアプリを週一で リリースしている話」
Yuji Hato
February 22, 2019
Tweet
Share
More Decks by Yuji Hato
See All by Yuji Hato
ABEMAモバイルアプリ開発のDevOps戦略
dekatotoro
1
600
Multiplatform Engineering Roadmap for the Future
dekatotoro
1
130
Introduction to RIBs
dekatotoro
5
1.3k
iOS Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
dekatotoro
0
350
動画アプリをなめらかに動かす技術 - iOS -
dekatotoro
0
310
5分で学ぶ差分更新とRxDataSources
dekatotoro
0
270
AbemaTV モバイルアプリの開発体制と 開発プロセスの話
dekatotoro
0
240
Apple TV - tvOS入門 -
dekatotoro
0
110
AbemaTV on Apple TV
dekatotoro
0
36
Other Decks in Technology
See All in Technology
アジャイルでの品質の進化 Agile in Motion vol.1/20241118 Hiroyuki Sato
shift_evolve
0
150
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.4k
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.7k
DynamoDB でスロットリングが発生したとき_大盛りver/when_throttling_occurs_in_dynamodb_long
emiki
1
190
いざ、BSC討伐の旅
nikinusu
2
780
Application Development WG Intro at AppDeveloperCon
salaboy
0
190
BLADE: An Attempt to Automate Penetration Testing Using Autonomous AI Agents
bbrbbq
0
310
誰も全体を知らない ~ ロールの垣根を超えて引き上げる開発生産性 / Boosting Development Productivity Across Roles
kakehashi
1
230
DynamoDB でスロットリングが発生したとき/when_throttling_occurs_in_dynamodb_short
emiki
0
130
Evangelismo técnico: ¿qué, cómo y por qué?
trishagee
0
360
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
750
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
590
Featured
See All Featured
Code Review Best Practice
trishagee
64
17k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
120
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
890
Building an army of robots
kneath
302
43k
A Tale of Four Properties
chriscoyier
156
23k
Agile that works and the tools we love
rasmusluckow
327
21k
VelocityConf: Rendering Performance Case Studies
addyosmani
325
24k
Gamification - CAS2011
davidbonilla
80
5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Transcript
ܧଓతͳ։ൃελΠϧ ʮAbemaTV iOSΞϓϦΛिҰͰ ϦϦʔε͍ͯ͠Δʯ CA BASE CAMP2019 Yuji Hato
ށ ༐ೋ • Contributed services dekatotoro @dekatotoro yuji.hato
1. ։ൃମ੍ 2. ίʔυϕʔε 3. ։ൃϑϩʔ 4. ࠓޙͷऔΓΈ 5. ·ͱΊ
։ൃମ੍
։ൃମ੍ 80ਓ Android iOS Web New Device Streaming Client Developer
Infrastructure API Content Engineering Content Delivery Data Management SRE Direction Design QA Board CTO VPoE board / Tech Lead Tech Lead
։ൃମ੍ 80ਓ Android iOS Web New Device Streaming Client Developer
Infrastructure API Content Engineering Content Delivery Data Management SRE Direction Design QA Board CTO VPoE board / Tech Lead Tech Lead
։ൃମ੍ • iPhone • iPad • Apple TV ͦͷଞ Google
Cast AirPlay ࠶ੜ iOS Team ։ൃσόΠε
։ൃମ੍ iOSΤϯδχΞ 12~15໊ ఆऀ Πϯλʔϯ
։ൃମ੍ iOS Teamͷਓ 4 8 12 8 12 ݱࡏ ʜ
աڈ ະདྷ
։ൃମ੍ ཧͷ։ൃεϐʔυͱ࣭ ਓ
։ൃମ੍ ݱ࣮ͷ։ൃεϐʔυͱ࣭ ਓ
։ൃମ੍ ։ൃεϐʔυͱ࣭ͷԼ • Ϛωδϝϯτίετ૿ • ίϛϡχέʔγϣϯίετ૿ • ίϯϑϦΫτϦεΫ • ίʔυ࣭ͷΒ͖ͭ
։ൃମ੍ ։ൃεϐʔυͱ࣭ͷԼ • Ϛωδϝϯτίετ૿ • ίϛϡχέʔγϣϯίετ૿ • ίϯϑϦΫτϦεΫ • ίʔυ࣭ͷΒ͖ͭ
• ͷूத૿Ճ • υΩϡϝϯτෆඋ / ଐਓԽ • औΓѻ͏ίʔυൣғͷ͞ • εΩϧܦݧʹґଘ ݪҼ
։ൃମ੍ Team͝ͱͷ։ൃ ਓ ਓ ਓ
։ൃମ੍ iOSΤϯδχΞ 12~15໊ Πϯλʔϯ ఆऀόΠτ ࠶ܝ
ࠂ ࢹௌ࣭ ϚωλΠζ ւ֎ରԠ ։ൃମ੍ Team͝ͱͷ։ൃ ίΞ Apple TV
։ൃମ੍ Team͝ͱͷ։ൃ .JDSP5FBN • ͷࢄ • Ϛωδϝϯτίετͷݮ • ίϛϡχέʔγϣϯίετͷݮ
Micro Team
։ൃମ੍ OKRΛಋೖ͍ͯ͠·͢ ϚωλΠζ σόΠε֦େ ຊ࣭վળ ۀվળ ϝλσʔλ etc
ຊ࣭վળ ϚωλΠζ σόΠε֦େ ։ൃମ੍ Objectiveʹඥ͍ͮͨKey Result
ίʔυϕʔε
ίʔυϕʔε • ios ‥‥ iOSΞϓϦ • tvos ‥‥ tvOSΞϓϦ •
api ‥‥ APIϞδϡʔϧ • protobuf-swift ‥‥ .protoΛ.swiftʹมͨ͠ͷ • cmdshelf-ios ‥‥ scripts • etc ‥‥ mock, tool, sample Repositories
ίʔυϕʔε • ios • tvos • api Repositories
ίʔυϕʔε • ios • tvos • api Repositories
ίʔυϕʔε iOS
ίʔυϕʔε iOS • 10 ~ 13ਓͰ։ൃ 1ϲ݄Ͱ187ݸͷpull request͕Ϛʔδ͞Ε͍ͯͯɺ ӦۀͰฏۉ͢Δͱ18~10ݸͷpull request͕
Ϛʔδ͞Ε͍ͯΔ
ίʔυϕʔε tvOS
ίʔυϕʔε tvOS • 2~3ਓͰ։ൃ 1ϲ݄Ͱ60ݸͷpull request͕Ϛʔδ͞Ε͍ͯͯɺ ӦۀͰฏۉ͢Δͱ13ݸͷpull request͕Ϛʔ δ͞Ε͍ͯΔ
ίʔυϕʔε API
ίʔυϕʔε API • iOS, tvOSڞ௨ 1ϲ݄Ͱ35ݸͷpull request͕Ϛʔδ͞Ε͍ͯͯɺ ӦۀͰฏۉ͢Δͱ11~2ݸͷpull request͕ Ϛʔδ͞Ε͍ͯΔ
ίʔυϕʔε Tests 2009 tests 3200 tests 3526 tests 2019/02 2018/10
2017/10
ίʔυϕʔε Tests • ۃྗςετΛॻ͘ํ • ModelϩδοΫςετΛॻ͘ • UIͷςετ΄ͱΜͲॻ͍͍ͯͳ͍ σβΠϯ༷͕සൟʹมΘΔݱঢ়ͩͱίετ͕େ͖͍ ͷͱɺViewͱModelΛ͢Δઃܭʹ͍ͯ͠ΔͨΊɺUI
ModelͷςετͱQAͰ୲อ
ຖେྔͷίʔυ͕มߋ͞Ε͍ͯΔ
։ൃϑϩʔ
։ൃϑϩʔ • 2िؒαΠΫϧͷsprint։ൃͱਃ • ։ൃظؒ1िؒɺQAظؒ1िؒ چ։ൃϑϩʔ
։ൃϑϩʔ QA 1िؒ 1िؒ QA QA ਃ ਃ ਃ ਃ
QA ։ൃ ։ൃ ։ൃ چ։ൃϑϩʔ
։ൃϑϩʔ QA 1िؒ 1िؒ QA QA ਃ ਃ ਃ ਃ
QA ։ൃ ։ൃ ։ൃ چ։ൃϑϩʔ ͍։ൃ
։ൃϑϩʔ • ։ൃ༻ͷmasterϒϥϯνͱQA༻ͷqaϒϥϯνͰӡ༻ • ֤ࣗfeatureϒϥϯνΛmaster / qa͔Βͬͯ࡞ۀ • qaϒϥϯνͰςετ͕ྃͨ͠ΒϦϦʔεͰ͖Δঢ়ଶ چ։ൃϑϩʔ
branchઓུ
։ൃϑϩʔ چ։ൃϑϩʔ branchઓུ master qa feature ̎िؒਃ ։ൃ1िؒ QA1िؒ ϦϦʔεςετ
։ൃϑϩʔ چ։ൃϑϩʔ branchઓུ master qa feature ̎िؒਃ ։ൃ1िؒ QA1िؒ ϦϦʔεςετ
ɹ2"ظؒதʹ࣍ͷ։ൃΛ͍ͬͯ ΔϝϯόʔͪΖΜ͍·͢
։ൃϑϩʔ • ֤TeamͷऔΓవΊͷௐίετ • ϦϦʔεϚωʔδϟʔͷෛ୲͕େ͖͍ • 1ͭͷTeamͷԆͰϦϦʔε͕ԆͼΔ • Teamؒͷ༏ઌʹࠨӈ͞ΕϦϦʔε͕ԆͼΔ •
2िؒʹ1ճͷϦϦʔεͩͱվળͷ͕ग़ͳ͍ چ։ൃϑϩʔ ՝
։ൃϑϩʔ چ։ൃϑϩʔ ՝ ւ֎ରԠ ϚωλΠζ ίΞ ༧ఆͷਃ ࣮ࡍͷਃ ࣮ /
QA ࣮ / QA ࣮ / QA मਖ਼ / QA ϦϦʔε
։ൃϑϩʔ • 1िؒαΠΫϧͷ։ൃͱਃ • ։ൃͱQAͷظ͚ؒͳ͍ ৽։ൃϑϩʔ
։ൃϑϩʔ 1िؒ 1िؒ ਃ ਃ ਃ ਃ QA ։ൃ ਃ
ਃ ਃ ৽։ൃϑϩʔ
։ൃϑϩʔ • ֤ࣗfeatureϒϥϯνΛmaster͔Βͬͯ࡞ۀ • featureϒϥϯνͰQAޙʹmasterʹmerge • masterϦϦʔεςετΛ͢Εɺ͍ͭϦϦʔεͯ͠ྑ͍ঢ়ଶ ৽։ൃϑϩʔ branchઓུ
։ൃϑϩʔ ৽։ൃϑϩʔ branchઓུ master feature 1िؒਃ ։ൃ no QA ։ൃ
QA ϦϦʔεςετ
։ൃϑϩʔ ৽։ൃϑϩʔ branchઓུ master feature 1िؒਃ ։ൃ no QA ։ൃ
QA ϦϦʔεςετ 2"͕ෆཁͳͷ ϞσϧϩδοΫͷΈͷมߋͰςετͰ୲อͰ͖ ͍ͯΔ 2"͕ඞཁͳͷ 6*69෦ 04όϦΤʔγϣϯςετ͕ඞཁ
։ൃϑϩʔ ৽։ൃϑϩʔ branchઓུ master feature 1िؒਃ ։ൃ no QA ։ൃ
QA ։ൃ with Feature Flag ඇಉظQA ϦϦʔεςετ Feature Flag ON
։ൃϑϩʔ ৽։ൃϑϩʔ branchઓུ master feature 1िؒਃ ։ൃ no QA ։ൃ
QA ։ൃ with Feature Flag ඇಉظQA ϦϦʔεςετ Feature Flag ON 'FBUVSF'MBHΛͬͨ։ൃɺখ͍͞୯Ґ ͰίʔυϨϏϡʔͯ͠NBTUFSʹNFSHF͢Δ ͳͲɺॊೈͳ։ൃͱεϜʔζͳNBTUFSϒϥ ϯνͷਐߦ͕ΊΔΑ͏ʹͳΔ
։ൃϑϩʔ • ֤TeamͷऔΓవΊͷௐίετ͕ݮͬͨ • ϦϦʔεϚωʔδϟʔͷෛ୲͕ݮͬͨ • Teamؒͷґଘ͕ݮͬͨ • νέοτ༏ઌͷஅ͕దਖ਼ʹͳͬͨ •
ϦʔυλΠϜͷݮ ৽։ൃϑϩʔ ৼΓฦΓ
։ൃϑϩʔ • ݄༵ ϦϦʔεɺTestFlightਃ • Ր༵ • ਫ༵ masterϒϥϯνΛϏϧυɺ࣍ճPJܭըmtg •
༵ ϦϦʔεςετɺ࣍ճશମܭըmtg • ༵ۚ ਃ ৽։ൃϑϩʔ εέδϡʔϧ
։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ ݄ 19࣌ ਃ Ր ਫ ۚ
19࣌ TestFlightਃ 19࣌ masterϏϧυ TestFlight৴ ϦϦʔεςετ QA ։ൃ ϦϦʔε
։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ ݄ 19࣌ ਃ Ր ਫ ۚ
19࣌ TestFlightਃ ϦϦʔεςετ ࣍ճ PJ͝ͱܭըmtg ࣍ճ શମܭըmtg QA ։ൃ ϦϦʔε 19࣌ masterϏϧυ TestFlight৴
։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ bitrise GitHub App Store Connect TestFlight Crashlytics
Tester Designer Others Developer hook delivery pull request merge scheduler test
։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ bitrise GitHub App Store Connect TestFlight Crashlytics
Tester Designer Others Developer delivery pull request merge scheduler test hook
։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ ݄ Ր ਫ ۚ ϦϦʔεςετ ࣍ճ
PJ͝ͱܭըmtg ࣍ճ શମܭըmtg QA ։ൃ ϦϦʔε 19࣌ TestFlightਃ 19࣌ ਃ ࣗಈԽ 19࣌ masterϏϧυ TestFlight৴
ਓ͕ػցʹ߹ΘͤΔ
ࠓޙͷऔΓΈ
ࠓޙͷऔΓΈ • Feature Flagͷ׆༻ • masterϒϥϯν͍ͭͰϦϦʔεͰ͖Δঢ়ଶ • QAͳͲʹґଘ͠ͳ͍ϦϦʔεαΠΫϧ Trunk-Based Development
https://trunkbaseddevelopment.com/
ࠓޙͷऔΓΈ • ΞϓϦͷߏཁૉΛϞδϡʔϧ୯ҐͰׂ (Static FrameworkԽʣ • Ϟδϡʔϧ୯ҐͰͷىಈɺσόοά • ૄ݁߹ͳઃܭ Micro
FrameworkԽ
ࠓޙͷऔΓΈ • storyboard / xibΛΘͣίʔυͰϨΠΞτ • ίϯϑϦΫτϦεΫͷܰݮ • UIίʔυϨϏϡʔͷ্ •
࠶ར༻ੑͷ্ ※ σΟϝϦοτଟʑ͋ΔͨΊ࣮ݧతʹऔΓΈ ίʔυϨΠΞτ
·ͱΊ
·ͱΊ Micro Team × ࣗಈԽ ςετ ։ൃϑϩʔ Micro Framework Feature
Flag
εέʔϧ͢Δ։ൃTeam
Thank you