Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
継続的な開発スタイル 「AbemaTV iOSアプリを週一で リリースしている話」
Search
Yuji Hato
February 22, 2019
Technology
4.3k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
継続的な開発スタイル 「AbemaTV iOSアプリを週一で リリースしている話」
Yuji Hato
February 22, 2019
More Decks by Yuji Hato
See All by Yuji Hato
ABEMAにおける 生成AI活用の現在地 / The Current Status of Generative AI at ABEMA
dekatotoro
1
1.3k
ABEMAモバイルアプリ開発のDevOps戦略
dekatotoro
1
780
Multiplatform Engineering Roadmap for the Future
dekatotoro
1
180
Introduction to RIBs
dekatotoro
5
1.5k
iOS Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
dekatotoro
0
560
動画アプリをなめらかに動かす技術 - iOS -
dekatotoro
0
510
5分で学ぶ差分更新とRxDataSources
dekatotoro
0
380
AbemaTV モバイルアプリの開発体制と 開発プロセスの話
dekatotoro
0
290
Apple TV - tvOS入門 -
dekatotoro
0
230
Other Decks in Technology
See All in Technology
おそらく日本で唯一のDevRelインターン生として
husengs7
0
170
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
290
1万名の社員が使う認証基盤で どう信頼性を担保するか?
kairim0
0
210
2026-10-01_MagicPod_QAハーネスエンジニアリングとQA組織の未来像
ynisqa1988
1
530
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
1
240
OpenSharing について熱く語る〜AI アセットの共有について〜
kameitomohiro
0
230
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
310
Codex概要
ymiya55
0
410
Kernel testing frameworks
ennael
PRO
0
110
LocalStack を使ったサーバーレスアプリケーション開発 / Serverless Development with LocalStack
kakakakakku
0
110
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
150
メルペイ 会計システム概要と歴史
mewuto
0
150
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
400
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
450
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.1k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
500
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
300
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
Facilitating Awesome Meetings
lara
57
7.2k
30 Presentation Tips
portentint
PRO
1
420
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
290
So, you think you're a good person
axbom
PRO
2
2.2k
Statistics for Hackers
jakevdp
799
230k
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