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
4.1k
継続的な開発スタイル 「AbemaTV iOSアプリを週一で リリースしている話」
Yuji Hato
February 22, 2019
Tweet
Share
More Decks by Yuji Hato
See All by Yuji Hato
ABEMAにおける 生成AI活用の現在地 / The Current Status of Generative AI at ABEMA
dekatotoro
0
850
ABEMAモバイルアプリ開発のDevOps戦略
dekatotoro
1
680
Multiplatform Engineering Roadmap for the Future
dekatotoro
1
140
Introduction to RIBs
dekatotoro
5
1.4k
iOS Adaptive UI - 解像度の異なるデバイスや画面の向きに対応する 最適なレイアウトへ -
dekatotoro
0
470
動画アプリをなめらかに動かす技術 - iOS -
dekatotoro
0
410
5分で学ぶ差分更新とRxDataSources
dekatotoro
0
330
AbemaTV モバイルアプリの開発体制と 開発プロセスの話
dekatotoro
0
270
Apple TV - tvOS入門 -
dekatotoro
0
150
Other Decks in Technology
See All in Technology
#普通の文系サラリーマンチャレンジ 自分でアプリ開発と電子工作を続けたら人生が変わった
tatsuya1970
0
910
BirdCLEF+2025 Noir 5位解法紹介
myso
0
180
SwiftUIのGeometryReaderとScrollViewを基礎から応用まで学び直す:設計と活用事例
fumiyasac0921
0
120
C# 14 / .NET 10 の新機能 (RC 1 時点)
nenonaninu
1
1.4k
SOC2取得の全体像
shonansurvivors
1
350
Pure Goで体験するWasmの未来
askua
1
170
それでも私はContextに値を詰めたい | Go Conference 2025 / go conference 2025 fill context
budougumi0617
4
1.1k
生成AIで「お客様の声」を ストーリーに変える 新潮流「Generative ETL」
ishikawa_satoru
1
270
Azure Well-Architected Framework入門
tomokusaba
0
200
「技術負債にならない・間違えない」 権限管理の設計と実装
naro143
35
10k
Railsアプリケーション開発者のためのブックガイド
takahashim
14
5.9k
AI時代だからこそ考える、僕らが本当につくりたいスクラムチーム / A Scrum Team we really want to create in this AI era
takaking22
6
2.8k
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
A better future with KSS
kneath
239
17k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.6k
Visualization
eitanlees
148
16k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
Unsuck your backbone
ammeep
671
58k
How GitHub (no longer) Works
holman
315
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
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