Slide 1

Slide 1 text

Copyright © 2017 eureka, Inc. All rights reserved. What did the Redux Architecture change pairs development? ReduxΛऔΓೖΕͯpairs։ൃ͸Ͳ͏ มΘ͔ͬͨ

Slide 2

Slide 2 text

Copyright © 2017 eureka, Inc. All rights reserved. 2 Introduce FVSFLB *OD 1BJSTJ04"QQMJDBUJPO&OHJOFFS @satoshin21

Slide 3

Slide 3 text

Copyright © 2017 eureka, Inc. All rights reserved. 3 Agenda QBJSTͷ՝୊ 3FEVYͱ͸ʁXJUI3F4XJGU 3FEVYͰ։ൃ͸Ͳ͏มΘ͔ͬͨ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Copyright © 2017 eureka, Inc. All rights reserved. About pairs iOS application pairsͷ՝୊

Slide 6

Slide 6 text

Copyright © 2017 eureka, Inc. All rights reserved. 6 pairsͷ՝୊ - MatchingܥΞϓϦ͋Δ͋Δʁ ͱʹ͔͘ෳࡶͳঢ়ଶ؅ཧ ࣗ෼ɺ͓૬खɺΩϟϯϖʔϯɺ՝ۚঢ়ଶɺΦϓγϣϯɺͦͷଞϏϡʔΠ ϕϯτɾɾɾFUD 'BUͳ7JFX$POUSPMMFS ͍͍ͶʂɺΈͯͶʂϝοηʔδ෇͖͍͍Ͷʂϝοηʔδ෇͖ΈͯͶʂ࣭໰ ෇͖͍͍ͶʂϓϥΠϕʔτϞʔυɺඇදࣔɺϒϩοΫͳͲͳͲɺϢʔβΞ Ϋγϣϯ͕༩͑ΔӨڹ͕޿ൣғ

Slide 7

Slide 7 text

Copyright © 2017 eureka, Inc. All rights reserved. 7 pairsͷ՝୊ - ͱΓ͋͑ͣࠓͷঢ়ଶ Ϣʔβͷঢ়ଶ؅ཧ͸$PSF%BUBΛத৺ͱͯ͠/4'FUDIFE3FTVMUT$POUSPMMFS ͷΑ͏ͳܗͰಉظ $PSF4UPSFͱ͍͏௒ศརͳϥΠϒϥϦΛར༻ 6*7JFX$POUSPMMFSଆͰঢ়ଶ؅ཧ 3Y4XJGU ΞϓϦશମΛ·͙ͨετϦʔϜͷ؅ཧ͕ਏ͍ DPNQMFUFEɾɾɾͩͱɾɾɾʁ

Slide 8

Slide 8 text

Copyright © 2017 eureka, Inc. All rights reserved. 8 pairsͷ՝୊ - ΑΓϚΫϩͳ՝୊͸ͪ͜Β https://goo.gl/d5Af8m

Slide 9

Slide 9 text

Copyright © 2017 eureka, Inc. All rights reserved. 9 pairsԿ͕ղܾ͍͔ͨ͠ʁ ঢ়ଶ؅ཧɺಛʹ7JFXʹؔΘΔঢ়ଶΛݟ΍͍ͨ͘͢͠ ϢʔβΞΫγϣϯʹΑΔঢ়ଶͷӨڹΛݟ΍͍ͨ͘͢͠ ΞϓϦશମʹӨڹ͢Δঢ়ଶΛݟ௨͠΍͍ͨ͘͢͠

Slide 10

Slide 10 text

Copyright © 2017 eureka, Inc. All rights reserved. What is Redux? Reduxͱ͸ʁ

Slide 11

Slide 11 text

Reduxͱ͸ʁ

Slide 12

Slide 12 text

ঢ়ଶͷมԽΛܶతʹݟ௨͠қ͘͢Δ GUI Architecture

Slide 13

Slide 13 text

https://github.com/ReSwift/ReSwift

Slide 14

Slide 14 text

ྫ͑͹ɺϢʔβͷ௥ՃಡΈࠐΈ

Slide 15

Slide 15 text

"QQFOE6TFS"DUJPO $SFBUPS 7JFX$POUSPMMFS "QQ4UPSF "QQ4UBUF 6TFS4FBSDI4UBUF "QQ3FEVDFS 6TFS4FBSDI3FEVDFS .JEEMFXBSF

Slide 16

Slide 16 text

"QQFOE6TFS"DUJPO $SFBUPS 6TFS4FBSDI 7JFX$POUSPMMFS "QQ4UPSF "QQ4UBUF 6TFS4FBSDI4UBUF "QQ3FEVDFS 6TFS4FBSDI3FEVDFS .JEEMFXBSF Լ·ͰεΫϩʔϧͨ͠ ௥ՃಡΈࠐΈ͕ඞཁͳ৔ ߹͸ΞΫγϣϯΛൃߦ

Slide 17

Slide 17 text

"QQFOE6TFS"DUJPO $SFBUPS 6TFS4FBSDI 7JFX$POUSPMMFS "QQ4UPSF "QQ4UBUF 6TFS4FBSDI4UBUF "QQ3FEVDFS 6TFS4FBSDI3FEVDFS .JEEMFXBSF "1*ϦΫΤετ ੒ޭ࣌͸ 6QEBUF%BUB4PVSDF"DUJPO ࣦഊ࣌͸ 'BJMFE3FRVFTU"DUJPO ൃߦ

Slide 18

Slide 18 text

"QQFOE6TFS"DUJPO $SFBUPS 6TFS4FBSDI 7JFX$POUSPMMFS "QQ4UPSF "QQ4UBUF 6TFS4FBSDI4UBUF "QQ3FEVDFS 6TFS4FBSDI3FEVDFS .JEEMFXBSF 4UBUFͷ࣋ͭ<6TFS>ʹ BQQFOE

Slide 19

Slide 19 text

"QQFOE6TFS"DUJPO $SFBUPS 6TFS4FBSDI 7JFX$POUSPMMFS "QQ4UPSF "QQ4UBUF 6TFS4FBSDI4UBUF "QQ3FEVDFS 6TFS4FBSDI3FEVDFS .JEEMFXBSF 4UBUF͕ߋ৽͞Εͨࢫ ௨஌

Slide 20

Slide 20 text

Copyright © 2017 eureka, Inc. All rights reserved. 20 Redux - Three Principles 4JOHMFTPVSDFPGUSVUI Ұͭͷ৴པͰ͖Διʔε 4UBUFJTSFBEPOMZ εςʔτ͸ಡΈऔΓ͚ͩɻΞΫγϣϯͰมߋ͢Δ $IBOHFTBSFNBEFXJUIQVSFGVODUJPO ७ਮؔ਺Ͱมߋ͢Δ https://redux.js.org/introduction/threeprinciples

Slide 21

Slide 21 text

Copyright © 2017 eureka, Inc. All rights reserved. 21 Single Source of truth "QQ4UBUF 6TFS4FBSDI4UBUF 1SPpMF&EJU4UBUF 1BSUOFS-JLF4UBUF

Slide 22

Slide 22 text

Copyright © 2017 eureka, Inc. All rights reserved. 22 Single Source of truth "QQ4UBUF let mainStore: Store = .init(reducer: App.reducer, state: nil, middleware: [App.middleware]) extension App { struct State: StateType { var userSearchState: UserSearch.State var profileEditState: ProfileEdit.State var partnerLikeState: PartnerLike.State } } - 6TFS4FBSDI4UBUF 1SPpMF&EJU4UBUF 1BSUOFS-JLF4UBUF

Slide 23

Slide 23 text

Copyright © 2017 eureka, Inc. All rights reserved. 23 State is read-only 6TFS4FBSDI 7JFX$POUSPMMFS 6TFS4FBSDI4UBUF 6TFS4FBSDI 7JFX$POUSPMMFS 6TFS4FBSDI4UBUF 4UPSFEJTQBUDI @

Slide 24

Slide 24 text

Copyright © 2017 eureka, Inc. All rights reserved. 24 State is read-only 6TFS4FBSDI 7JFX$POUSPMMFS 6TFS4FBSDI4UBUF 6TFS4FBSDI 7JFX$POUSPMMFS 6TFS4FBSDI4UBUF 6TFS4FBSDI3FEVDFS self.collectionView.rx .scrolledToEnd(offset: UserCell.preferredSize.height * 10) .subscribe( onNext: { _ in mainStore.dispatch(UserSearch.RequestUserAction(type: .append)) }) .disposeOnEnd()

Slide 25

Slide 25 text

Copyright © 2017 eureka, Inc. All rights reserved. 25 Changes are made with pure function "QQFOE6TFS"DUJPO 6TFS4FBSDI4UBUF "QQFOE6TFS"DUJPO 6TFS4FBSDI4UBUF 6TFS4FBSDI3FEVDFS

Slide 26

Slide 26 text

Copyright © 2017 eureka, Inc. All rights reserved. 26 Changes are made with pure function "QQFOE6TFS"DUJPO 6TFS4FBSDI4UBUF "QQFOE6TFS"DUJPO 6TFS4FBSDI4UBUF 6TFS4FBSDI3FEVDFS private static func userSearchReducer(action: Action, state: UserSearch.State?) -> UserSearch.State { var state: UserSearch.State = state ?? UserSearch.State() switch action { case let refreshed as UserSearch.RefreshDataSourceAction: state.dataSource = refreshed.makeDataSource() } return state }

Slide 27

Slide 27 text

Copyright © 2017 eureka, Inc. All rights reserved. What did Redux change? ReduxͰ։ൃ͸Ͳ͏มΘ͔ͬͨ

Slide 28

Slide 28 text

Copyright © 2017 eureka, Inc. All rights reserved. 28 ReduxͰ։ൃ͸Ͳ͏มΘ͔ͬͨʁ 7JFX$POUSPMMFS͔Βঢ়ଶΛ੾Γग़͢͜ͱ͕Ͱ͖ͨ جຊతʹ7JFXଆ͸4UBUFͷมԽΛਖ਼͘͠ϨΠΞ΢τʹ൓ө͍ͯ͠Δ͜ͱͩ ͚Λؾʹ͢Ε͹Α͘ͳͬͨ 4UBUFʹӨڹΛ༩͑͏ΔΠϕϯτ͕ܶతʹݟ΍͘͢ͳͬͨ SFEVDFS https://redux.js.org/introduction/threeprinciples

Slide 29

Slide 29 text

Copyright © 2017 eureka, Inc. All rights reserved. 29 Redux + Rxʹ͓͚Δ՝୊ 3FEVY͸Ϣʔβ୯Ґͷঢ়ଶ؅ཧʹ͸޲͔ͳ͍ʁ Ϣʔβ୯ҐͰ੾ΓସΘΔঢ়ଶΛ4UBUFͰͲ͏͔࣋ͭ

Slide 30

Slide 30 text

Copyright © 2017 eureka, Inc. All rights reserved. 30 Redux஫ҙ఺ ʮ4UBUF͕มΘͬͨʯ͜ͱΛͲ͏൑அ͢Δ͔ &RVBUBCMFͷద߹ɺDMBTTʹ஫ҙ Ӭԕʹ4UBUF͕ߋ৽͞Εଓ͚Δݒ೦ "DUJPOʹඥͮ͘ॲཧʹ͸޲͔ͳ͍ ࠙਌ձͰͲ͏΍ͬͯΔͷ͔ฉ͖͍ͨ 3PVUFSύλʔϯͳͲͱ૊Έ߹ΘͤΔʁ

Slide 31

Slide 31 text

Thank you IUUQTXXXOBTBHPWNJTTJPO@QBHFT/11OFXTFBSUIBUOJHIUIUNM