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

CASwift_11.pdf

 CASwift_11.pdf

Shunsaku Miki

January 30, 2020
Tweet

More Decks by Shunsaku Miki

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. ΧΦε͗ͨ͢ઃܭ

    View Slide

  6. ΧΦε͗ͨ͢ઃܭ
    • 2010೥ʹϦϦʔε͞Ε10೥Ҏ্ӡ༻Λ͍ͯ͠ΔΞϓϦ
    • ࣌୅ͷྲྀΕͷதͰͨ͘͞Μͷస׵ظ
    • WebViewΞϓϦ͔ΒϑϧωΠςΟϒʹ
    • Objective-C͔ΒSwiftʹ
    • ౰વνʔϜͷϝϯόʔͷೖΕସΘΓ΋ܹ͍͠
    • ࣌୅ͷྲྀΕͷதͰ౰࣌σϑΝΫτͩͱݴΘΕ͖ͯͨઃܭ΋ͨ͘͞Μ͋Δ
    • ΧΦε͔Β୤٫͠Α͏ͱͯ͠଍ૡ͍ͨࠟ੻΋ɻɻɻ

    View Slide

  7. MVC
    • ଏʹݴ͏FatViewController
    • ΊͬͪΌViewControllerͰAPI௨৴ͯ͠Δ
    • ViewControllerͰAPI௨৴ͱ͔ॻ͍ͪΌͩΊͩΑʁ͍ͬͯ͏࣌୅ͷἤΓΛड͚
    ͨͷ͔HogeHogeManagerͱ͔HogeHogeHelperͱ໋໊͔͔ΒԿ͢Δͷ͔Α͘
    Θ͔Βͳ͍Ϋϥε͕API௨৴Λ࣋ͬͯͨΓ΋͢Δ
    • ౰વςετ͸ͳ͍

    View Slide

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

    View Slide

  9. ΧΦε͗ͨ͢ઃܭ
    • ৽نը໘Λ࣮૷͢Δ࣌Ͳ͏͍͏ઃܭʹ͢Ε͹͍͍͔ຖճ0͔Βߟ͑Δͷ݁ߏେ

    • ͔͠΋ਓͦΕͧΕ͜Ε͕͍͍͍ͬͯ͏ͷ͕ҧ͏ͷͰϨϏϡʔίετ੝Γ੝Γ
    • ͦͷઃܭʹͨ͠ΤϯδχΞ͕͍ͳ͘ͳΔͱෛ࠴ײ͕ੌ͍
    • ઃܭ͕΅Μ΍Γ&ີ݁߹&ςετ΋ಛʹͳ͘Կ͕ਖ਼ͷಈ͖ͳͷ͔Θ͔Βͳ͍ͷ
    ࡾॏۤͰ࢓༷มߋ΍ػೳ௥Ճʹ༨෼ʹ޻਺͕ൃੜ͢Δঢ়ଶʹ

    View Slide

  10. ϦΞʔΩςΫνϟ:yatteiki:

    View Slide

  11. ͬ͘͟Γͱͨ͠ํ਑
    • ࠓճͷϦΞʔΩςΫνϟͰ໨ࢦͨ͠࠷ऴܕ͸MVVM ʴ Flux
    • ಋೖ͕ਐΜͰ͍ͳ͔ͬͨRxSwift΋ϦΞʔΩςΫνϟʹ߹ΘͤͯਐΊΔ
    • ͔ͤͬ͘ઃܭ͠௚͢ͳΒςετͷ࣮૷·Ͱߟ͑ΒΕͯΔઃܭʹ͍ͨ͠
    • ςετॻ͘ͳΒCIͷ؀ڥ΋ݟ௚ͯ͠ςετΛॻ͘͜ͱʹҙຯ͕͋Δঢ়ଶΛ࡞
    Γ͍ͨ
    • ઃܭҊʹؔͯ͠͸ৗʹνʔϜͰ͢Γ߹ΘͤΛߦ͏(୭͔ҰਓͷઃܭΛօ͕ਅࣅ
    ͯ͠ॻ͚ͩ͘ͷঢ়ଶ͸ආ͚͍ͨ)

    View Slide

  12. MVVM
    • Ұൠతʹࢥ͍ු͔ͿMVVMͱ΄΅มΘΒͳ͍ߏ੒
    • 1ը໘ͷϩδοΫ͕ෳࡶͳը໘͕ͦͦ͋͜͜Δͷͱෳ਺ͷը໘͕ಉظ͠ͳͯ͘
    ͸͍͚ͳ͍Α͏ͳ࢓༷͕ଟ͍Θ͚Ͱ͸ͳ͔ͬͨͷͰγϯϓϧͳMVVMΛ࠾༻
    ͨ͠
    • ViewͱViewModelͷbindingΛ͢ΔͨΊͷFramework͸RxSwiftΛ࠾༻(ࣾ಺ʹ
    ͓͚Δ࠾༻࣮੷౳ΛؑΈܾͯఆ)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. ͨͩ͠

    View Slide

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

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

    View Slide

  20. ݁Ռͱະདྷ

    View Slide

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

    View Slide

  22. ΠϚΠνͩͬͨ఺
    • ࢼߦࡨޡ͠ͳ͕ΒͷϦΞʔΩςΫνϟͩͬͨͷͰίʔυͷதʹຊདྷඞཁͳ͍
    ෛ࠴͕࢒ͬͨ
    • ͕࣌ؒڐ͞ΕΔͳΒ΋ͬͱ৭ʑߟ͑Δ΂͖ͩͬͨ(init͕ංେԽ͢Δ໰୊΍ϨΠ
    ϠʔΛҙࣝͨ͠ઃܭ౳ʣ
    • શը໘Λࠓճͷઃܭʹ͢ΔϚΠϧετʔϯͳͲ͸Ҿ͚͓ͯΒͣࠜຊʹ͋ΔΧ
    Φε͕·ͩͳ͍ͤͯ͘ͳ͍

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. ·ͱΊ
    • ௕͘ӡӦͯ͠ΔαʔϏεͩͱΧΦε͕ੜ·Εͯ͠·͏ͷ͸࢓ํͳ͍͜ͱ
    • ݱঢ়ʹҤ͑Δ͚ͩ͡Όͳͯ͘Ή͠Ζ৳ͼ͠Ζͩͱଊ͑ΒΕΔϝϯόʔͱঢ়گ
    ͕ἧ͍ͬͯΕ͹ΨϯΨϯ΍͍ͬͯͬͨ΄͏͕͍͍͜ͱ͕͋Δ
    • ઃܭʹۜͷ஄ؙ͸ͳ͍ͷͰ৽͍͠΋ͷΛΩϟον্ͨ͠ͰαʔϏεಛੑʹ
    Ϛον͢Ε͹ΨγΨγऔΓೖΕ͍ͯ͘
    • ಠΓΑ͕ΓͷઃܭͰ͸ͳ͘ઃܭ΁ͷνʔϜશମͰͷίϛοτํ๏΋ઃܭ͢Δ
    ඞཁ͕͋Δ

    View Slide

  28. ͋Γ͕ͱ͏͍͟͝·ͨ͠☺

    View Slide