Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ABEMA モバイルアプリにおけるリアーキテクチャの取り組みと展望 / Mobile App ...

ABEMA モバイルアプリにおけるリアーキテクチャの取り組みと展望 / Mobile App Rearchitecture in ABEMA

CA BASE NEXT 2021/05/28
https://ca-base-next.cyberagent.co.jp/2021/sessions/abema-mobile-rearchitecture/

ABEMAでは、2019年からAndroidチームとiOSチームの隔たりが無くなり、Nativeチームとして再編されました。それを背景に、AndroidアプリとiOSアプリの設計も共通化することを目指して、またそれぞれのプラットフォームで負債化した実装の改善を目指して、両プラットフォーム横断でのリアーキテクチャが始まりました。技術的な課題の解決を目的として始まったリアーキテクチャですが、Kotlin Multiplatformの導入など新たな技術的挑戦に繋がっただけでなく、仕様から設計・実装を導くICONIXプロセスを取り入れる試みや、ABEMAにおける"ユビキタス言語"の確立を目指す用語集プロジェクトなど、エンジニア以外の職種をも巻き込んだ様々な取り組みへと広がっていきました。このLTでは、リアーキテクチャに至るまでの経緯、現在進行中の取り組み、そして将来的な展望までをご紹介します。

Akio Yasui

May 27, 2021
Tweet

More Decks by Akio Yasui

Other Decks in Programming

Transcript

  1. ໨࣍ Contents ໨࣍ Contents ໨࣍ Contents ໨࣍ Contents ໨࣍ Contents

    1. ϦΞʔΩςΫνϟʹࢸΔഎܠ 2. ࢓༷ʹج͍࣮ͮͯ૷͢Δ
 3. ͜Ε͔ΒͷऔΓ૊Έ 4. ·ͱΊ
  2. ͳͥϦΞʔΩςΫνϟ͕ඞཁͳͷ͔ • ࢓༷ͷڞ௨ԽΛ໨ࢦ্͢ͰɺAndroid/iOSͷઃܭࠩҟ͕՝୊ͱͯ͠ද໘Խ • ࢓༷Λຬͨͨ͢ΊͷϩδοΫ͕ɺ֤ϓϥοτϑΥʔϜݻ༗
 ͷϩδοΫ͔Β໌֬ʹ෼཭͞Ε͍ͯͳ͍
 → ίʔυΛ௥Θͳ͍ͱݱঢ়ͷਖ਼֬ͳ࢓༷͸೺ѲͰ͖ͳ͍
 • ڞ௨ͯ͠Flux͸࠾༻͍͕ͯͨ͠ɺ֤ίϯϙʔωϯτͷ


    ੹຿΍୯Ґ͕Ұக͍ͯ͠ͳ͍
 → ಉ͡࢓༷Ͱ΋ඞͣ͠΋ಉ͡Α͏ʹ࣮૷Ͱ͖ΔͱݶΒͳ͍
 → ࣮૷ͷதͰڞ௨Խ͢΂͖࢓༷ʹϏδωεϩδοΫΛ໌֬Խ͢Δඞཁ ؔ࿈εϥΠυʰAbema iOS Architectureʱ
 https://speakerdeck.com/to4iki/abema-ios-architecture
  3. • ڞ௨ͷ࢓༷ΛͲ͜ʹ࣮૷͢Δ͔͸ܾ·͕ͬͨɺͦ΋ͦ΋ʮڞ௨ͷ࢓༷ʯͱ͸ʁ • ΞϓϦ͸ଟ͘ͷػೳͱෳࡶͳ࢓༷Λ͍࣋ͬͯΔ • UIɺAPIɺಈը࠶ੜɺϩάૹ৴ɺABςετɺ…
 • ֤ػೳΛఆٛ͢Δ࢓༷ͷ͏ͪɺ
 Կ͕ڞ௨ͷ࢓༷ͰԿ͕ͦ͏Ͱͳ͍ͷ͔ •

    ࠓ·Ͱ͸ػೳ͝ͱʹ୲౰͢ΔΤϯδχΞͱPM͕
 ܦݧతʹ෼ྨ͍ͯͨ͠ • ݁ہͷͱ͜ΖԿ͕ “υϝΠϯ” ΍ “Ϣʔεέʔε”ʹ
 ͋ͨΔͷ͔ʁ
 ࢓༷Λ໌֬ʹ͢ΔΞʔΩςΫνϟ Repositor y (Interface) UseCase UI ABEMAͷ αʔϏεͱͯ͠ͷ஌ࣝ (“υϝΠϯϞσϧ”) ΞϓϦͷػೳ࢓༷ PFݻ༗ͷ࣮૷΍ σʔλ؅ཧͷͨΊͷ࣮૷ Repository ϦΞʔΩςΫνϟޙͷϨΠϠʔߏ੒ Domain
  4. • ۀ຿ͷ஌ࣝΛίʔυͯ͠දݱ͠ɺઃܭͷࠜװͱ͢Δ → υϝΠϯۦಈઃܭʢDDDʣΛࢀߟʹͨ͠υϝΠϯϞσϦϯάΛߦ͏
 • ΞϓϦʹٻΊΒΕΔػೳʹػೳཁٻ͔Β࢓༷Λఆٛ͠ɺ
 ਫ਼ࠪ͠ͳ͕Βઃܭɾ࣮૷ʹམͱ͠ࠐΉ → ICONIXϓϩηεʢϢʔεέʔεۦಈ։ൃʣΛऔΓೖΕͯ
 ͜Ε·Ͱ΋ܦݧతʹߦΘΕ͍ͯͨϓϩηεΛ࠶ݱՄೳʹ͢Δ

    ࢓༷ʹج͍࣮ͮͨ૷ͷͨΊͷऔΓ૊Έ ΤϦοΫɾΤϰΝϯεͷυϝΠϯۦಈઃܭ. Eric Evans(ஶ), ࠓؔ߶(؂༁), ࿨ஐӈܡ, ຀໺༞ࢠ(༁). ᠳӭࣾ . ࣮ફυϝΠϯۦಈઃܭ ΤϦοΫɾΤϰΝϯεཱ͕֬ͨ͠ཧ࿦Λ࣮ࡍͷઃܭʹԠ༻͢Δ. Vaughn Vernon(ஶ), ߴ໦ਖ਼߂(༁). ᠳӭࣾ . Ϣʔεέʔεۦಈ։ൃ࣮ફΨΠυ ΦϒδΣΫτࢦ޲෼ੳ͔ΒSpringʹΑΔ࣮૷·Ͱ. Doug Rosenberg, Matt Stephens(ஶ), ࡾՏ ३Ұ(؂༁), ࠤ౻ ཽҰ, ધ໦ ݈ࣇ(༁). ᠳӭࣾ.
  5. • ϦΞʔΩςΫνϟʹΑΓɺ࣮૷Λڞ௨ԽͰ͖Δ෦෼΋໌֬ʹͳͬͨ • υϝΠϯʹαʔϏεͷ஌ࣝͳͷͰɺཧ૝తʹ͸શͯͷϓϥοτϑΥʔϜͰڞ௨ͳ͸ͣ • ϢʔεέʔεʹΞϓϦͷػೳͳͷͰɺϢʔβʔͷγφϦΦ΍ετʔϦʔ͕ڞ௨͍ͯ͠Ε͹
 ͍ۙ΋ͷʹͳΔ͸ͣ
 → Kotlin Multiplatformͷಋೖ΁

    • ͨͩ͠υϝΠϯɾϢʔεέʔε͸ٞ࿦தͷ෦෼΋
 ଟ͍ͨΊɺҰ୴APIΫϥΠΞϯτ͔Βࢼݧతಋೖ • ଞϓϥοτϑΥʔϜʢWebɺCEʣͰ΋ݕূத ࣮૷ͷڞ௨Խ ؔ࿈εϥΠυʰABEMAͷKotlin Multiplatformʱ
 https://speakerdeck.com/takahirom/abemafalsekotlin-multiplatform Android iOS Web TV ドメイン 共通 ユースケース
  6. • ίϯϙʔωϯτ͝ͱͷ੹຿Λ໌֬Խ͢Δ͜ͱͰɺ
 ςετͰ୲อͰ͖Δൣғ΋໌Β͔ʹͳͬͨ • ΞϓϦͷ඼࣭Λ୲อ͢ΔͨΊʹ͸༷ʑͳཻ౓Ͱͷςετ͕ඞཁ • Ϣχοτςετɺ݁߹ςετɺड͚ೖΕςετɺ…
 → NativeνʔϜͱͯ͠ͷςετϙϦγʔΛ࡞੒ •

    Ϣχοτςετͷ໾ׂ΍QAΤϯδχΞʹΑΔखಈςετͱͷ੗Έ෼͚ͱ͍ͬͨ
 νʔϜ͝ͱɾΤϯδχΞ͝ͱͷܦݧଇΛ໌จԽ • ςετͷ֊૚͝ͱʹϙϦγʔΛ࡞͍ͬͯ͘ • ·ͣ͸શମͷςετϙϦγʔͱɺϢχοτςετϙϦγʔΛ࡞੒ → ݁߹ςετ΍ࣗಈԽ͞ΕͨE2EςετͳͲͷಋೖ΁ ςετϙϦγʔ
  7. • ΞϓϦʹυϝΠϯϞσϧ͸ඞཁͳͷ͔/ଘࡏ͢Δͷ͔ • جຊతͳσʔλͷྲྀΕ͸ʮAPIϨεϙϯεˠυϝΠϯϞσϧˠදࣔσʔλʯͱͳΔ • APIϨεϙϯεΛදࣔ͢Δ͚ͩͷΑ͏ͳը໘΋ଟ͍ • APIϨεϙϯεʹؚ·ΕΔ৘ใ͕ɺରԠ͢ΔϞσϧͷ৘ใશͯΛؚΉͱ͸ݶΒͳ͍
 • ΫϥΠΞϯτͱαʔόʔͰͦΕͧΕυϝΠϯϞσϧΛ͍࣋ͬͯΔͷ͔ɺ


    ΫϥΠΞϯτ͸ʮϓϨθϯςʔγϣϯ૚ʯʹ͗͢ͳ͍ͷ͔ • ͲͪΒ͔͕ద੾Ͱ͋Δͱ͍͏ΑΓ͸ɺ͓ޓ͍ͷมԽͷεϐʔυ΍ɺͦΕͧΕͷνʔϜͷ
 Ϧιʔεɾؔ܎ੑΛ౿·͑ͨαʔϏεશମͱͯ͠ͷઃܭ͕ඞཁͳͷͰ͸ͳ͍͔ • Ҿ͖ଓ͖ٞ࿦த… ΞϓϦͷυϝΠϯϞσϧ
  8. • νʔϜͰٞ࿦͠ͳ͕ΒΞϓϦͷϦΞʔΩςΫνϟΛਐΊ͍ͯΔ • ٕज़తͳ՝୊ղܾͷͨΊͷϦΞʔΩςΫνϟ͕ɺ
 ૊৫શମΛר͖ࠐΜͩऔΓ૊Έ΁ͱͭͳ͕ͬͨ • ༻ޠूɺICONIXϓϩηεݕূɺKMMಋೖɺςετϙϦγʔɺ…
 • ϦΞʔΩςΫνϟΛ௨ͯ͡ɺཧ૝తͳΞϓϦͷ
 ઃܭɾ࣮૷͸ٕज़͔Β

    “͚ͩ” Ͱ͸ಋ͔Εͳ͍ͱؾ͍ͮͨ • “ͲΜͳαʔϏεΛͲΜͳνʔϜͰͲΜͳϓϩηεͰ࣮૷͍ͯ͘͠ͷ͔”
 ʹ΋޲͖߹͏ඞཁ͕͋Δ
 • औΓ૊Έ͸Ҿ͖ଓ͖ൃ৴͍͖ͯ͠·͢ 💪 ·ͱΊ ΞϓϦ ઃܭɾ࣮૷ αʔϏε νʔϜ ٕज़