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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuji Hato
February 22, 2019
Technology
4.2k
6
Share
継続的な開発スタイル 「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.1k
ABEMAモバイルアプリ開発のDevOps戦略
dekatotoro
1
720
Multiplatform Engineering Roadmap for the Future
dekatotoro
1
150
Introduction to RIBs
dekatotoro
5
1.4k
iOS Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
dekatotoro
0
530
動画アプリをなめらかに動かす技術 - iOS -
dekatotoro
0
500
5分で学ぶ差分更新とRxDataSources
dekatotoro
0
370
AbemaTV モバイルアプリの開発体制と 開発プロセスの話
dekatotoro
0
290
Apple TV - tvOS入門 -
dekatotoro
0
180
Other Decks in Technology
See All in Technology
国内外の生成AIセキュリティの最新動向 & AIガードレール製品「chakoshi」のご紹介 / Latest Trends in Generative AI Security (Domestic & International) & Introduction to AI Guardrail Product "chakoshi"
nttcom
4
1.5k
[OpsJAWS 40]リリースしたら終わり、じゃなかった。セキュリティ空白期間をAWS Security Agentで埋める
sh_fk2
3
250
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
3
2.6k
Do Ruby::Box dream of Modular Monolith?
joker1007
1
360
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
79k
AI時代における技術的負債への取り組み
codenote
1
1.8k
社内エンジニア勉強会の醍醐味と苦しみ/tamadev
nishiuma
0
240
ネットワーク運用を楽にするAWS DevOps Agent活用法!! / 20260421 Masaki Okuda
shift_evolve
PRO
2
230
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.4k
ServiceNow Knowledge 26 の歩き方
manarobot
0
190
ハーネスエンジニアリングをやりすぎた話 ~そのハーネスは解体された~
gotalab555
5
1.9k
プラットフォームエンジニアリングの実践 - AWS コンテナサービスで構築する社内プラットフォーム / AWS Containers Platform Meetup #1
literalice
1
210
Featured
See All Featured
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
120
Tell your own story through comics
letsgokoyo
1
900
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
360
Un-Boring Meetings
codingconduct
0
270
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Side Projects
sachag
455
43k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.1k
The Spectacular Lies of Maps
axbom
PRO
1
710
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
280
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Mobile First: as difficult as doing things right
swwweet
225
10k
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