CASwift_11.pdf

 CASwift_11.pdf

90da08fcfc989c3ad30cc36f282768c7?s=128

Shunsaku Miki

January 30, 2020
Tweet

Transcript

  1. Amebaͷઃܭͱ͜Ε͔Β ~ΧΦε͔Βͷ୤٫ͱ࠶ͼΧΦεΛੜΈग़͞ͳ͍౒ྗʙ 2020/1/30

  2. 1.ࣗݾ঺հ&ϓϩμΫτ঺հ 2.ΧΦε͗ͨ͢ઃܭ 3.ϦΞʔΩςΫνϟ:yatteiki: 4.݁Ռͱະདྷ

  3. ࣗݾ঺հ&ϓϩμΫτ঺հ

  4. ࣗݾ঺հˍϓϩμΫτ঺հ • ࡾ໦ ढ़࡞ • 2017೥த్ೖࣾ Ameba iOS։ൃϦʔμʔ • 2010೥ϦϦʔε

    • Twitter/shun_sakuuu • Github/shun-mk
  5. ΧΦε͗ͨ͢ઃܭ

  6. ΧΦε͗ͨ͢ઃܭ • 2010೥ʹϦϦʔε͞Ε10೥Ҏ্ӡ༻Λ͍ͯ͠ΔΞϓϦ • ࣌୅ͷྲྀΕͷதͰͨ͘͞Μͷస׵ظ • WebViewΞϓϦ͔ΒϑϧωΠςΟϒʹ • Objective-C͔ΒSwiftʹ •

    ౰વνʔϜͷϝϯόʔͷೖΕସΘΓ΋ܹ͍͠ • ࣌୅ͷྲྀΕͷதͰ౰࣌σϑΝΫτͩͱݴΘΕ͖ͯͨઃܭ΋ͨ͘͞Μ͋Δ • ΧΦε͔Β୤٫͠Α͏ͱͯ͠଍ૡ͍ͨࠟ੻΋ɻɻɻ
  7. MVC • ଏʹݴ͏FatViewController • ΊͬͪΌViewControllerͰAPI௨৴ͯ͠Δ • ViewControllerͰAPI௨৴ͱ͔ॻ͍ͪΌͩΊͩΑʁ͍ͬͯ͏࣌୅ͷἤΓΛड͚ ͨͷ͔HogeHogeManagerͱ͔HogeHogeHelperͱ໋໊͔͔ΒԿ͢Δͷ͔Α͘ Θ͔Βͳ͍Ϋϥε͕API௨৴Λ࣋ͬͯͨΓ΋͢Δ •

    ౰વςετ͸ͳ͍
  8. VIPER • Ұ෦VIPERͷߏ੒Ͱ࡞ΒΕͯΔը໘͕͋Δ • ͓ͦΒ͘͜Ε΋AmebaΛΧΦε͔Β୤٫͢ΔͨΊʹ௅ઓͨ͠Ұͭͳͷ͔ͳʁ • ઃܭࢿྉ౳͕ͳ͘Ͳ͏͍͏ࢥ૝ͰͲ͏͍͏ߏ੒ʹͳ͍ͬͯΔͷ͔͕ඇৗʹ෼ ͔ΓͮΒ͍ • ౰વςετ͸ͳ͍

  9. ΧΦε͗ͨ͢ઃܭ • ৽نը໘Λ࣮૷͢Δ࣌Ͳ͏͍͏ઃܭʹ͢Ε͹͍͍͔ຖճ0͔Βߟ͑Δͷ݁ߏେ ม • ͔͠΋ਓͦΕͧΕ͜Ε͕͍͍͍ͬͯ͏ͷ͕ҧ͏ͷͰϨϏϡʔίετ੝Γ੝Γ • ͦͷઃܭʹͨ͠ΤϯδχΞ͕͍ͳ͘ͳΔͱෛ࠴ײ͕ੌ͍ • ઃܭ͕΅Μ΍Γ&ີ݁߹&ςετ΋ಛʹͳ͘Կ͕ਖ਼ͷಈ͖ͳͷ͔Θ͔Βͳ͍ͷ

    ࡾॏۤͰ࢓༷มߋ΍ػೳ௥Ճʹ༨෼ʹ޻਺͕ൃੜ͢Δঢ়ଶʹ
  10. ϦΞʔΩςΫνϟ:yatteiki:

  11. ͬ͘͟Γͱͨ͠ํ਑ • ࠓճͷϦΞʔΩςΫνϟͰ໨ࢦͨ͠࠷ऴܕ͸MVVM ʴ Flux • ಋೖ͕ਐΜͰ͍ͳ͔ͬͨRxSwift΋ϦΞʔΩςΫνϟʹ߹ΘͤͯਐΊΔ • ͔ͤͬ͘ઃܭ͠௚͢ͳΒςετͷ࣮૷·Ͱߟ͑ΒΕͯΔઃܭʹ͍ͨ͠ •

    ςετॻ͘ͳΒCIͷ؀ڥ΋ݟ௚ͯ͠ςετΛॻ͘͜ͱʹҙຯ͕͋Δঢ়ଶΛ࡞ Γ͍ͨ • ઃܭҊʹؔͯ͠͸ৗʹνʔϜͰ͢Γ߹ΘͤΛߦ͏(୭͔ҰਓͷઃܭΛօ͕ਅࣅ ͯ͠ॻ͚ͩ͘ͷঢ়ଶ͸ආ͚͍ͨ)
  12. MVVM • Ұൠతʹࢥ͍ු͔ͿMVVMͱ΄΅มΘΒͳ͍ߏ੒ • 1ը໘ͷϩδοΫ͕ෳࡶͳը໘͕ͦͦ͋͜͜Δͷͱෳ਺ͷը໘͕ಉظ͠ͳͯ͘ ͸͍͚ͳ͍Α͏ͳ࢓༷͕ଟ͍Θ͚Ͱ͸ͳ͔ͬͨͷͰγϯϓϧͳMVVMΛ࠾༻ ͨ͠ • ViewͱViewModelͷbindingΛ͢ΔͨΊͷFramework͸RxSwiftΛ࠾༻(ࣾ಺ʹ ͓͚Δ࠾༻࣮੷౳ΛؑΈܾͯఆ)

  13. MVVM • ॳظViewModelͷߏ૝͸init಺ͰPublishSubject౳Λੜ੒͠Observerͱ ObservableͷϓϩύςΟʹηοτͯ͠ߪಡ͢Δܗʹ͍ͯͨ͠ • ؆୯ͳը໘ͳΒˢͷ࣮૷ͰࠔΔ͜ͱ͸ಛʹͳ͍ • ViewModelͷIn-OutͷI/F͕࣮૷ऀʹҕͶΒΕ͓ͯΓϨϏϡʔίετ͕ංେԽ • ෳࡶͳॲཧ͕ೖͬͯ͘Δͱinit͕ஶ͘͠ංେԽ͠ϝϯςίετ͕ര૿ͨ͠

  14. MVVM • ViewModelͷinitͰߦ͍ͬͯͨObservableͷՃ޻΍API௨৴ɺViewදࣔ༻ͷ Model΁ͷTranslatorݺͼग़͠ΛUsecaseͱͯ͠੾Γग़͠ • ViewModelͷInputͱOutputΛProtocolʹ੾Γग़͠In-OutͷI/FΛڞ௨Խ • ViewModel಺ͷinitͰߦΘΕ͍ͯͨॲཧΛͦΕͧΕͷ੹຿ຖʹ੾Γग़͠ංେԽ Λ๷͙ͱͱ΋ʹখ͍͞୯ҐͰςετ͕ॻ͚ΔΑ͏ʹ

  15. Flux • MVVMͷ࢓૊Έͩͱ࣮ݱ͢Δͷʹ൥ࡶԽ͢ΔΑ͏ͳ࢓༷͕ग़͖ͯͨ • ϩάΠϯ/ϩάΞ΢τʹΑͬͯΞϓϦશମͷঢ়ଶΛ੾Γସ͑ͨΓɺλϒͷΑ͏ ͳը໘Ͱߋ৽௨஌ΛϒϩʔυΩϟετͨ͠Γ౳ • ࠷ॳ͸ObserverͱObservableΛI/Fʹ࣋ͭSingletonͷΦϒδΣΫτΛར༻ͯ͠ ղܾ͍ͯ͠ΔՕॴ΋͕͋ͬͨ೗Կ༷ʹ΋ѱ͍͜ͱ͕Ͱ͖ͯ͠·͏ͷͱεέʔ ϧ͢ΔΠϝʔδ͕ͳ͔ͬͨͨΊղܾ͔ͨͬͨ͠

  16. Flux • Fluxര஀ • σʔλϑϩʔ͸FacebookͷFluxͱಉ༷ • ඇRxґଘ -> Store͸ViewModelͱbindͤͨ͞΄͏͕౎߹͕ྑ͍Օॴ͕͋ΔͷͰ StoreͷϕʔεΫϥεʹExtensionͰObservableʹม׵͢ΔॲཧΛ௥Ճ͍ͯ͠Δ

  17. Flux • Fluxͷར༻ऀ͸StoreͷΠϯελϯεΛੜ੒͠దٓbind͢Δ • SingletonͰ࣮૷͍ͯͨ࣌͠ͱҧ͍ར༻ऀଆ͕ඞཁͳΠϕϯτ΍StateΛ࣋ͭ Store͚ͩΛݟΕ͹͍͍ͨΊෆཁͳObservableΛߪಡ͢Δ͜ͱΛ๷͛Δ • ංେԽ͠ଓ͚Δະདྷ͔͠ݟ͑ͳ͔ͬͨSingleton͔ΒඞཁʹԠͯ͡ܗΛม͑Δ StoreΛੜ੒Ͱ͖ΔΑ͏ʹͳͬͨͷͰεέʔϧ͢Δײ •

    σʔλϑϩʔ΋୯ํ޲ͳͷͰAPI௨৴౳͕ඞཁʹͳΔॲཧͰ΋ΩϨΠͳߏ੒Λ อͭ͜ͱ͕Ͱ͖ΔΑ͏ʹ
  18. ͨͩ͠

  19. Flux • ར༻Օॴ͸ͪΌΜͱߟ͑Δ͜ͱ • FluxΛར༻͢Δඞཁ͕ͳ͍ը໘΋FluxͰ࣮૷͢Δͱٯʹ൥ࡶʹͳͬͯ͠·͏ ՄೳੑΛሃΜͰ͍Δ • MVVMͰ͸ΩϨΠʹ࡞Εͳ͍ॲཧͷྲྀΕ͕͋ΔΑ͏ͳͱ͖ʹબ୒ࢶͱͯ͠ར ༻ •

    ݸਓతʹ͸NotificationCenterͱ͔ObserverύλʔϯͰຖճಠࣗͷศརΫϥε ࡞ΔΑΓ͸அવFlux೿
  20. ݁Ռͱະདྷ

  21. ྑ͔ͬͨ఺ • ৽࣮͘͠૷͞ΕΔը໘ͷ࡞Γ͕͋Δఔ౓౷Ұ͞Ε͍ͯΔͷ͸ϨϏϡʔίετ ౳Λߟ͑ͯ΋ѹ౗తʹྑ͍ • Ұਓ͕ઃܭ͢ΔͷͰ͸ͳ͘ɺνʔϜ಺Ͱ͖ͬͪΓೝࣝΛ߹Θͤͳ͕ΒਐΊΔ ͜ͱͰઃܭΛߟ͑Δେࣄ͕͞ਁಁͨ͠ײ͕ͨ͡͠ • ઃܭͷࢿྉͳͲ͕ࣾ಺ͷυΩϡϝϯτʹ࢒͞Ε͍ͯΔঢ়ଶΛ࡞Εͨ •

    ෭࣍తͰ͸͋Δ͕ςετͷࣄΛߟྀ͢ΔΑ͏ʹͳͬͨ͜ͱͰCI؀ڥͷݟ௚͠ ͳͲ΋ਐΊΔ͜ͱ͕Ͱ͖ͨ(ϝϯςφʔ͕ଐਓԽ͍ͯͨ͠Jenkins͔ΒBitrise ΁)
  22. ΠϚΠνͩͬͨ఺ • ࢼߦࡨޡ͠ͳ͕ΒͷϦΞʔΩςΫνϟͩͬͨͷͰίʔυͷதʹຊདྷඞཁͳ͍ ෛ࠴͕࢒ͬͨ • ͕࣌ؒڐ͞ΕΔͳΒ΋ͬͱ৭ʑߟ͑Δ΂͖ͩͬͨ(init͕ංେԽ͢Δ໰୊΍ϨΠ ϠʔΛҙࣝͨ͠ઃܭ౳ʣ • શը໘Λࠓճͷઃܭʹ͢ΔϚΠϧετʔϯͳͲ͸Ҿ͚͓ͯΒͣࠜຊʹ͋ΔΧ Φε͕·ͩͳ͍ͤͯ͘ͳ͍

  23. େࣄͳͷ͸͜ΕΒΛ౿·͑ͯ ͜Ε͔ΒͲ͏͍ͯ͘͠ͷ͔

  24. ͜Ε͔ΒͷAmebaͷઃܭ • ݱঢ়՝୊ͩͱײ͍ͯ͡Δͷ͕ViewModelΑΓཪଆͷ෦෼ͷ࡞Γ(Usecaseͱ͔ Repositoryͱ͔) • ࠓ͸ઃܭΛͨ͠ϝϯόʔ͕·ͩνʔϜ಺ʹἧ͍ͬͯΔͷͰடং͕อͨΕ͍ͯ Δ͚ͩ • શһ͍ͳ͘ͳͬͨ͋ͱΧΦεΛੜΈग़͢ةݥੑ͸·ͩ·ͩሃΜͰ͍Δ •

    Ͱ͸ԿΛ͢Δͷ͔ʁʁʁ
  25. ͜Ε͔ΒͷAmebaͷઃܭ • Layered Architectureͷߟ͑ํΛࢀߟʹऔΓೖΕ͍͖͍ͯͨ

  26. ͜Ε͔ΒͷAmebaͷઃܭ • Layered Architectureͷߟ͑ํ΍ଊ͑ํɺ࣮ࡍͷ࣮૷ʹࢸΔ·Ͱ৭ʑͳߟ͑ํ Λ࣋ͬͯΔਓ͕͍Δ • ݪཧओٛͰ͸ͳ͋͘͘·ͰAmebaͱͯ͠औΓೖΕΔͳΒͲͷܗ͕ཧ૝ͳͷ͔ Λߟ͍͖͍͑ͯͨ • ྫ͑͹Entity͸Domain૚ͳͷ͔Data૚ͳͷ͔౳ɺ༷ʑͳߟ͑ํ͸͋Δͱࢥ͏

    ͕Amebaͷಛੑ΍EmbedFrameworkͱͯ͠੾Γग़ͨ͠ͱ͖ʹෆՄղͳґଘঢ় ଶʹͳΒͳ͍Α͏ߟྀ͖͍ͯͨ͠
  27. ·ͱΊ • ௕͘ӡӦͯ͠ΔαʔϏεͩͱΧΦε͕ੜ·Εͯ͠·͏ͷ͸࢓ํͳ͍͜ͱ • ݱঢ়ʹҤ͑Δ͚ͩ͡Όͳͯ͘Ή͠Ζ৳ͼ͠Ζͩͱଊ͑ΒΕΔϝϯόʔͱঢ়گ ͕ἧ͍ͬͯΕ͹ΨϯΨϯ΍͍ͬͯͬͨ΄͏͕͍͍͜ͱ͕͋Δ • ઃܭʹۜͷ஄ؙ͸ͳ͍ͷͰ৽͍͠΋ͷΛΩϟον্ͨ͠ͰαʔϏεಛੑʹ Ϛον͢Ε͹ΨγΨγऔΓೖΕ͍ͯ͘ •

    ಠΓΑ͕ΓͷઃܭͰ͸ͳ͘ઃܭ΁ͷνʔϜશମͰͷίϛοτํ๏΋ઃܭ͢Δ ඞཁ͕͋Δ
  28. ͋Γ͕ͱ͏͍͟͝·ͨ͠☺