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

ABEMAモバイルアプリが
Kotlin Multiplatformと歩んだ5年 ─ 導入と運...

Avatar for Akio Yasui Akio Yasui
September 20, 2025

ABEMAモバイルアプリが
Kotlin Multiplatformと歩んだ5年 ─ 導入と運用、成功と課題

ABEMAのiOS・Androidモバイルアプリ開発では、2020年頃からKotlin Multiplatform(KMP)の検証を開始し、段階的に導入を進めてきました。現在では、サービスの中心となる画面の多くの実装がKMPによって共通化されている状態になっています。

マルチプラットフォーム開発の選択肢としてKMPが注目される一方で、長期にわたり大規模なサービスで運用してきた事例は多くありません。本セッションでは、私たちのチームにおけるKMP導入と運用の約5年間を振り返り、以下のようなトピックについて具体的な事例を赤裸々にご紹介します。

KMP導入の背景とプロセス、直面した課題
チームの実装効率は向上した?
UI、ロジック、通信…どこまで共通化するべき?
KMPを活用しながら、Swift 6の新機能やSwiftUIの導入をどのように進めたか
KMPは他のチームや開発者へおすすめできる?
KMPの導入を検討している方・実際に使われている方はもちろん、アプリ開発へのマルチプラットフォーム技術の導入に関心のある全ての方の参考になるように、具体的で実践的な事例をお話しします。

https://fortee.jp/iosdc-japan-2025/proposal/29033387-def5-41c7-afc0-86bb54557c99

【参照している資料】

株式会社AbemaTV 会社説明資料

https://speakerdeck.com/abematv/zhu-shi-hui-she-abematv-hui-she-shuo-ming-zi-liao

ABEMA モバイルアプリにおけるリアーキテクチャの取り組みと展望 / CA BASE NEXT 2021
https://speakerdeck.com/akkyie/mobile-app-rearchitecture-in-abema
https://youtu.be/iwj6bGSQWvA

Multiplatform Engineering Roadmap for the Future / ABEMA Developer Conference 2021
https://speakerdeck.com/cyberagentdevelopers/multiplatform-engineering-roadmap-for-the-future
https://youtu.be/uWwB-2BHRmw

ABEMAのリアーキテクチャ
 / CA.swift #14 (2021)
https://speakerdeck.com/kokihirokawa/abemafalseriakitekutiya
https://youtu.be/h9QfFpSDkTw

大規模プロジェクトにおける段階的な技術刷新について / CA.swift #22 (2023)
https://speakerdeck.com/akkyie/abema-ios-technology-upgrade
https://youtu.be/0cRrCUs1pZ0

【その他関連資料】

Kotlin Multiplatform MobileのおさらいとABEMAでのマルチプラットフォーム対応 / CA BASE NEXT 2022
https://speakerdeck.com/cyberagentdevelopers/kotlin-multiplatform-mobilefalseosaraitoabemadefalsemarutipuratutohuomudui-ying
https://youtu.be/HwoCyQ9ttYI

逆引きKotlin Multiplatform〜Swiftに対応するKotlinの機能と、KMPによる変換後の実態〜 / CA.swift #17 (2023)
https://speakerdeck.com/martysuzuki/ni-yin-kikotlin-multiplatform-swiftnidui-ying-surukotlinnoji-neng-to-kmpniyorubian-huan-hou-noshi-tai
https://youtu.be/f4dbMQ3Govk

ABEMA モバイルアプリにおける「アーキテクチャ」/ CA.swift #18 (2023)
https://speakerdeck.com/akkyie/abema-mobile-architecture-ca-dot-swift-number-18
https://youtu.be/c5siSPtOMSY

Avatar for Akio Yasui

Akio Yasui

September 20, 2025
Tweet

More Decks by Akio Yasui

Other Decks in Programming

Transcript

  1. "CFNB57 *OD"MM3JHIUT3FTFSWFE  ͜ͷηογϣϯͷ಺༰ w "#&."ͷαʔϏεʹ͍ͭͯ w ͳͥίʔυڞ௨Խʁ w ͳͥ,PUMJO.VMUJQMBUGPSN

    ,.1 ʁ w ,.1ͷಋೖϓϩηε w ,.1Λಋೖͯ͠Ͳ͏ͳ͔ͬͨ w ಋೖͯ͠Α͔ͬͨ͜ͱ w ӡ༻ͯ͠ؾ͍ͮͨ೉఺ w ,.1͸͓͢͢ΊͰ͖Δʁ
  2. "CFNB57 *OD"MM3JHIUT3FTFSWFE  ͳͥίʔυڞ௨Խʁ w ॻ੶ʰ$MFBO"SDIJUFDUVSFʱͰ঺հ͞Ε͍ͯΔΑ͏ͳߟ͑ํΛϕʔεʹ ཧ૝తͱ͢ΔઃܭΛܾΊͨ w ࠷ॳ͸J04ɾ"OESPJEͷ ઃܭͷΈ౷Ұɾ࣮૷͸ผʑ

    w ࣮૷ͷதͰڞ௨Խ͢΂͖࢓༷ʹϏδωεϩδοΫ͕໌֬ʹͳ͍ͬͯΔ ˠ࣮૷΋ڞ௨ԽͰ͖ͳ͍͔ʁ $"TXJGU"#&."ͷϦΞʔΩςΫνϟ IUUQTZPVUVCFI2G'Q4%L5X
  3. "CFNB57 *OD"MM3JHIUT3FTFSWFE  ,PUMJO.VMUJQMBUGPSN ,.1 ͱ͸ w ,PUMJO΍*OUFMMJ+*%&"ͱ͍֤ͬͨछ*%&ͷ։ൃݩͰ͋Δ+FU#SBJOT͕ओಋ w ֤छϓϥοτϑΥʔϜ޲͚ͷ࣮૷Λ,PUMJOͰڞ௨Խ͢ΔͨΊͷٕज़

    w "OESPJEɺJ04ɺ8FCɺNBD04ɺ8JOEPXTɺ-JOVYɺʜ w ೥݄ʹ4UBCMFϦϦʔε IUUQTXXXKFUCSBJOTDPNLPUMJONVMUJQMBUGPSN IUUQTCMPHKFUCSBJOTDPNLPUMJOLPUMJONVMUJQMBUGPSNTUBCMF
  4. "CFNB57 *OD"MM3JHIUT3FTFSWFE  ,PUMJO/BUJWFͱ,PUMJO.VMUJQMBUGPSN IUUQTLPUMJOMBOHPSHEPDTOBUJWFPWFSWJFXIUNM IUUQTXXXKFUCSBJOTDPNLPUMJONVMUJQMBUGPSN w ,PUMJO/BUJWF,PUMJOίʔυΛωΠςΟϒόΠφϦʹίϯύΠϧ͢Δٕज़ w J04ͷ΄͔ɺNBD04ɺ8JOEPXTɺ-JOVYͳͲʹ΋ରԠ

    w ,PUMJO.VMUJQMBUGPSN,PUMJOGPS"OESPJE΍,PUMJO/BUJWFɺ 8FC޲͚ͷ,PUMJO+BWB4DSJQU΍,PUMJO8BTNͳͲΛ૊Έ߹Θͤͯɺ ୯Ұͷ,PUMJOίʔυϕʔεͰଟ༷ͳϓϥοτϑΥʔϜ޲͚ͷΞϓϦΛ ։ൃ͢ΔͨΊͷٕज़
  5. "CFNB57 *OD"MM3JHIUT3FTFSWFE w બ୒ࢶ͸ͨ͘͞Μ͋ͬͨ w 'MVUUFS 3FBDU/BUJWF   ͳͥ,PUMJO.VMUJQMBUGPSNʁ

    .VMUJQMBUGPSN&OHJOFFSJOH3PBENBQGPSUIF'VUVSF   IUUQTEFWFMPQFSBCFNBJPTFTTJPOTCWKQX+&P(1
  6. "CFNB57 *OD"MM3JHIUT3FTFSWFE  ͳͥ,PUMJO.VMUJQMBUGPSNʁ w ,PUMJO.VMUJQMBUGPSNΛબΜͩཁҼ w ڞ௨ϩδοΫ͔Βɺ෦෼తɾஈ֊తʹಋೖ͔ͨͬͨ͠ w 6*͸͋͘·ͰωΠςΟϒٕज़Ͱ࣮૷͢Δ

    w "OESPJEΤϯδχΞ͸׳Ε਌͠Μͩݴޠɾٕज़ελοΫ͕࢖͑Δ w ,PUMJOͰॻ͚Δɾ(SBEMF΍+FU#SBJOT*%&ͳͲͷपลٕज़΋ڞ௨ w ͦͷଞ։ൃͷ׆ൃ͞΍ଞࣾࣄྫɺίϛϡχςΟͷঢ়گͳͲ
  7. "CFNB57 *OD"MM3JHIUT3FTFSWFE  w ,.1࣮૷͸ઐ༻ͷϦϙδτϦͰ ؅ཧͯ͠ɺJ04ɾ"OESPJE͔Β ࢀর͍ͯ͠Δ w ,.1࣮૷Λ؅ཧ͍ͯͨ͠ ϦϙδτϦଆͰ৽نʹ

    J04ϓϩδΣΫτΛ࡞੒ w چϓϩδΣΫτ͔Βִ཭ͯ͠ ٕज़࡮৽ɾ࠶ઃܭΛਐΊΔ ʢਐߦதʣ ,.1ͷಋೖϓϩηε େن໛ϓϩδΣΫτʹ͓͚Δஈ֊తͳٕज़࡮৽ʹ͍ͭͯ$"TXJGU IUUQTZPVUVCFD3S$6TQ;
  8. "CFNB57 *OD"MM3JHIUT3FTFSWFE  w Ҡߦϓϩηε͸ॱௐʹਐߦத w αʔϏεͷதͰ࠷΋ओཁͳը໘ͷͻͱͭͰ͋Δ ࡞඼Λࢹௌ͢Δը໘ʹ͍ͭͯɺ w ࡞඼λΠϓʢछྨʣ͝ͱʹڞ௨ͷίΞͳ

    ϩδοΫΛը໘ؒͰڞ௨Խͭͭ͠ɺ ֤ը໘ݻ༗ͷ࣮૷ΛؚΊͯɺ ΄ͱΜͲͷϩδοΫΛ,.1Ͱڞ௨ԽͰ͖ͨ w ʢ͋Θͤͯ4XJGU6*΋શମతʹಋೖͨ͠ʣ ,.1Λಋೖͯ͠Α͔ͬͨ͜ͱ
  9. "CFNB57 *OD"MM3JHIUT3FTFSWFE  w ࡞඼ࢹௌը໘ͷҠߦͰ͸ɺͭͷ࡞඼λΠϓʹ ߜͬͯJ04ϝϯόʔΛத৺ʹ࿮૊ΈΛ࡞੒ɾҠߦ w ଞͷͭͷ࡞඼λΠϓʹ͍ͭͯ͸ "OESPJEϝϯόʔ͕ओಋͯ͠ҠߦΛ׬਱ w

    ,.1ಋೖʹΑͬͯ w ࢓༷ͱͯ͠ͷϩδοΫ͕ڞ௨͍ͯ͠Δ͜ͱΛ ίʔυϨϕϧͰ୲อͰ͖͍ͯΔ w J04"OESPJEؒͰͷϦιʔεͷॊೈੑ͕޲্͢Δ ,.1Λಋೖͯ͠Α͔ͬͨ͜ͱ
  10. "CFNB57 *OD"MM3JHIUT3FTFSWFE w ಋೖʹ͸૬౰ͳίετ͕͔͔Δ w ؀ڥߏஙɺ4XJGU 0CKFDUJWF$ ͱͷ૬ޓӡ༻ੑͷվળɺ όάɾΫϥογϡௐࠪɺऔΓࠐΈϑϩʔͷ੔උɺʜ w

    ҆ఆͯ͠ӡ༻Ͱ͖ΔΑ͏ʹͳΔ·Ͱͷ೥΄Ͳ͸ɺ ϦʔυϨϕϧͷΤϯδχΞ͕ਓʢଞλεΫͱͷ݉຿΋͋Γͭͭʣ ʮ,.1୲౰ʯͱͯ͠ಈ͘ඞཁ͕͋ͬͨ  ,.1Λӡ༻ͯ͠ؾ͍ͮͨ೉఺
  11. "CFNB57 *OD"MM3JHIUT3FTFSWFE w FYQPSU͢ΔΠϯλʔϑΣʔε͕૿͑ΔͱϏϧυ࣌ؒ΋૿͑Δ w ஈ֊తʹಋೖͨ͠ܦҢʹΑΓɺچJ04ϓϩδΣΫτ͔Β͸,.1࣮૷ͷ ༷ʑͳϨΠϠʔͷΫϥεʹ௚઀ΞΫηε͍ͯ͠Δʢ֎෦ґଘΛؚΊͯʣ w ˠ%FCVH3FMFBTF߹ΘͤͯϑϨʔϜϫʔΫͷੜ੒ʹ෼΄Ͳ 

    ͔͔Δ w 4,*&Λಋೖ͢Δͱ͞ΒʹԆͼΔʢͦͷͨΊɺݱঢ়ಋೖͰ͖͍ͯͳ͍ʣ w ৽ϓϩδΣΫτͰ͸ࢀর͢ΔϨΠϠʔΛݶఆ͍ͯ͠ΔͷͰૣ͍  ,.1Λӡ༻ͯ͠ؾ͍ͮͨ೉఺ IUUQTHJUIVCDPNUPVDIMBC4,*&
  12. "CFNB57 *OD"MM3JHIUT3FTFSWFE w ։ൃͷΦʔόʔϔου͕૿͑Δ෦෼΋͋Δ w "#&."Ͱ͸ϦϙδτϦΛ෼͚͍ͯͨ ˠ13ϚʔδͷͨͼʹϦϦʔεɾऔΓࠐΈ࡞ۀ͕ඞཁ w ݱࡏϞϊϨϙԽʹ޲͚ͯܭըத w

    σόοά͸େม w UPVDIMBCYDPEFLPUMJOʹΑΓϒϨʔΫϙΠϯτͳͲ͸࠷௿ݶ࢖͑Δ͕ɺ ωΠςΟϒ࣮૷෦෼΄Ͳʹ͸׆༻Ͱ͖ͳ͍  ,.1Λӡ༻ͯ͠ؾ͍ͮͨ೉఺ IUUQTUPVDIMBCDPYDPEFLPUMJO
  13. "CFNB57 *OD"MM3JHIUT3FTFSWFE w ,.1Ͱڞ௨Խ͍ͯͯ͠΋ɺ,PUMJO/BUJWFΛ࢖͏ͷ͸J04ଆ͚ͩ w ,PUMJO/BUJWFͱ,PUMJOGPS"OESPJE ,PUMJO+7. ͸ҧ͏΋ͷ w "OESPJEϝϯόʔʹ,PUMJOͷ஌ݟ͕͋Δͱݴͬͯ΋ɺ

    ,PUMJO/BUJWFݻ༗ͷ஌ࣝ΍ෆ۩߹΋ଟ͍ w ,PUMJOͰॻ͔Ε͍ͯΔʺ,PUMJO/BUJWFͰ࢖͑Δ w ,PUMJO/BUJWFʹඇରԠͷ,PUMJOϥΠϒϥϦ΋·ͩ·ͩଟ͍ w +BWBͷඪ४ϥΠϒϥϦ΋࢖͑ͳ͍ʢUriܕͳͲʣ  ,.1Λӡ༻ͯ͠ؾ͍ͮͨ೉఺
  14. "CFNB57 *OD"MM3JHIUT3FTFSWFE  😕 ಋೖʹ͸૬౰ͳίετ͕͔͔Δ w ʮ,.1୲౰ʯ͔ɺJ04"OESPJE֤ϝϯόʔͷίϛοτϝϯτ͕ඞཁ 😕 ,.1࣮૷ଆ͔Βެ։͢ΔΠϯλʔϑΣʔε͸ݶఆ͢Δ΂͖ w

    ઃܭͱͯ͠,.1෦෼ͱ֎ଆΛͲͷΑ͏ͳڥքͰ۠੾Δͷ͔ɺ Α͘ݕ౼͢Δඞཁ͕͋Δ 😕 ,PUMJO/BUJWFݻ༗ͷ஌ࣝ΍՝୊͸গͳ͘ͳ͍ w ,PUMJO "OESPJE ͷ஌ݟɾٕज़ࢿ࢈Λ׆༻Ͱ͖ͳ͍৔໘΋͋Δ w ޻෉࣍ୈ͕ͩɺ࣮૷΍σόοάαΠΫϧʹΦʔόʔϔου͸͋Δ ,.1Λӡ༻ͯ͠ؾ͍ͮͨ೉఺
  15. "CFNB57 *OD"MM3JHIUT3FTFSWFE  6*͸ωΠςΟϒͰ࣮૷͢Δʁˠ͢Δ৔߹  ϩδοΫ͸Ͳ͜ʹ͓͘ʁ w ΞϓϦଆͰݸผʹ࣮૷͢Δ ˠϑϧωΠςΟϒ࣮૷ w

    ΞϓϦଆʹ࣋ͪͭͭϓϥοτϑΥʔϜؒͰڞ௨Խ͢Δ ˠ෦෼తʹڞ௨ԽͰ͖Δ,.1͕༗ྗͳબ୒ࢶʹͳΔ w όοΫΤϯυଆʹدͤΔͳͲͯ͠ɺΞϓϦଆͰ࣋ͭϩδοΫΛݮΒ͢ ˠڞ௨Խٕज़Λ࢖Θͳ͍΄͏͕ޮ཰త͔΋ʁ  ,.1͸͓͢͢ΊͰ͖Δʁ
  16. "CFNB57 *OD"MM3JHIUT3FTFSWFE  w "TLUIF4QFBLFS w ,.1$.1ΞϯΧϯϑΝϨϯε XJUI4503&4༷ʙ w αΠόʔΤʔδΣϯτ

    εϙϯαʔϒʔε #  ʹ͓ͯ଴͍ͪͯ͠·͢ʂ ͓ΘΓʹ גࣜձࣾ"CFNB57ձࣾઆ໌ࢿྉ IUUQTTQFBLFSEFDLDPNBCFNBUW[IVTIJIVJTIFBCFNBUWIVJTIFTIVPNJOH[JMJBP εϥΠυɾϦϯΫू