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

ABEMAモバイルアプリ開発のDevOps戦略

 ABEMAモバイルアプリ開発のDevOps戦略

CyberAgent Developer Conference 2022 登壇資料。
YouTube: https://www.youtube.com/watch?v=gL_ZPTw_5nQ

ABEMAは開局して5年が経過し、サービスの成長に伴いシステム・組織共に非常に大規模になってきました。長く続くサービスとしてありがちではありますが、様々な負債を抱えながら開発しており、日々向き合っています。
モバイルアプリの開発チームでは、品質を維持しながら高速に改善サイクルを回して仮説・検証の精度を上げていくこと、素早くユーザーのニーズに応え継続的に改善していくことを目指し、Re-Architecture、Kotlin Multiplatform、Visual Regression Testing、FeatureFlag、SREなど様々な取り組みを行っています。その全体的な戦略と取り組みについてご紹介します。

Yuji Hato

March 24, 2022
Tweet

More Decks by Yuji Hato

Other Decks in Technology

Transcript

  1. ˞%BZESFBN $MPWB%FTL͸αϙʔτऴྃ  iOS mobile Android mobile Web pc /

    mobile Chromecast Apple TV Android TV IPTV Daydream Clova Desk Google Nest Hub Nintendo Switch      AmazonAl exa Amazon Fire TV Amazon FIre Tablet  .VMUJ%FWJDF
  2. Desktop Browser Android Web Unity Mobile Browser Mobile App Smart

    Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chromecast Apple TV Android TV IPTV Google Nest Hub Nintendo Switch Amazon Fire TV Amazon FIre Tablet Mobile Web Ϣʔεέʔε ٕज़ελοΫ .VMUJ%FWJDF
  3. Web Native Cross Device Smart Display / Speaker %FTLUPQ Browser

    Mobile Browser Mobile App TV iOS Mobile Android Mobile PC Web Chromecast Apple TV Android TV IPTV Google Nest Hub Nintendo Switch Amazon Fire TV Amazon FIre Tablet Mobile Web .VMUJ%FWJDF
  4. Web Native Cross Device Smart Display / Speaker %FTLUPQ Browser

    Mobile Browser Mobile App TV iOS Mobile Android Mobile PC Web Chromecast Apple TV Android TV IPTV Google Nest Hub Nintendo Switch Amazon Fire TV Amazon FIre Tablet Mobile Web .VMUJ%FWJDF
  5. 5FBNT ϓϩμΫτ σʔλ Native Backend Cross Device Web Data analytics

    Data science Data engineering Data management ϓϥοτ ϑΥʔϜ Content engineering Cloud platform Content delivery SRE Streaming client Broadcast technology Designer PM QA
  6. ϓϩμΫτ σʔλ ɾɾɾ αʔϏεϧʔϓ ޿ࠂ ՝ۚ Cross Device Backend QA

    Web ɾɾɾ Data analytics Data science ɾɾɾ ɾɾɾ ɾɾɾ Cross Device Backend QA PM Cross Device Backend QA Web Data analytics Data science Data analytics Data science PM PM Designer Designer Designer Native Web Native Native 5FBNT
  7. Android Web iOS Cross Device Native 5FBNT J04"OESPJEͷ౷߹ w J04"OESPJEؒͷ࢓༷΍ػೳࠩͷဃ཭ΛຒΊΔ

    w 1.΍όοΫΤϯυɺ2"ͳͲଞνʔϜͱͷίϛϡχέʔ γϣϯޮ཰Խ w ίʔυڞ௨ԽʹΑΔ։ൃޮ཰Խ w %FW0QTͳͲ։ൃϓϩηεͷޮ཰Խ
  8. Android iOS ϦϦʔεස౓ มߋϦʔυλΠϜ ฏۉम෮࣌ؒ มߋࣦഊ཰ िճ िؒʹճ ೔d೔ ೔d೔

    ೔d೔ ೔d೔   %FMJWFSZQFSGPSNBODF ˞೥౰࣌ͷεφοϓγϣοτ 
  9. %FMJWFSZQFSGPSNBODF Cloud Source Repositories BigQuery Cloud Functions Cloud Scheduler Pub/Sub

    4ZOD Native Monitoring %FQMPZ #JH2VFSZͷσʔλ͔ΒϦϦʔεස౓ɺϦʔυλΠϜɺ .553ɺมߋࣦഊ཰Λܭࢉͯ͠ϝτϦΫεԽ "SDIJUFDUVSF ϓϩμΫτ3FQPTJUPSZͷ1VMM 3FRVFTUɺ$PNNJUɺ.FSHFɺ 3FMFBTFUBHɺ)PUpYUBHͷ࣌ ؒɺ4UPSFͷ഑৴࣌ؒΛ #JH2VFSZʹอଘ ˞'PVS,FZTʹҠߦݕ౼த IUUQTHJUIVCDPN(PPHMF$MPVE1MBUGPSNGPVSLFZT
  10. %FMJWFSZQFSGPSNBODF ϦϦʔεස౓ มߋϦʔυλΠϜ ฏۉम෮࣌ؒ มߋࣦഊ཰ d िճ िճ ೔ ೔

    ೔ ೔   Android iOS  िճ िؒʹճ ೔d೔ ೔d೔ ೔d೔ ೔d೔   Android iOS
  11. %FMJWFSZQFSGPSNBODF ϦϦʔεස౓ มߋϦʔυλΠϜ ฏۉम෮࣌ؒ มߋࣦഊ཰ d िճ िճ ೔ ೔

    ೔ ೔   Android iOS  िճ िؒʹճ ೔d೔ ೔d೔ ೔d೔ ೔d೔   Android iOS )JHI )JHI .FEJVN &MJUF )JHI .FEJVN .FEJVN )JHI .FEJVN .FEJVN
  12. w ίϯϙʔωϯτؒͷૄ ݁߹ੑͷ୲อ͕Ͱ͖ͯ ͍ͳ͍ w ςελϏϦςΟɾϝϯ ςφϏϦςΟͷ௿Լ w "OESPJEͱJ04ͷ࢓ ༷ɾ࣮૷ࠩҟͷ֦େ

    w 6*։ൃͷ҆શੑͱੜ࢈ ੑͷ௿Լ w Ϗϧυ͕࣌ؒ௕͘ੜ࢈ ੑ͕௿Լ w खಈͷ2"ʹେ͖͘ґଘ͍ͯ͠Δ w ςετϙϦγʔ͕ͳ͘ͲͷϑΣʔζͰԿΛ୲ อ͢Δ͔ᐆດ w վળαΠΫϧͷϦʔυ λΠϜ͕௕͍ w ϦϦʔεࣦഊͷӨڹ͕ େ͖͍ w ো֐෮چ͕࣌ؒ௕͍ w جຊతͳϩά΍Ϋϥο γϡ৘ใͳͲ࠷௿ݶͷ؂ ࢹ͔͠Ͱ͖͍ͯͳ͍ w ૉૣ͘ো֐Λݕ஌Ͱ͖ͯ ͍ͳ͍ w ো֐ରԠ͕ج४΍൑அ͕ ᐆດͰଐਓԽ͍ͯ͠Δ w ӨڹൣғΛ͙͢ʹ೺ѲͰ ͖ͳ͍ *TTVFT *TTVFTBOE1SBDUJDFT Plan Code Build Test Release Monitor
  13. • Ϗϧυ଎౓վળ • 5FTU&OHJOFFSJOH • ϦϦʔεϑϩʔվળ • ΧφϦΞϦϦʔε • 'FBUVSF'MBH

    • ΦϒβʔόϏϦςΟ ͷ޲্ • SLI/SLOಋೖ • Alertingઃఆ 1SBDUJDFT • ϦΞʔΩςΫνϟ • ίʔυڞ௨Խ ,..  • 735 7JTVBM3FHSFTTJPO 5FTUJOH *TTVFTBOE1SBDUJDFT Plan Code Build Test Release Monitor
  14. 6TF$BTFT &OUJUJFT 6* 1SFTFOUBUJPO %# &YUFSOBM *OUFSGBDFT (BUFXBZT 1SFTFOUFST $POUSPMMFST

    "DUJPO %JTQBUDIFS 4UPSF 7JFX "DUJPO %JTQBUDIFS 4UPSF 7JFX "DUJPO 7JFX 7JFX.PEFM 7JFX.PEFM J04 "OESPJE 'MVY!.77. 'MVY $MFBO"SDIJUFDUVSF 1MBUGPSN 4QFDJGJD"1*T 3F"SDIJUFDUVSF
  15. 3F"SDIJUFDUVSF 6TF$BTFT &OUJUJFT 6* 1SFTFOUBUJPO %# &YUFSOBM *OUFSGBDFT (BUFXBZT 1SFTFOUFST

    $POUSPMMFST "DUJPO %JTQBUDIFS 4UPSF 7JFX "DUJPO %JTQBUDIFS 4UPSF 7JFX "DUJPO 7JFX 7JFX.PEFM 7JFX.PEFM J04 "OESPJE 'MVY!.77. 'MVY $MFBO"SDIJUFDUVSF 1MBUGPSN 4QFDJGJD"1*T
  16. 3F"SDIJUFDUVSF 6TF$BTFT &OUJUJFT 6* 1SFTFOUBUJPO %# &YUFSOBM *OUFSGBDFT (BUFXBZT 1SFTFOUFST

    $POUSPMMFST "DUJPO %JTQBUDIFS 4UPSF 7JFX "DUJPO %JTQBUDIFS 4UPSF 7JFX "DUJPO 7JFX 7JFX.PEFM 7JFX.PEFM J04 "OESPJE 'MVY!.77. 'MVY $MFBO"SDIJUFDUVSF 1MBUGPSN 4QFDJGJD"1*T
  17. %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF 6*-PHJD

    6TF$BTF *OUFSGBDF %# "1*4FSWJDF "1*4FSWJDF *OUFSGBDF $BDIF 04%FWJDF &WFOU "1* "QQ 3F"SDIJUFDUVSF $PNQPOFOUT
  18. %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF 6*-PHJD

    6TF$BTF *OUFSGBDF %# "1*4FSWJDF "1*4FSWJDF *OUFSGBDF $BDIF 04%FWJDF &WFOU "1* "QQ 6*1SFTFOUBUJPO  7JFX 7JFX$POUSPMMFS  "DUJWJUZ 'SBHNFOU 3F"SDIJUFDUVSF $PNQPOFOUT
  19. %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF 6*-PHJD

    6TF$BTF *OUFSGBDF %# "1*4FSWJDF "1*4FSWJDF *OUFSGBDF $BDIF 04%FWJDF &WFOU "1* "QQ $POUSPMMFST1SFTFOUFST  6*͔Βͷ&WFOUͷϋϯυϦϯάॲཧ  6TF$BTFΛ࣮ߦͯ͠6*΁σʔλΛ൓ө 3F"SDIJUFDUVSF $PNQPOFOUT
  20. %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF 6*-PHJD

    6TF$BTF *OUFSGBDF %# "1*4FSWJDF "1*4FSWJDF *OUFSGBDF $BDIF 04%FWJDF &WFOU "1* "QQ 6TF$BTFT  ֤ػೳͷ6TF$BTFΛυϝΠϯϞσϧΛ༻͍ ࣮ͯ૷  ݪଇεςʔτϨε  6TF$BTF͔Β6TF$BTFͷݺͼग़͠Λېࢭ  ΞϓϦέʔγϣϯશମͰ࢖༻͢ΔϩδοΫ͸ "QQMJDBUJPO4FSWJDFͱͯ͠6TF$BTF͔Β ݺͼग़͠Մೳͱ͢Δ 3F"SDIJUFDUVSF $PNQPOFOUT
  21. %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF 6*-PHJD

    6TF$BTF *OUFSGBDF %# "1*4FSWJDF "1*4FSWJDF *OUFSGBDF $BDIF 04%FWJDF &WFOU "1* "QQ %PNBJO  ϓϥοτϑΥʔϜʹґଘ͠ͳ͍υϝΠϯϞσ ϧͱυϝΠϯϩδοΫ  3FQPTJUPSZ*OUFSGBDF  "1*4FSWJDF*OUFSGBDF 3F"SDIJUFDUVSF $PNQPOFOUT
  22. %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF 6*-PHJD

    6TF$BTF *OUFSGBDF %# "1*4FSWJDF "1*4FSWJDF *OUFSGBDF $BDIF 04%FWJDF &WFOU "1* "QQ &YUFSOBM*OUFSGBDFT1MBUGPSN4QFDJGJD"1*T%#  "1*͔Βσʔλͷऔಘ  υϝΠϯϞσϧͷΩϟογϡɾӬଓԽ  04%FWJDF&WFOUͷϋϯυϦϯά ˞3FQPTJUPSZͰ"1*Λந৅Խ͢ΔઃܭͰ͸ͳ͘ɺΩϟογϡ੍ޚɾϦτϥ ΠɾΤϥʔϋϯυϦϯάͳͲ͸ΞϓϦέʔγϣϯ࢓༷ͱͯ͠ѻ͍Ϣʔεέʔ εͰ࣮૷͢Δํ਑Ͱɺந৅ԽͤͣʹίϯϙʔωϯτΛ෼͚͍ͯ·͢ɻ 3F"SDIJUFDUVSF $PNQPOFOUT
  23. %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF 6*-PHJD

    6TF$BTF *OUFSGBDF %# "1*4FSWJDF "1*4FSWJDF *OUFSGBDF $BDIF 04%FWJDF &WFOU "1* "QQ "QQ5BSHFU શͯͷίϯϙʔωϯτʹґଘͯ͠ɺ%*Λߦ͍ΞϓϦέʔγϣ ϯΛߏ੒͢Δ 3F"SDIJUFDUVSF $PNQPOFOUT
  24. %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF 6*-PHJD

    6TF$BTF *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF "QQ 3F"SDIJUFDUVSF $PNQPOFOUT %# $BDIF 04%FWJDF &WFOU "1*
  25. 6*$PNQPOFOUT$BUBMPH $BUBMPH"QQ 6*$PNQPOFOUTͱ6*-PHJD*OUFSGBDF͔Βߏ੒͢Δ %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF

    3FQPTJUPSZ *OUFSGBDF 6*-PHJD 6TF$BTF *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF "QQ $BUBMPH"QQ
  26. Desktop Browser Android Web Unity Mobile Browser Mobile App Smart

    Display/ Speaker TV iOS iOS Mobile Android Mobile PC Web Chromecast Apple TV Android TV IPTV Google Nest Hub Nintendo Switch Amazon Fire TV Amazon FIre Tablet Mobile Web Ϣʔεέʔε ٕज़ελοΫ ࠶ܝ $PEF4IBSJOH
  27. ରԠσόΠεͷ֦େʹର͢Δํ਑ w ಛԽ͢Δ෦෼ w ϓϨθϯςʔγϣϯ૚ w ϓϥοτϑΥʔϜݻ༗ͷΤϯςΟςΟɾϢʔεέʔε w ൚Խ͢Δ෦෼ w

    ൚ԽՄೳͳ֎෦*' w ϓϥοτϑΥʔϜʹґଘ͠ͳ͍ΤϯςΟςΟɾϢʔε έʔε 6TF$BTFT &OUJUJFT 6* 1SFTFOUBUJPO %# QMBUGPSN TQFDJGJD"1*T &YUFSOBM *OUFSGBDFT (BUFXBZT 1SFTFOUFST $POUSPMMFST ಛԽ ൚Խ $PEF4IBSJOH
  28. ϚϧνϓϥοτϑΥʔϜπʔϧͷݕ౼ w 6*ΛؚΉίʔυͷڞ௨Խ ಠࣗ6* Flutter, Unity, Xamarin Forms, Cobalt, …

    w 6*ΛؚΉίʔυͷڞ௨Խ ωΠςΟϒ6* React Native, … w 6*ΛؚΉίʔυͷڞ௨Խ 8FCϕʔε6* Cordova, Titanium Mobile, … w ϩδοΫͷΈͷڞ௨ԽKotlin Multiplatform, Xamarin Native, ... $PEF4IBSJOH
  29. Web Native Cross Device Smart Display / Speaker %FTLUPQ Browser

    Mobile Browser Mobile App TV iOS Mobile Android Mobile PC Web Chromecast Apple TV Android TV IPTV Google Nest Hub Game Console Amazon Fire TV Amazon FIre Tablet Mobile Web ΫϥΠΞϯτશମΛݟਾ͑ͯଞνʔϜͱ࿈ܞͭͭ͠ɺ ωΠςΟϒείʔϓͰ,..ΛਐΊ͍ͯΔ ࠶ܝ $PEF4IBSJOH
  30. %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF 6*-PHJD

    6TF$BTF *OUFSGBDF %# "1*4FSWJDF "1*4FSWJDF *OUFSGBDF $BDIF 04%FWJDF &WFOU "1* ,.."SDIJUFDUVSF 4IBSJOHUIFDPNNPOCVTJOFTTMPHJD
  31. ,...PEVMFT %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF 3FQPTJUPSZ *OUFSGBDF

    6*-PHJD 6TF$BTF *OUFSGBDF %# "1*4FSWJDF "1*4FSWJDF *OUFSGBDF $BDIF "1* 3FQPTJUPSZ %# $BDIF 04%FWJDF &WFOU 6TF$BTF 6TF$BTF *OUFSGBDF ,.."SDIJUFDUVSF 4IBSJOHUIFDPNNPOCVTJOFTTMPHJD
  32. 6* $PNQPOFOU 6*-PHJD *OUFSGBDF 6*-PHJD ,...PEVMFT %PNBJO 3FQPTJUPSZ 6TF$BTF 3FQPTJUPSZ

    *OUFSGBDF 6TF$BTF *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF "1* 6TF$BTF 6TF$BTF *OUFSGBDF 6*1SFTFOUBUJPO૚Λআ͍ͨɺ6TF$BTFɾ %PNBJOɾ3FQPTJUPSZɾ"1*4FSWJDFΛ,..ʹΑͬ ͯڞ௨Խɻ 3FQPTJUPSZ %# $BDIF 04%FWJDF &WFOU ,.."SDIJUFDUVSF 4IBSJOHUIFDPNNPOCVTJOFTTMPHJD %# $BDIF
  33. 6* $PNQPOFOU 6*-PHJD *OUFSGBDF 6*-PHJD ,...PEVMFT %PNBJO 3FQPTJUPSZ 6TF$BTF 3FQPTJUPSZ

    *OUFSGBDF 6TF$BTF *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF "1* 3FQPTJUPSZ %# $BDIF 04%FWJDF &WFOU 6TF$BTF 6TF$BTF *OUFSGBDF Ҡߦʹίετ͕͔͔Δ3FQPTJUPSZ͸ɺΠϯλϑΣʔεΛ,..͔Β ఏڙ͠ɺ֤ϓϥοτϑΥʔϜͰΠϯλʔϑΣʔεʹద߹࣮ͤͯ͞૷ ͢Δɻطଘͷࢿ࢈Λ׆༻ͭͭ͠ɺ,..ϑϨʔϜϫʔΫʹґଘ͗͢͠ ͳ͍Α͏ɺFYQFDUBDUVBM͸جຊతʹ࢖Θͳ͍ํ਑ɻ ,.."SDIJUFDUVSF 4IBSJOHUIFDPNNPOCVTJOFTTMPHJD %# $BDIF
  34. ,..ଆʹ3FQPTJUPSZΛ࣮૷͢ΔέʔεͰɺ,..ͷϥΠϒϥϦ ͕ͳ͍4%,ͳͲ͸ɺ"EBQUFSΛ֤ϓϥοτϑΥʔϜͰ࣮૷͠ɺ ,..ଆͷ3FQPTJUPSZʹ%*͢Δɻ 6* $PNQPOFOU 6*-PHJD *OUFSGBDF 6*-PHJD ,...PEVMFT %PNBJO

    3FQPTJUPSZ 6TF$BTF 3FQPTJUPSZ *OUFSGBDF 6TF$BTF *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF "1* "EBQUFS 6TF$BTF 6TF$BTF *OUFSGBDF "EBQUFS *OUFSGBDF 4%, ,.."SDIJUFDUVSF 4IBSJOHUIFDPNNPOCVTJOFTTMPHJD %# $BDIF
  35. ,..'FBUVSF.PEVMFT ,..'FBUVSF.PEVMFT ,..'FBUVSF.PEVMFT %PNBJO 3FQPTJUPSZ 6TF$BTF 3FQPTJUPSZ *OUFSGBDF 6TF$BTF *OUFSGBDF

    "1*4FSWJDF "1*4FSWJDF *OUFSGBDF 4FSWJDF %PNBJO 3FQPTJUPSZ 3FQPTJUPSZ *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF 4FSWJDF *OUFSGBDF ΞϓϦέʔγϣϯશମͰ࢖༻͢Δڞ௨ػೳͷίΞϞ δϡʔϧͱɺػೳ͝ͱͷϑΟʔνϟʔϞδϡʔϧΛαϒ ϓϩδΣΫτʹͯ͠؅ཧ͢ΔɻίΞϞδϡʔϧ͸ޙํޓ ׵Λҡ࣋͠࠷৽Λࢀরͯ͠։ൃ͢ΔɻϑΟʔνϟʔϞ δϡʔϧ͸ϑΟʔνϟʔ͝ͱʹόʔδϣϯ؅ཧ͢Δɻ ,.."SDIJUFDUVSF .VMUJNPEVMFWFSTJPONBOBHFNFOU ,..$PSF.PEVMF
  36. 6TF$BTF*OUFSGBDF 6TF$BTF 4FSWJDF*OUFSGBDF  4FSWJDF %PNBJO 3FQPTJUPSZ "1*4FSWJDF͸ϥΠϒ ϥϦϞδϡʔϧͷ୯ҐͰίΞϞδϡʔϧϑΟʔνϟʔϞ δϡʔϧ͸όʔδϣϯ؅ཧ୯ҐͷαϒϓϩδΣΫτɻ

    ,.."SDIJUFDUVSF .VMUJNPEVMFWFSTJPONBOBHFNFOU ,..$PSF.PEVMF ,..'FBUVSF.PEVMFT ,..'FBUVSF.PEVMFT ,..'FBUVSF.PEVMFT %PNBJO 3FQPTJUPSZ 6TF$BTF 3FQPTJUPSZ *OUFSGBDF 6TF$BTF *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF 4FSWJDF %PNBJO 3FQPTJUPSZ 3FQPTJUPSZ *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF 4FSWJDF *OUFSGBDF
  37. *OUFSGBDFGPS"QQ ,..$PSF.PEVMF ,..'FBUVSF.PEVMFT ,..'FBUVSF.PEVMFT ,..'FBUVSF.PEVMFT %PNBJO 3FQPTJUPSZ 6TF$BTF 3FQPTJUPSZ *OUFSGBDF

    6TF$BTF *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF 4FSWJDF %PNBJO 3FQPTJUPSZ 3FQPTJUPSZ *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF 4FSWJDF *OUFSGBDF ϏδωεϩδοΫͷ࣮ߦ͸جຊతʹϑΟʔνϟʔϞ δϡʔϧͷϢʔεέʔεΠϯλʔϑΣʔε͕ΞϓϦͱͷΠ ϯλʔϑΣʔεͱͳΔɻ Ҡߦաఔ΍1'ݻ༗ͷϢʔεέʔε͔ΒɺίΞϞδϡʔϧ ͷαʔϏεΛ࣮ߦ͢Δέʔε΋͋Δɻ ,.."SDIJUFDUVSF
  38. *OUFSGBDFCFUXFFOJ04BOE,.. ,.."SDIJUFDUVSF iOS KMM Module J04*'ˡ,..*' GVOD 5ˡGVO 5 0CTFSWBCMF5ˡGVO

    'MPX8SBQQFS5ˡGVO 'MPX5 4JOHMF5ˡ4VTQFOE8SBQQFS5ˡTVTQFOEGVO 5 J04*'ˠ,..*' GVOD 5ˠGVO 5 0CTFSWBCMF5ˠ'MPX$PNQBU5ˠ'MPX5 4JOHMF5ˠ4VTQFOE8SBQQFS5ˠTVTQFOEGVO 5 1VCMJTI3FMBZ5ˠ4IBSFE'MPX$PNQBU5ˠ4IBSFE'MPX5 #FIBWJPS3FMBZ5ˠ4UBUF'MPX$PNQBU5ˠ4UBUF'MPX5
  39. .POPSFQP ,.."SDIJUFDUVSF Android Repository iOS Repository Native Repository KMM Repository

    J04"OESPJE,..ͷίʔυ͸ݱঢ়ผͷ(JUϦϙ δτϦͰ؅ཧ͍ͯ͠Δ͕ɺόʔδϣϯ؅ཧͷ൥ࡶ͞ ΍,..Ϟδϡʔϧͷมߋ൓өϦʔυλΠϜΛߟྀ ͯ͠ɺকདྷతʹϞϊϦϙ΋ݕ౼ʢϞδϡʔϧΛ௚઀ ࢀরͯ͠։ൃΛޮ཰Խʣ
  40. #VJME .VMUJNPEVMF ࠩ෼ϏϧυʹΑΔߴ଎Խ %PNBJO 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD *OUFSGBDF

    3FQPTJUPSZ *OUFSGBDF 6*-PHJD 6TF$BTF *OUFSGBDF "1*4FSWJDF "1*4FSWJDF *OUFSGBDF "QQ
  41. 5FTU&OHJOFFSJOH w Ϣχοτςετ w جຊॻ͍͍ͯΔ͕ɺϨΨγʔͳ෦෼΍ີ݁߹ͳ෦෼͸ॻ͚͍ͯͳ͍ Օॴ΋͋Δ w 6*෦෼͸7JTVBM3FHSFTTJPO5FTUJOHʹΑΔ13͝ͱͷࠩ෼֬ೝ w ΠϯςάϨʔγϣϯςετ

    w Ұ෦ίϯϙʔωϯτΛ݁߹ͨ͠ςετΛॻ͍͍ͯΔ w && &OEUP&OE ςετ w ػೳςετʢػೳ։ൃ͝ͱͷςετʣ w ௨͠ςετʢϦϦʔεલͷػೳ໢ཏςετʣ w ϑϦʔςετʢ୳ࡧతςετʣ w IUUQTEFWFMPQFSBOESPJEDPNUSBJOJOHUFTUJOHGVOEBNFOUBMTXSJUFUFTUT
  42. 5FTU&OHJOFFSJOH w Ϣχοτςετ w جຊॻ͍͍ͯΔ͕ɺϨΨγʔͳ෦෼΍ີ݁߹ͳ෦෼͸ॻ͚͍ͯͳ͍ Օॴ΋͋Δ w 6*෦෼͸7JTVBM3FHSFTTJPO5FTUJOHʹΑΔ13͝ͱͷࠩ෼֬ೝ w ΠϯςάϨʔγϣϯςετ

    w Ұ෦ίϯϙʔωϯτΛ݁߹ͨ͠ςετΛॻ͍͍ͯΔ w && &OEUP&OE ςετ w ػೳςετʢػೳ։ൃ͝ͱͷςετʣ w ௨͠ςετʢϦϦʔεલͷػೳ໢ཏςετʣ w ϑϦʔςετʢ୳ࡧతςετʣ w ػೳ࣮૷ऀ͕Ϣχοτςετ΋࣮૷͍ͯ͠Δ͕ɺཻ౓΍ର৅ͳ Ͳ͸ଐਓԽ͓ͯ͠ΓɺۉҰͷอূ͕Ͱ͖͍ͯͳ͍ɻ
  43. 5FTU&OHJOFFSJOH w Ϣχοτςετ w جຊॻ͍͍ͯΔ͕ɺϨΨγʔͳ෦෼΍ີ݁߹ͳ෦෼͸ॻ͚͍ͯͳ͍ Օॴ΋͋Δ w 6*෦෼͸7JTVBM3FHSFTTJPO5FTUJOHʹΑΔ13͝ͱͷࠩ෼֬ೝ w ΠϯςάϨʔγϣϯςετ

    w Ұ෦ίϯϙʔωϯτΛ݁߹ͨ͠ςετΛॻ͍͍ͯΔ w && &OEUP&OE ςετ w ػೳςετʢػೳ։ൃ͝ͱͷςετʣ w ௨͠ςετʢϦϦʔεલͷػೳ໢ཏςετʣ w ϑϦʔςετʢ୳ࡧతςετʣ w ΠϯςάϨʔγϣϯςετ͸΄΅ଘࡏͤͣɺ֤Ϣχοτͷڍಈ͕୲ อ͞Ε͍ͯͯ΋ɺ݁߹ͨ͠ࡍͷڍಈΛ୲อͰ͖͍ͯͳ͍ɻ
  44. 5FTU&OHJOFFSJOH w Ϣχοτςετ w جຊॻ͍͍ͯΔ͕ɺϨΨγʔͳ෦෼΍ີ݁߹ͳ෦෼͸ॻ͚͍ͯͳ͍ Օॴ΋͋Δ w 6*෦෼͸7JTVBM3FHSFTTJPO5FTUJOHʹΑΔ13͝ͱͷࠩ෼֬ೝ w ΠϯςάϨʔγϣϯςετ

    w Ұ෦ίϯϙʔωϯτΛ݁߹ͨ͠ςετΛॻ͍͍ͯΔ w && &OEUP&OE ςετ w ػೳςετʢػೳ։ൃ͝ͱͷςετʣ w ௨͠ςετʢϦϦʔεલͷػೳ໢ཏςετʣ w ϑϦʔςετʢ୳ࡧతςετʣ w ࣗಈԽ͞Εͨςετ͸΄΅ଘࡏͤͣɺखಈ2"Ͱ඼࣭Λ୲อ͍ͯ͠ Δɻ2"ίετ΋૿Ճ͠ଓ͚͍ͯΔɻ
  45. 5FTU&OHJOFFSJOH 5FTU4USBUFHZ 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD $POUSPMMFS1SFTFOUFS %# "1*4FSWJDF

    $BDIF 04%FWJDF &WFOU "1* %PNBJO Ϣχοτςετ 7JTVBM3FHSFTTJPOςετ ΠϯςάϨʔγϣϯςετ && &OEUP&OE ςετ
  46. 5FTU&OHJOFFSJOH 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD $POUSPMMFS1SFTFOUFS %# "1*4FSWJDF $BDIF

    04%FWJDF &WFOU "1* %PNBJO Ϣχοτςετ 7JTVBM3FHSFTTJPOςετ ΠϯςάϨʔγϣϯςετ && &OEUP&OE ςετ Ϣχοτςετͷ୲อ͢Δ΂͖඼࣭ɺ໢ཏੑΛߴΊ͍ͯͨ͘Ίʹɺ ϢχοτςετϙϦγʔΛࡦఆɻॏཁ౓ʹΑͬͯςετ࣮૷༏ઌ౓ ΛܾΊͯਐΊ͍ͯΔɻ 5FTU4USBUFHZ
  47. 5FTU&OHJOFFSJOH 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD $POUSPMMFS1SFTFOUFS %# "1*4FSWJDF $BDIF

    04%FWJDF &WFOU "1* %PNBJO Ϣχοτςετ 7JTVBM3FHSFTTJPOςετ ΠϯςάϨʔγϣϯςετ && &OEUP&OE ςετ ΧλϩάΛॆ࣮ͤ͞ΧόʔൣғΛ޿͍͛ͯ͘ɻ 735ͷϨϏϡΠʔϨϏϡΞʔͷ੹຿Λ໌֬ʹͯ͠ޮՌΛߴΊ͍ͯ ͘ɻ 5FTU4USBUFHZ
  48. 5FTU&OHJOFFSJOH 3FQPTJUPSZ 6* $PNQPOFOU 6TF$BTF 6*-PHJD $POUSPMMFS1SFTFOUFS %# "1*4FSWJDF $BDIF

    04%FWJDF &WFOU "1* %PNBJO Ϣχοτςετ 7JTVBM3FHSFTTJPOςετ ΠϯςάϨʔγϣϯςετ && &OEUP&OE ςετ ΠϯςάϨʔγϣϯςετͱ&&ςετͷࣗಈԽ͸ݱঢ়΄΅ͳ͍ͷͰ͜Ε͔Β ਐΊ͍ͯ͘ஈ֊ɻ ֤ςετϨϕϧͰ୲อ͢Δ΂͖඼࣭Λఆٛͯ͠ϢχοτςετͱΠϯςάϨʔ γϣϯςετΛ֦ॆ͠ɺ&&ςετͰ୲อ͢Δ΂͖γφϦΦΛ໌֬ʹ͍ͯ͠ ͘ɻ&&ςετͷࣗಈԽίετ͸େ͖͘ͳΓ͕ͪͳͷͰɺखಈςετͱͷόϥ ϯεΛݟۃΊΔɻ 5FTU4USBUFHZ
  49. %FWFMPQNFOU'MPX 3FMFBTFTQFSXFFL .PO 5VF 8FE 5IV 'SJ NBTUFS Ϗϧυ ϦϦʔεલ

    ςετ ਃ੥ ˞"OESPJE͸಺෦ςετ ΧφϦΞ ϦϦʔε  ϦϦʔε
  50. $BOBSZ3FMFBTF .PO 5VF 8FE 5IV 'SJ NBTUFS Ϗϧυ ΧφϦΞ ϦϦʔε

     ϦϦʔε ਃ੥ ˞"OESPJE͸಺෦ςετ ετΞͷػೳͰΧφϦΞϦϦʔε J04ˠˠˠ "OESPJEˠ %FWFMPQNFOU'MPX ϦϦʔεલ ςετ
  51. 'FBUVSF'MBH 3FMFBTF'MBHT 8PSL*O1SPHSFTT'MBHT  ։ൃதͰςετ͞Ε͍ͯͳ͍ίʔυΛɺઈରʹΦϯʹͳ Βͳ͍ػೳͱͯ͠ϓϩμΫγϣϯίʔυʹϦϦʔε͢Δ ͨΊʹ࢖༻ɻ5SVOL#BTFE%FWFMPQNFOUΛՄೳʹ͢ Δɻ ੜଘظؒ มԽ

    ୹͍ খ ࢖༻ྫ w ౤͛મػೳ༗ޮϑϥά w 117ػೳ༗ޮϑϥά w Ϩϯλϧػೳ༗ޮϑϥά w ϚϧνΞϯάϧػೳ༗ޮϑϥά w ࡞඼ϓϨϏϡʔػೳ༗ޮϑϥά w ϐΫνϟɾΠϯɾϐΫνϟ༗ޮϑϥά w FUD
  52. 'FBUVSF'MBH &YQFSJNFOU'MBHT "#ςετΛߦ͏ࡍʹ࢖༻ ࢖༻ྫ w σβΠϯ w Ϧίϝϯυ w νϡʔτϦΞϧ

    w ڐ୚μΠΞϩά w ૌٻϙοϓΞοϓ w Ϟδϡʔϧදࣔ w ΞϯέʔτදࣔϩδοΫ࠶දࣔͷՄ൱ɾ ೔෇ִؒɾճ਺্ݶ w FUD ੜଘظؒ มԽ ୹͍ େ
  53. 4-*4-0 ఆٛͱઃఆ  ػೳ͕ఏڙͰ͖ͯΔͱݴ͑Δ৚݅ͷఆٛ  ܭଌର৅Λ໌֬Խ  ܭଌ࣮૷  ϕʔεϥΠϯͷ֬ೝ

     4-0Λઃఆ "WBJMBCJMJUZ FOEFWFOUT FOEFWFOUT GBJMVSFFWFOUT -BUFODZ FOEFWFOUT XIFSFEVSBUJPOY FOEFWFOUT
  54. $BOBSZ3FMFBTF$IFDL (ࢹௌ඼࣭) (ϓϩμΫτ඼࣭) .PO 5VF 8FE 5IV 'SJ NBTUFS Ϗϧυ

    ௨͠ ςετ ΧφϦΞ ϦϦʔε  ϦϦʔε ਃ੥ ˞"OESPJE͸಺෦ςετ ετΞͷػೳͰΧφϦΞϦϦʔε J04ˠˠˠ "OESPJEˠ
  55. %PDVNFOUBUJPO %PDVNFOUBUJPO(VJEFMJOF w ର৅ίʔυͷۙ͘ʹஔ͘ w ίʔυͱಉ͡Α͏؅ཧ w ϨϏϡʔΛ௨ͯ͠඼࣭Λ୲อ 5BSHFUT w

    ΞʔΩςΫνϟ w ϓϥΫςΟε w ςετϙϦγʔ w ։ൃϓϩηε w ςοΫϨʔμʔ Plan Code Build Test Release Monitor
  56. $PODMVTJPO • Ϟμϯͳٕज़ͱ։ൃઓུͰ௅ΉABEMA AndroidΞϓϦͷϦχϡʔΞϧ w IUUQTEFWFMPQFSTDZCFSBHFOUDPKQCMPHBSDIJWFT • UIઃܭͷڞ௨ԽͰػೳࠩҟΛຒΊΔϞόΠϧΞϓϦ։ൃ | ABEMA

    Developer Conference 2021 w IUUQTEFWFMPQFSBCFNBJPTFTTJPOTSDQE#BK$Z, • Multiplatform Engineering Roadmap for the Future | ABEMA Developer Conference 2021 w IUUQTEFWFMPQFSBCFNBJPTFTTJPOTCWKQX+&P(1 • ABEMA SREͷ௅ઓʙFrontend & Backend Team΁ͷEmbedded SREಋೖ | ABEMA Developer Conference 2021 w IUUQTEFWFMPQFSBCFNBJPTFTTJPOT35J225IRHH • HiltҠߦͭͭ͠SingleActivityԽΛ໨ࢦͨ͠ABEMA͕ɺͲͷΑ͏ʹFluxͷStore/Action΁ରԠ͔ͨ͠ʁ | Android Meetup w IUUQTZPVUVCF@*VH.*;7 • ABEMAϞόΠϧΞϓϦʹ͓͚ΔϦΞʔΩςΫνϟͷऔΓ૊Έͱల๬ | CyberAgent Developers Blog w IUUQTEFWFMPQFSTDZCFSBHFOUDPKQCMPHBSDIJWFT • ABEMAͷϦΞʔΩςΫνϟ | CA.swift w IUUQTTQFBLFSEFDLDPNLPLJIJSPLBXBBCFNBGBMTFSJBLJUFLVUJZB • ৽͍͠ະདྷͷςϨϏʮABEMAʯͷSLI/SLOʹجͮ͘࠷దԽ΁ͷ௅ઓ | NewRelic ͓٬༷ࣄྫ w IUUQTOFXSFMJDDPNKQDVTUPNFSTBCFNBUWKQ • iOSʹKMMΛಋೖ͢Δtips | Flutter ! Kotlin Multiplatform by CyberAgent #2 w IUUQTTQFBLFSEFDLDPNNBSUZTV[VLJJPTOJLNNXPEBPSVTVSVUJQT • ABEMAͷKotlin Multiplatform | Flutter ! Kotlin Multiplatform by CyberAgent #3 w IUUQTTQFBLFSEFDLDPNUBLBIJSPNBCFNBGBMTFLPUMJONVMUJQMBUGPSN • ABEMA iOS ΞϓϦ͕ΞΫηγϏϦςΟվળΛϦϦʔε͢Δ·Ͱ | CyberAgent Developers Blog w IUUQTEFWFMPQFSTDZCFSBHFOUDPKQCMPHBSDIJWFT • ܧଓతͳ։ൃελΠϧ ʮAbemaTV iOSΞϓϦΛिҰͰ ϦϦʔε͍ͯ͠Δ࿩ʯ | CyberAgent Developers Blog w IUUQTEFWFMPQFSTDZCFSBHFOUDPKQCMPHBSDIJWFT