ɹɹWhy use Redux in iOSɹɹɹiOS Flux/Reduxษڧձ2018/03/[email protected]Yohei Suginami ( @susieyy )
View Slide
Profile— Yohei Sugigami— susieyy— Twitter / Qiita / Github— New app developmentspecialist— Clients— Folio.inc— New app developer— Wantedly.inc— Technical advisor
ɹɹɹɹFlux/ReduxΓ্͕ͬͯ·͢Ͷʂ
ɹɹɹɹϨΩγΛৼΓฦΔ
ɹɹɹɹຊͰ࠾༻ࣄྫ͕૿͑ͯ·͢Ͷʂ
ɹɹͳͥReduxͳͷ͔
ɹɹΞϓϦ։ൃʹ͓͚Δ࠷େͷ՝ɹɹɹ
ɹɹෳࡶͰ͋Δ͜ͱ
Ͳ͏γϯϓϧʹམͱ͠ࠐΉ͔ɹɹɹɹɹɹɹѲɾཧͰ͖ΔΑ͏ʹ͢Δ͔
ΞϓϦ։ൃʹ͓͚Δෳࡶੑͱखଓ͖తهड़ʹΑΔॲཧͷྲྀΕͷѲͷ͠ʹ͘͞— σϦήʔτύλʔϯͷίʔϧόοΫࠈ— ϑΝοτίϯτϩʔϥʔ
ΞϓϦ։ൃʹ͓͚ΔෳࡶੑͱӨڹൣғͷෆ͔֬͞ɺہॴԽ͞ΕͣҬͳӨڹൣғ— γϯάϧτϯʢάϩʔόϧมͷଟ༻ʣ
ΞϓϦ։ൃʹ͓͚Δෳࡶੑͱଟ༷ͳঢ়ଶͷදݱͷͨΊʹଟͷذͱଟͷมͷग़ݱ— ม͕มԽ͢ΔཁҼ͕ࡏԽ— ݅ذʹ্༷ભҠ͠ͳ͍ܦ࿏ؚ·ΕΔ
ॾѱͷࠜݯMVCෳࡶੑͷղܾࡦΛMVCʹมΘΔΞʔΩςΫνϟٻΊͨ— MVVMʢCʣʴFRP— CleanAcrhitecture / Viper— Flux / Redux
MVVMʢCʣʴFRPෳࡶੑͷରቂ— ϦΞΫςΟϒͳؔʹநԽ͠ɺతͰએݴతͳهड़— ࿈ଓ͢Δ૬ޓ࡞༻Λѻ͍͍͢— ঢ়ଶอ࣋ͷͨΊͷมΛݮ— ↑ RxͷετϦʔϜʹแ— ඇಉظΛབྷΊͨॲཧͷՄಡੑߴ͍දݱྗ— εϐʔυײ͋Δ։ൃ
MVVMʢCʣʴFRPσϝϦοτ— ߴ͍ͷநԽʹΑΔهड़қͷ্ঢ— ෳࡶͳRxͷΦϖϨʔλʔΛۦ͢Δ͜ͱͰ͔͑ͬͯڍಈ͕Θ͔Γʹ͍͘— ϚϧνεϨουͳॲཧ֤ετϦʔϜͰಠཱతʹಈ࡞͢Δ— هड़ྗߴ͍͕ಈ࡞ͷѲɾσόοά͠ʹ͍͘
CleanAcrhitecture / Viperෳࡶੑͷରቂ— ΦϒδΣΫτࢦͷׂͰγϯϓϧʹམͱ͠ࠐΉ— ϨΠϠʔׂɾґଘͷࢦੑ— ϨΠϠʔͷΠϯλʔϑΣΠεͱ࣮ͷʹΑΔநԽ— νʔϜεέʔϥϏϦςΟͷ্
CleanAcrhitecture / ViperσϝϦοτ— ʹΑΔهड़ྔ͕૿͑Δίʔυ— ։ൃεϐʔυͷݮ— ঢ়ଶͱखଓ͖ΛΧϓηϧԽʹΑΔγϯϓϧԽͷݶք
ɹɹReduxͱԿ͔
Մಡੑͷ্ॻ͘ίετΑΓɺಡΉίετΛԼ͛Δ— ಡΈ͘͢ɺΓ͍ͨ͜ͱɾॲཧ͕Ѳ͍͢͠— Өڹൣғ͕ਪఆ͍͢͠— ϨϏϡʔ͍͢͠— εϐʔυײ͋Δ։ൃ— ΞϓϦنͱνʔϜߏͷεέʔϥϏϦςΟͷ্
Viewͱঢ়ଶͷશͳΔ— ViewͷॲཧͰͦͷॠؒͷΞϓϦͷͯ͢ͷঢ়ଶʢState)͕ҰҙͰ͋Δ͜ͱΛอূ͞ΕΔ— StateΠϛϡʔλϒϧ— ͦͷॠؒͷঢ়ଶʹରͯ͠ඇಉظͷհೖ͕ͳ͍— ViewʹStateΔͱදࣔҰҙʹܾ·Δ— View͕ؔܕࢦʹͳΔ
७ਮؔ— ೖྗʹରͯ݁͠Ռ͕ҰҙͰ͋Δ— ϓϩάϥϛϯάʹ͓͍ͯϩδοΫΛγϯϓϧѻ͏ͨΊͷۃΈ— ෭࡞༻ഉআͱ— ςελϏϦςΟ্
Ϛγϯύϫʔ্͕͕ͬͨ͜ͱʹΑΔ߽తͳΞʔΩςΫνϟϚγϯύϫʔΛ͏·͘ར༻͢Δ͜ͱͰγϯϓϧΛ࣮ݱ͍ͯ͠ΔॲཧͷྻԽ- ϝΠϯεϨου্ͰϏδωεϩδοΫ(ߋ৽ॲཧ)ͷಈ࡞- γϯάϧϝΠϯεϨου͚ͩͰಈ࡞͍ͯ͠ΔΑ͏ͳײ֮ͰΞϓϦ͕ॻ͚ΔViewͷޮతͳߋ৽ͷͨΊͷࠩݕίετ- ϏδωεϩδοΫॲཧޙͷViewͷӨڹൣғΛؔ͠ͳ͍
Swi!ݴޠͱͷ૬ੑͷྑ͞— TypeSafe— Struct / Immutable— ComputedProperty— Enum / PatternMatch— Generics— Functional Oriented— Protocol Oriented
σόοά༰қੑɹDEMO
Redux՝— ΞΫγϣϯͷॱংੑΛ੍͚͍ͮͨʢεςʔτϚγϯʣ— Actionϧʔϓ— StateͷΠχγϟϥΠζͱΦϓγϣϯφϧ— ϝϞϦϚωδϝϯτʢը໘ഁغ࣌ʹ෦Stateͷഁغʣ— Viewͷޮతͳߋ৽ͷͨΊͷࠩߋ৽ʢվળͷ༨͋Γʣ
ReduxۜͷؙͰͳ͍ɹɹɹదࡐ͔Ͳ͏͔ɹɹɹɹɹΞϓϦཁ݅ɺ࣭ཁ݅ɹɹɹɹνʔϜߏɺ։ൃظؒ࣍ୈɹɹ
·ͱΊReduxඇৗʹݫ֨ɾݎ࿚Ͱ͋ΓγϯϓϧͳϩδοΫܗ— ७ਮؔ— Πϛϡʔλϒϧ— ୯Ұࢦੑϑϩʔ ʢ ϚϧνεϨουͷہॴԽ ʣ— ෭࡞༻ʢඇಉظॲཧʣͷہॴԽ
߹ΘͤͯಡΈ͍࣮ͨફฤɹRedux+RxΛ׆༻ͨ͠ΞϓϦΞʔΩςΫνϟCA.swi! #52018/01/[email protected]גࣜձࣾαΠόʔΤʔδΣϯτYohei Suginami ( @susieyy )