Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

2019೥౓৽ଔೖࣾ iOSΤϯδχΞ גࣜձࣾAbemaTV NativeνʔϜ ҆Ҫ ӯஉ Akio Yasui @akkyie

Slide 3

Slide 3 text

໨࣍ Contents ໨࣍ Contents ໨࣍ Contents ໨࣍ Contents ໨࣍ Contents 1. ϦΞʔΩςΫνϟʹࢸΔഎܠ 2. ࢓༷ʹج͍࣮ͮͯ૷͢Δ
 3. ͜Ε͔ΒͷऔΓ૊Έ 4. ·ͱΊ

Slide 4

Slide 4 text

1. ϦΞʔΩςΫνϟʹࢸΔഎܠ

Slide 5

Slide 5 text

• 2019೥10݄ AndroidνʔϜͱiOSνʔϜ͕౷߹͞ΕɺNativeνʔϜʹ • ΤϯδχΞ͕ঢ়گɾر๬ʹԠͯ͡ϓϥοτϑΥʔϜؒΛߦ͖དྷ͠΍͘͢͢Δ • ڞ௨͢Δ࢓༷΋ଟ͍ͷͰɺPM΍ଞνʔϜʢαʔόʔαΠυ΍෼ੳɾQAνʔϜͳͲʣͱͷ
 ίϛϡχέʔγϣϯΛޮ཰Խ͢Δ Android/iOSνʔϜͷ౷߹ Native iOS Android Web Consume r Electronics

Slide 6

Slide 6 text

ͳͥϦΞʔΩςΫνϟ͕ඞཁͳͷ͔ • ࢓༷ͷڞ௨ԽΛ໨ࢦ্͢ͰɺAndroid/iOSͷઃܭࠩҟ͕՝୊ͱͯ͠ද໘Խ • ࢓༷Λຬͨͨ͢ΊͷϩδοΫ͕ɺ֤ϓϥοτϑΥʔϜݻ༗
 ͷϩδοΫ͔Β໌֬ʹ෼཭͞Ε͍ͯͳ͍
 → ίʔυΛ௥Θͳ͍ͱݱঢ়ͷਖ਼֬ͳ࢓༷͸೺ѲͰ͖ͳ͍
 • ڞ௨ͯ͠Flux͸࠾༻͍͕ͯͨ͠ɺ֤ίϯϙʔωϯτͷ
 ੹຿΍୯Ґ͕Ұக͍ͯ͠ͳ͍
 → ಉ͡࢓༷Ͱ΋ඞͣ͠΋ಉ͡Α͏ʹ࣮૷Ͱ͖ΔͱݶΒͳ͍
 → ࣮૷ͷதͰڞ௨Խ͢΂͖࢓༷ʹϏδωεϩδοΫΛ໌֬Խ͢Δඞཁ ؔ࿈εϥΠυʰAbema iOS Architectureʱ
 https://speakerdeck.com/to4iki/abema-ios-architecture

Slide 7

Slide 7 text

• ࢓༷ʹରԠ͢Δ࣮૷ͱͦΕҎ֎ͷ෦෼Λ໌֬ʹ෼཭͍ͨ͠
 → Clean ArchitectureͳͲΛϕʔεʹͨ͠ΞʔΩςΫνϟ • AndroidɾiOSΤϯδχΞ2໊͕ͣͭϦΞʔΩςΫνϟʹܞΘΓɺઃܭͷࠎࢠΛ࡞੒ • NativeνʔϜશମʹڞ༗͠ɺεϓϨουγʔτͰٙ໰΍ҙݟΛΧδϡΞϧʹืΔ ϦΞʔΩςΫνϟͷ։࢝ Clean Architecture ୡਓʹֶͿιϑτ΢ΣΞͷߏ଄ͱઃܭ. Robert C. Martin(ஶ), ֯੐య, ∁໦ਖ਼߂(༁). ΞεΩʔυϫϯΰ. ҙݟΛืͬͨεϓϨουγʔτ

Slide 8

Slide 8 text

• ࠷௿ݶकΔ΂͖ΞʔΩςΫνϟΛϨΠϠʔͱͦͷґଘؔ܎ͱͯ͠ఆٛ • ͦΕͧΕͷϨΠϠʔͷதͰ͞Βʹ1~3ݸఔ౓ͷϞδϡʔϧΛ࡞੒ • ͦΕͧΕͷݴޠͰϞδϡʔϧʢύοέʔδ΍ϑϨʔϜϫʔΫʣ͕࣋ͭػೳɾಛ௃͕ҟͳΔͨΊ ࢓༷Λ໌֬ʹ͢ΔΞʔΩςΫνϟ ؔ࿈εϥΠυʰABEMAͷϦΞʔΩςΫνϟʱ(iOSʹ͓͚Δ۩ମྫ)
 https://speakerdeck.com/kokihirokawa/abemafalseriakitekutiya Repositor y (Interface) UseCase UI ABEMAͷ αʔϏεͱͯ͠ͷ஌ࣝ (“υϝΠϯϞσϧ”) ΞϓϦͷػೳ࢓༷ PFݻ༗ͷ࣮૷΍ σʔλ؅ཧͷͨΊͷ࣮૷ Repository ϦΞʔΩςΫνϟޙͷϨΠϠʔߏ੒ Domain

Slide 9

Slide 9 text

• ڞ௨ͷ࢓༷ΛͲ͜ʹ࣮૷͢Δ͔͸ܾ·͕ͬͨɺͦ΋ͦ΋ʮڞ௨ͷ࢓༷ʯͱ͸ʁ • ΞϓϦ͸ଟ͘ͷػೳͱෳࡶͳ࢓༷Λ͍࣋ͬͯΔ • UIɺAPIɺಈը࠶ੜɺϩάૹ৴ɺABςετɺ…
 • ֤ػೳΛఆٛ͢Δ࢓༷ͷ͏ͪɺ
 Կ͕ڞ௨ͷ࢓༷ͰԿ͕ͦ͏Ͱͳ͍ͷ͔ • ࠓ·Ͱ͸ػೳ͝ͱʹ୲౰͢ΔΤϯδχΞͱPM͕
 ܦݧతʹ෼ྨ͍ͯͨ͠ • ݁ہͷͱ͜ΖԿ͕ “υϝΠϯ” ΍ “Ϣʔεέʔε”ʹ
 ͋ͨΔͷ͔ʁ
 ࢓༷Λ໌֬ʹ͢ΔΞʔΩςΫνϟ Repositor y (Interface) UseCase UI ABEMAͷ αʔϏεͱͯ͠ͷ஌ࣝ (“υϝΠϯϞσϧ”) ΞϓϦͷػೳ࢓༷ PFݻ༗ͷ࣮૷΍ σʔλ؅ཧͷͨΊͷ࣮૷ Repository ϦΞʔΩςΫνϟޙͷϨΠϠʔߏ੒ Domain

Slide 10

Slide 10 text

2. ࢓༷ʹج͍࣮ͮͯ૷͢Δ

Slide 11

Slide 11 text

• ۀ຿ͷ஌ࣝΛίʔυͯ͠දݱ͠ɺઃܭͷࠜװͱ͢Δ → υϝΠϯۦಈઃܭʢDDDʣΛࢀߟʹͨ͠υϝΠϯϞσϦϯάΛߦ͏
 • ΞϓϦʹٻΊΒΕΔػೳʹػೳཁٻ͔Β࢓༷Λఆٛ͠ɺ
 ਫ਼ࠪ͠ͳ͕Βઃܭɾ࣮૷ʹམͱ͠ࠐΉ → ICONIXϓϩηεʢϢʔεέʔεۦಈ։ൃʣΛऔΓೖΕͯ
 ͜Ε·Ͱ΋ܦݧతʹߦΘΕ͍ͯͨϓϩηεΛ࠶ݱՄೳʹ͢Δ ࢓༷ʹج͍࣮ͮͨ૷ͷͨΊͷऔΓ૊Έ ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭ. Eric Evans(ஶ), ࠓؔ߶(؂༁), ࿨ஐӈܡ, ຀໺༞ࢠ(༁). ᠳӭࣾ . ࣮ફυϝΠϯۦಈઃܭ ΤϦοΫɾΤϰΝϯεཱ͕֬ͨ͠ཧ࿦Λ࣮ࡍͷઃܭʹԠ༻͢Δ. Vaughn Vernon(ஶ), ߴ໦ਖ਼߂(༁). ᠳӭࣾ . Ϣʔεέʔεۦಈ։ൃ࣮ફΨΠυ ΦϒδΣΫτࢦ޲෼ੳ͔ΒSpringʹΑΔ࣮૷·Ͱ. Doug Rosenberg, Matt Stephens(ஶ), ࡾՏ ३Ұ(؂༁), ࠤ౻ ཽҰ, ધ໦ ݈ࣇ(༁). ᠳӭࣾ.

Slide 12

Slide 12 text

• ʮABEMA༻ޠूʯΛ࡞੒͢ΔϓϩδΣΫτΛ։࢝ • “ϢϏΩλεݴޠ” ͷߏஙΛ໨ࢦ͢
 ׳༻తʹݺ͹Ε͍ͯΔػೳͷ໊લ΍ɺͦ͜ʹؚ·ΕΔ֓೦Λٞ࿦͠ͳ͕Β౷Ұ͍ͯ͘͠ • ຖिఆظతʹɺ༗ࢤͷPMɾσβΠφʔɾΤϯδχΞ͕ࢀՃ͢ΔऔΓ૊Έͱͯ͠։࠵த • ༻ޠू͸ABEMAͷσβΠϯγεςϜʮconteʯͷҰ෦ʹνʔϜͷࢿ࢈ͱͯ͠ҭ͍ͯͯ͘ υϝΠϯϞσϦϯά 
 ※ ະϦϦʔεͷػೳʹؔ͢Δ৘ใؚ͕·ΕΔͨΊɺܾఆͨ͠༻ޠͷ෦෼͸෬ࣈʹ͍ͯ͠·͢ ؔ࿈εϥΠυʰconte - ABEMA's Design Systemʱ https://www.slideshare.net/ygoto3q/conte-abemas-design-system

Slide 13

Slide 13 text

• ʰϢʔεέʔεۦಈ։ൃ࣮ફΨΠυʱͰઆ໌͞Ε͍ͯΔϓϩηε • ࣄۀతʹΞϓϦʹٻΊΒΕΔػೳʹػೳཁٻ͔Βɺγʔέϯε΍
 Ϋϥεͷఆٛͱ͍ͬͨৄࡉͳઃܭ·Ͱஈ֊తʹམͱ͠ࠐΜͰ͍͘
 • ৽نػೳͷҰͭΛର৅ʹɺNativeνʔϜͷΤϯδχΞͰࢼݧతʹ࣮ફத • ϓϩηεΛҰपͨ࣌͠఺ͰKPTܗࣜͰৼΓฦΓ΋࣮ࢪ ICONIXϓϩηε ※ ICONIXϓϩηε͸NativeνʔϜҎ֎ͷνʔϜʢCEνʔϜʣͰ΋ಉ࣌ฒߦతʹݕূத ػೳཁٻ υϝΠϯϞσϦϯά Ϣʔεέʔε
 ϞσϦϯά ϩόετωε෼ੳ ৄࡉઃܭ (ςετέʔε)

Slide 14

Slide 14 text

3. ͜Ε͔ΒͷऔΓ૊Έ

Slide 15

Slide 15 text

• ϦΞʔΩςΫνϟʹΑΓɺ࣮૷Λڞ௨ԽͰ͖Δ෦෼΋໌֬ʹͳͬͨ • υϝΠϯʹαʔϏεͷ஌ࣝͳͷͰɺཧ૝తʹ͸શͯͷϓϥοτϑΥʔϜͰڞ௨ͳ͸ͣ • ϢʔεέʔεʹΞϓϦͷػೳͳͷͰɺϢʔβʔͷγφϦΦ΍ετʔϦʔ͕ڞ௨͍ͯ͠Ε͹
 ͍ۙ΋ͷʹͳΔ͸ͣ
 → Kotlin Multiplatformͷಋೖ΁ • ͨͩ͠υϝΠϯɾϢʔεέʔε͸ٞ࿦தͷ෦෼΋
 ଟ͍ͨΊɺҰ୴APIΫϥΠΞϯτ͔Βࢼݧతಋೖ • ଞϓϥοτϑΥʔϜʢWebɺCEʣͰ΋ݕূத ࣮૷ͷڞ௨Խ ؔ࿈εϥΠυʰABEMAͷKotlin Multiplatformʱ
 https://speakerdeck.com/takahirom/abemafalsekotlin-multiplatform Android iOS Web TV ドメイン 共通 ユースケース

Slide 16

Slide 16 text

• ίϯϙʔωϯτ͝ͱͷ੹຿Λ໌֬Խ͢Δ͜ͱͰɺ
 ςετͰ୲อͰ͖Δൣғ΋໌Β͔ʹͳͬͨ • ΞϓϦͷ඼࣭Λ୲อ͢ΔͨΊʹ͸༷ʑͳཻ౓Ͱͷςετ͕ඞཁ • Ϣχοτςετɺ݁߹ςετɺड͚ೖΕςετɺ…
 → NativeνʔϜͱͯ͠ͷςετϙϦγʔΛ࡞੒ • Ϣχοτςετͷ໾ׂ΍QAΤϯδχΞʹΑΔखಈςετͱͷ੗Έ෼͚ͱ͍ͬͨ
 νʔϜ͝ͱɾΤϯδχΞ͝ͱͷܦݧଇΛ໌จԽ • ςετͷ֊૚͝ͱʹϙϦγʔΛ࡞͍ͬͯ͘ • ·ͣ͸શମͷςετϙϦγʔͱɺϢχοτςετϙϦγʔΛ࡞੒ → ݁߹ςετ΍ࣗಈԽ͞ΕͨE2EςετͳͲͷಋೖ΁ ςετϙϦγʔ

Slide 17

Slide 17 text

• ΞϓϦʹυϝΠϯϞσϧ͸ඞཁͳͷ͔/ଘࡏ͢Δͷ͔ • جຊతͳσʔλͷྲྀΕ͸ʮAPIϨεϙϯεˠυϝΠϯϞσϧˠදࣔσʔλʯͱͳΔ • APIϨεϙϯεΛදࣔ͢Δ͚ͩͷΑ͏ͳը໘΋ଟ͍ • APIϨεϙϯεʹؚ·ΕΔ৘ใ͕ɺରԠ͢ΔϞσϧͷ৘ใશͯΛؚΉͱ͸ݶΒͳ͍
 • ΫϥΠΞϯτͱαʔόʔͰͦΕͧΕυϝΠϯϞσϧΛ͍࣋ͬͯΔͷ͔ɺ
 ΫϥΠΞϯτ͸ʮϓϨθϯςʔγϣϯ૚ʯʹ͗͢ͳ͍ͷ͔ • ͲͪΒ͔͕ద੾Ͱ͋Δͱ͍͏ΑΓ͸ɺ͓ޓ͍ͷมԽͷεϐʔυ΍ɺͦΕͧΕͷνʔϜͷ
 Ϧιʔεɾؔ܎ੑΛ౿·͑ͨαʔϏεશମͱͯ͠ͷઃܭ͕ඞཁͳͷͰ͸ͳ͍͔ • Ҿ͖ଓ͖ٞ࿦த… ΞϓϦͷυϝΠϯϞσϧ

Slide 18

Slide 18 text

4. ·ͱΊ

Slide 19

Slide 19 text

• νʔϜͰٞ࿦͠ͳ͕ΒΞϓϦͷϦΞʔΩςΫνϟΛਐΊ͍ͯΔ • ٕज़తͳ՝୊ղܾͷͨΊͷϦΞʔΩςΫνϟ͕ɺ
 ૊৫શମΛר͖ࠐΜͩऔΓ૊Έ΁ͱͭͳ͕ͬͨ • ༻ޠूɺICONIXϓϩηεݕূɺKMMಋೖɺςετϙϦγʔɺ… ·ͱΊ ϦΞʔΩςΫνϟ KMMಋೖ ༻ޠू υϝΠϯϞσϧͷඞཁੑ ڞ௨෦෼ͷ໌֬Խ ςετϙϦγʔ ICONIXϓϩηε ࢓༷ʹج͍ͮͨઃܭ ςετͷ֊૚Խ

Slide 20

Slide 20 text

• νʔϜͰٞ࿦͠ͳ͕ΒΞϓϦͷϦΞʔΩςΫνϟΛਐΊ͍ͯΔ • ٕज़తͳ՝୊ղܾͷͨΊͷϦΞʔΩςΫνϟ͕ɺ
 ૊৫શମΛר͖ࠐΜͩऔΓ૊Έ΁ͱͭͳ͕ͬͨ • ༻ޠूɺICONIXϓϩηεݕূɺKMMಋೖɺςετϙϦγʔɺ…
 • ϦΞʔΩςΫνϟΛ௨ͯ͡ɺཧ૝తͳΞϓϦͷ
 ઃܭɾ࣮૷͸ٕज़͔Β “͚ͩ” Ͱ͸ಋ͔Εͳ͍ͱؾ͍ͮͨ • “ͲΜͳαʔϏεΛͲΜͳνʔϜͰͲΜͳϓϩηεͰ࣮૷͍ͯ͘͠ͷ͔”
 ʹ΋޲͖߹͏ඞཁ͕͋Δ
 • औΓ૊Έ͸Ҿ͖ଓ͖ൃ৴͍͖ͯ͠·͢ 💪 ·ͱΊ ΞϓϦ ઃܭɾ࣮૷ αʔϏε νʔϜ ٕज़

Slide 21

Slide 21 text

No content