Slide 1

Slide 1 text

ܧଓతͳ։ൃελΠϧ ʮAbemaTV iOSΞϓϦΛिҰͰ ϦϦʔε͍ͯ͠Δ࿩ʯ CA BASE CAMP2019 Yuji Hato

Slide 2

Slide 2 text

೾ށ ༐ೋ • Contributed services dekatotoro @dekatotoro yuji.hato

Slide 3

Slide 3 text

1. ։ൃମ੍ 2. ίʔυϕʔε 3. ։ൃϑϩʔ 4. ࠓޙͷऔΓ૊Έ 5. ·ͱΊ

Slide 4

Slide 4 text

։ൃମ੍

Slide 5

Slide 5 text

։ൃମ੍ ໿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

Slide 6

Slide 6 text

։ൃମ੍ ໿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

Slide 7

Slide 7 text

։ൃମ੍ • iPhone • iPad • Apple TV ͦͷଞ Google Cast ΍ AirPlay ࠶ੜ iOS Team ։ൃσόΠε

Slide 8

Slide 8 text

։ൃମ੍ iOSΤϯδχΞ 12~15໊ ಺ఆऀ Πϯλʔϯ

Slide 9

Slide 9 text

։ൃମ੍ iOS Teamͷਓ਺ 4 8 12 8 12 ݱࡏ ʜ աڈ ະདྷ

Slide 10

Slide 10 text

։ൃମ੍ ཧ૝ͷ։ൃεϐʔυͱ඼࣭ ਓ਺

Slide 11

Slide 11 text

։ൃମ੍ ݱ࣮ͷ։ൃεϐʔυͱ඼࣭ ਓ਺

Slide 12

Slide 12 text

։ൃମ੍ ։ൃεϐʔυͱ඼࣭ͷ௿Լ • Ϛωδϝϯτίετ૿ • ίϛϡχέʔγϣϯίετ૿ • ίϯϑϦΫτϦεΫ • ίʔυ඼࣭ͷ͹Β͖ͭ

Slide 13

Slide 13 text

։ൃମ੍ ։ൃεϐʔυͱ඼࣭ͷ௿Լ • Ϛωδϝϯτίετ૿ • ίϛϡχέʔγϣϯίετ૿ • ίϯϑϦΫτϦεΫ • ίʔυ඼࣭ͷ͹Β͖ͭ • ੹຿ͷूத΍૿Ճ • υΩϡϝϯτෆඋ / ଐਓԽ • औΓѻ͏ίʔυൣғͷ޿͞ • εΩϧ΍ܦݧʹґଘ ݪҼ

Slide 14

Slide 14 text

։ൃମ੍ Team͝ͱͷ։ൃ ਓ ਓ ਓ

Slide 15

Slide 15 text

։ൃମ੍ iOSΤϯδχΞ 12~15໊ Πϯλʔϯ ಺ఆऀόΠτ ࠶ܝ

Slide 16

Slide 16 text

޿ࠂ ࢹௌ඼࣭ ϚωλΠζ ւ֎ରԠ ։ൃମ੍ Team͝ͱͷ։ൃ ίΞ Apple TV

Slide 17

Slide 17 text

։ൃମ੍ Team͝ͱͷ։ൃ .JDSP5FBN • ੹຿ͷ෼ࢄ • Ϛωδϝϯτίετͷ࡟ݮ • ίϛϡχέʔγϣϯίετͷ࡟ݮ

Slide 18

Slide 18 text

Micro Team

Slide 19

Slide 19 text

։ൃମ੍ OKRΛಋೖ͍ͯ͠·͢ ϚωλΠζ σόΠε֦େ ຊ࣭վળ ۀ຿վળ ϝλσʔλ etc

Slide 20

Slide 20 text

ຊ࣭վળ ϚωλΠζ σόΠε֦େ ։ൃମ੍ Objectiveʹඥ͍ͮͨKey Result

Slide 21

Slide 21 text

ίʔυϕʔε

Slide 22

Slide 22 text

ίʔυϕʔε • ios ‥‥ iOSΞϓϦ • tvos ‥‥ tvOSΞϓϦ • api ‥‥ APIϞδϡʔϧ • protobuf-swift ‥‥ .protoΛ.swiftʹม׵ͨ͠΋ͷ • cmdshelf-ios ‥‥ scripts • etc ‥‥ mock, tool, sample Repositories

Slide 23

Slide 23 text

ίʔυϕʔε • ios • tvos • api Repositories

Slide 24

Slide 24 text

ίʔυϕʔε • ios • tvos • api Repositories

Slide 25

Slide 25 text

ίʔυϕʔε iOS

Slide 26

Slide 26 text

ίʔυϕʔε iOS • 10 ~ 13ਓͰ։ൃ 1ϲ݄Ͱ187ݸͷpull request͕Ϛʔδ͞Ε͍ͯͯɺ Ӧۀ೔Ͱฏۉ͢Δͱ1೔໿8~10ݸͷpull request͕ Ϛʔδ͞Ε͍ͯΔ

Slide 27

Slide 27 text

ίʔυϕʔε tvOS

Slide 28

Slide 28 text

ίʔυϕʔε tvOS • 2~3ਓͰ։ൃ 1ϲ݄Ͱ60ݸͷpull request͕Ϛʔδ͞Ε͍ͯͯɺ Ӧۀ೔Ͱฏۉ͢Δͱ1೔໿3ݸͷpull request͕Ϛʔ δ͞Ε͍ͯΔ

Slide 29

Slide 29 text

ίʔυϕʔε API

Slide 30

Slide 30 text

ίʔυϕʔε API • iOS, tvOSڞ௨ 1ϲ݄Ͱ35ݸͷpull request͕Ϛʔδ͞Ε͍ͯͯɺ Ӧۀ೔Ͱฏۉ͢Δͱ1೔໿1~2ݸͷpull request͕ Ϛʔδ͞Ε͍ͯΔ

Slide 31

Slide 31 text

ίʔυϕʔε Tests 2009 tests 3200 tests 3526 tests 2019/02 2018/10 2017/10

Slide 32

Slide 32 text

ίʔυϕʔε Tests • ۃྗςετΛॻ͘ํ਑ • Model૚΍ϩδοΫ͸ςετΛॻ͘ • UIͷςετ͸΄ͱΜͲॻ͍͍ͯͳ͍ σβΠϯ΍࢓༷͕සൟʹมΘΔݱঢ়ͩͱίετ͕େ͖͍ ͷͱɺViewͱModelΛ෼཭͢Δઃܭʹ͍ͯ͠ΔͨΊɺUI ͸ModelͷςετͱQAͰ୲อ

Slide 33

Slide 33 text

ຖ೔େྔͷίʔυ͕มߋ͞Ε͍ͯΔ

Slide 34

Slide 34 text

։ൃϑϩʔ

Slide 35

Slide 35 text

։ൃϑϩʔ • 2िؒαΠΫϧͷsprint։ൃͱਃ੥ • ։ൃظؒ1िؒɺQAظؒ1िؒ چ։ൃϑϩʔ

Slide 36

Slide 36 text

։ൃϑϩʔ QA 1िؒ 1िؒ QA QA ਃ੥ ਃ੥ ਃ੥ ਃ੥ QA ։ൃ ։ൃ ։ൃ چ։ൃϑϩʔ

Slide 37

Slide 37 text

։ൃϑϩʔ QA 1िؒ 1िؒ QA QA ਃ੥ ਃ੥ ਃ੥ ਃ੥ QA ։ൃ ։ൃ ։ൃ چ։ൃϑϩʔ ௕͍։ൃ

Slide 38

Slide 38 text

։ൃϑϩʔ • ։ൃ༻ͷmasterϒϥϯνͱQA༻ͷqaϒϥϯνͰӡ༻ • ֤ࣗfeatureϒϥϯνΛmaster / qa͔Β੾ͬͯ࡞ۀ • qaϒϥϯνͰςετ͕׬ྃͨ͠ΒϦϦʔεͰ͖Δঢ়ଶ چ։ൃϑϩʔ branchઓུ

Slide 39

Slide 39 text

։ൃϑϩʔ چ։ൃϑϩʔ branchઓུ master qa feature ̎िؒਃ੥ ։ൃ1िؒ QA1िؒ ϦϦʔεςετ

Slide 40

Slide 40 text

։ൃϑϩʔ چ։ൃϑϩʔ branchઓུ master qa feature ̎िؒਃ੥ ։ൃ1िؒ QA1िؒ ϦϦʔεςετ ɹ2"ظؒதʹ࣍ͷ։ൃΛ΍͍ͬͯ Δϝϯόʔ΋΋ͪΖΜ͍·͢

Slide 41

Slide 41 text

։ൃϑϩʔ • ֤TeamͷऔΓవΊͷௐ੔ίετ • ϦϦʔεϚωʔδϟʔͷෛ୲͕େ͖͍ • 1ͭͷTeamͷ஗ԆͰϦϦʔε͕ԆͼΔ • Teamؒͷ༏ઌ౓ʹࠨӈ͞ΕϦϦʔε͕ԆͼΔ • 2िؒʹ1ճͷϦϦʔεͩͱվળͷ଎౓͕ग़ͳ͍ چ։ൃϑϩʔ ՝୊

Slide 42

Slide 42 text

։ൃϑϩʔ چ։ൃϑϩʔ ՝୊ ւ֎ରԠ ϚωλΠζ ίΞ ༧ఆͷਃ੥೔ ࣮ࡍͷਃ੥೔ ࣮૷ / QA ࣮૷ / QA ࣮૷ / QA मਖ਼ / QA ϦϦʔε

Slide 43

Slide 43 text

։ൃϑϩʔ • 1िؒαΠΫϧͷ։ൃͱਃ੥ • ։ൃͱQAͷظؒ͸෼͚ͳ͍ ৽։ൃϑϩʔ

Slide 44

Slide 44 text

։ൃϑϩʔ 1िؒ 1िؒ ਃ੥ ਃ੥ ਃ੥ ਃ੥ QA ։ൃ ਃ੥ ਃ੥ ਃ੥ ৽։ൃϑϩʔ

Slide 45

Slide 45 text

։ൃϑϩʔ • ֤ࣗfeatureϒϥϯνΛmaster͔Β੾ͬͯ࡞ۀ • featureϒϥϯνͰQAޙʹmasterʹmerge • master͸ϦϦʔεςετΛ͢Ε͹ɺ͍ͭϦϦʔεͯ͠΋ྑ͍ঢ়ଶ ৽։ൃϑϩʔ branchઓུ

Slide 46

Slide 46 text

։ൃϑϩʔ ৽։ൃϑϩʔ branchઓུ master feature 1िؒਃ੥ ։ൃ no QA ։ൃ QA ϦϦʔεςετ

Slide 47

Slide 47 text

։ൃϑϩʔ ৽։ൃϑϩʔ branchઓུ master feature 1िؒਃ੥ ։ൃ no QA ։ൃ QA ϦϦʔεςετ 2"͕ෆཁͳ΋ͷ Ϟσϧ૚΍ϩδοΫͷΈͷมߋͰςετͰ୲อͰ͖ ͍ͯΔ 2"͕ඞཁͳ΋ͷ 6*69෦෼ ୺຤04όϦΤʔγϣϯςετ͕ඞཁ

Slide 48

Slide 48 text

։ൃϑϩʔ ৽։ൃϑϩʔ branchઓུ master feature 1िؒਃ੥ ։ൃ no QA ։ൃ QA ։ൃ with Feature Flag ඇಉظQA ϦϦʔεςετ Feature Flag ON

Slide 49

Slide 49 text

։ൃϑϩʔ ৽։ൃϑϩʔ branchઓུ master feature 1िؒਃ੥ ։ൃ no QA ։ൃ QA ։ൃ with Feature Flag ඇಉظQA ϦϦʔεςετ Feature Flag ON 'FBUVSF'MBHΛ࢖ͬͨ։ൃ͸ɺখ͍͞୯Ґ ͰίʔυϨϏϡʔͯ͠NBTUFSʹNFSHF͢Δ ͳͲɺॊೈͳ։ൃͱεϜʔζͳNBTUFSϒϥ ϯνͷਐߦ͕๬ΊΔΑ͏ʹͳΔ

Slide 50

Slide 50 text

։ൃϑϩʔ • ֤TeamͷऔΓవΊͷௐ੔ίετ͕ݮͬͨ • ϦϦʔεϚωʔδϟʔͷෛ୲͕ݮͬͨ • Teamؒͷґଘ͕ݮͬͨ • νέοτ༏ઌ౓ͷ൑அ͕దਖ਼ʹͳͬͨ • ϦʔυλΠϜͷ࡟ݮ ৽։ൃϑϩʔ ৼΓฦΓ

Slide 51

Slide 51 text

։ൃϑϩʔ • ݄༵೔ ϦϦʔεɺTestFlightਃ੥ • Ր༵೔ • ਫ༵೔ masterϒϥϯνΛϏϧυɺ࣍ճ෼PJܭըmtg • ໦༵೔ ϦϦʔεςετɺ࣍ճ෼શମܭըmtg • ༵ۚ೔ ਃ੥ ৽։ൃϑϩʔ εέδϡʔϧ

Slide 52

Slide 52 text

։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ ݄ 19࣌ ਃ੥ Ր ਫ ໦ ۚ 19࣌ TestFlightਃ੥ 19࣌ masterϏϧυ TestFlight഑৴ ϦϦʔεςετ QA ։ൃ ϦϦʔε

Slide 53

Slide 53 text

։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ ݄ 19࣌ ਃ੥ Ր ਫ ໦ ۚ 19࣌ TestFlightਃ੥ ϦϦʔεςετ ࣍ճ෼ PJ͝ͱܭըmtg ࣍ճ෼ શମܭըmtg QA ։ൃ ϦϦʔε 19࣌ masterϏϧυ TestFlight഑৴

Slide 54

Slide 54 text

։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ bitrise GitHub App Store Connect TestFlight Crashlytics Tester Designer Others Developer hook delivery pull request merge scheduler test

Slide 55

Slide 55 text

։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ bitrise GitHub App Store Connect TestFlight Crashlytics Tester Designer Others Developer delivery pull request merge scheduler test hook

Slide 56

Slide 56 text

։ൃϑϩʔ ৽։ൃϑϩʔ εέδϡʔϧ ݄ Ր ਫ ໦ ۚ ϦϦʔεςετ ࣍ճ෼ PJ͝ͱܭըmtg ࣍ճ෼ શମܭըmtg QA ։ൃ ϦϦʔε 19࣌ TestFlightਃ੥ 19࣌ ਃ੥ ࣗಈԽ 19࣌ masterϏϧυ TestFlight഑৴

Slide 57

Slide 57 text

ਓ͕ػցʹ߹ΘͤΔ

Slide 58

Slide 58 text

ࠓޙͷऔΓ૊Έ

Slide 59

Slide 59 text

ࠓޙͷऔΓ૊Έ • Feature Flagͷ׆༻ • masterϒϥϯν͸͍ͭͰ΋ϦϦʔεͰ͖Δঢ়ଶ • QAͳͲʹґଘ͠ͳ͍ϦϦʔεαΠΫϧ Trunk-Based Development https://trunkbaseddevelopment.com/

Slide 60

Slide 60 text

ࠓޙͷऔΓ૊Έ • ΞϓϦͷߏ੒ཁૉΛϞδϡʔϧ୯ҐͰ෼ׂ (Static FrameworkԽʣ • Ϟδϡʔϧ୯ҐͰͷىಈɺσόοά • ૄ݁߹ͳઃܭ Micro FrameworkԽ

Slide 61

Slide 61 text

ࠓޙͷऔΓ૊Έ • storyboard / xibΛ࢖ΘͣίʔυͰϨΠΞ΢τ • ίϯϑϦΫτϦεΫͷܰݮ • UIίʔυϨϏϡʔͷ޲্ • ࠶ར༻ੑͷ޲্ ※ σΟϝϦοτ΋ଟʑ͋ΔͨΊ࣮ݧతʹऔΓ૊Έ ίʔυϨΠΞ΢τ

Slide 62

Slide 62 text

·ͱΊ

Slide 63

Slide 63 text

·ͱΊ Micro Team × ࣗಈԽ ςετ ։ൃϑϩʔ Micro Framework Feature Flag

Slide 64

Slide 64 text

εέʔϧ͢Δ։ൃTeam

Slide 65

Slide 65 text

Thank you