Slide 1

Slide 1 text

©2018 Wantedly, Inc. ϓϩϑΟʔϧฤूը໘ͷߏங δΣωϦΫεΛ࢖ͬͨϓϩϑΟʔϧը໘ͷߏங J04%$3FKFDU$POGFSFODF ٱอग़խढ़ 2018/09/18

Slide 2

Slide 2 text

©2018 Wantedly, Inc. ٱอग़խढ़ 8BOUFEMZͰ࿩Λฉ͖ʹߦ͘ମݧΛ࡞Δ8BOUFEMZ7JTJUͷΤϯδχΞͱͯ͠ಇ͍͍ͯ·͢ɻ ϢʔβʔάϩʔεʹϑΥʔΧε͍ͯͯ͠ɺϢʔβʔ਺΍ϢʔβʔମݧΛྑ͘͢ΔͨΊʹ೔ʑ౒ྗ͍ͯ͠·͢ɻ ओʹϞόΠϧΞϓϦͷ։ൃΛ͍ͯ͠·͢ɻ"OESPJE͕ओͰ͕͢ɺJ04΋͜͜൒೥΄ͲܞΘ͍ͬͯ·͢ɻ !TXJ[@BSE ࣗݾ঺հ

Slide 3

Slide 3 text

ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc. 8BOUFEMZ7JTJUJ04 ϦχϡʔΞϧ͠·ͨ͠

Slide 4

Slide 4 text

©2018 Wantedly, Inc. ϓϩϑΟʔϧฤूը໘ΛͲ͏࡞͔ͬͨ ϓϩτίϧ΍6*ʹδΣωϦΫεΛ࢖ͬͯ൚༻తʹߏங͢Δ͜ͱͰɺ࣮૷ίε τΛԼ͛Δ͜ͱ͕Ͱ͖ͨͱ͍͏࿩Λ͠·͢ɻ υϝΠϯʹڧ͘ґଘ͍ͯ͠ΔͷͰɺԠ༻͕͋·Γޮ͘࿩Ͱ͸ͳ͍͔΋͠Ε· ͤΜɻ ࠓ೔࿩͢͜ͱ

Slide 5

Slide 5 text

©2018 Wantedly, Inc. J04ΞϓϦϦχϡʔΞϧ

Slide 6

Slide 6 text

©2018 Wantedly, Inc. ͳͥϦχϡʔΞϧ͔ͨ͠ ҎԼͷΑ͏ͳ՝୊͕͋ͬͨ w ΞϓϦͰͷ࿩Λฉ͖ʹߦ͘·Ͱͷମݧͷվળ w ΦϯϘʔσΟϯάϑϩʔͷվળ w σβΠϯͷ࡮৽ w ϝϯςφϯείετͷߴ͔ͬͨίʔυͷ࡮৽ ϦχϡʔΞϧͷܦҢ

Slide 7

Slide 7 text

©2018 Wantedly, Inc. w 4UPSZCPBSEະ࢖༻ • AutoLayoutʹ͸SnapKit • ࠓճͷ࿩͸StoryboardͰ͸࢖͑ͳ͍৔߹͋Γ w 3FBDUPS,JU • RxΛ࢖ͬͨ୯ํ޲σʔλϑϩʔΞʔΩςΫνϟ લఏ஌ࣝ

Slide 8

Slide 8 text

ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc. ͱΓ࣮͋͑ͣ૷ͩ

Slide 9

Slide 9 text

ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc.

Slide 10

Slide 10 text

©2018 Wantedly, Inc. ฤूը໘ͷ՝୊

Slide 11

Slide 11 text

©2018 Wantedly, Inc. ฤूը໘ w ߲໨͋Δ w Ϧετܥ͸߲໨ w Ϧετܥ͸։ดͰ͖Δ w ߲໨͝ͱʹϓϥΠόγʔઃఆΛมߋͰ͖Δ ϓϩϑΟʔϧฤूͷ࢓༷ ϦϯΫΛ։͍ͨঢ়ଶ ͢΂ͯดͨ͡ঢ়ଶ

Slide 12

Slide 12 text

©2018 Wantedly, Inc. ࣅͯΔ͚Ͳத਎͕ҧ͏7JFX w ը໘શମ͸6*4UBDL7JFXʹͳ͍ͬͯͯɺࣗݾ঺հ ΍৬ྺɺֶྺͳͲ߲໨͕"SSBOHFE4VCWJFXͱ ͯ͠ฒΜͰ͍Δɻ w ͭͭͷ7JFX͕ελΠϧ͸ಉ͚ͩ͡Ͳදࣔ͢Δ ಺༰͕߲໨ʹΑͬͯҟͳ͍ͬͯΔɻ w λοϓ࣌ʹ։͘ը໘΋͢΂ͯҟͳΔɻ w ͭͭΧελϜ7JFXΫϥεԽ͢Δͷ͸ϘΠϥʔ ϓϨʔτ͕૿࣮͑ͯ૷ίετ͕ߴͦ͏ɻ ՝୊఺ ϦϯΫ ࣗݾ঺հ ޷͖ͳݴ༿ ৬ྺ ֶྺ ελΠϧ͸ಉ͚ͩ͡Ͳ த਎͕શ෦ҧ͏ UIStackView

Slide 13

Slide 13 text

ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc. δΣωϦΫε࢖͑ͦ͏

Slide 14

Slide 14 text

©2018 Wantedly, Inc. w ൚༻తʹςΩετͳͲΛઃఆͰ͖Δ7JFXΛ࡞Δ w ΞΠίϯɺλΠτϧɺৄࡉςΩετɺΞΫηαϦΞΠίϯʢӈΞΠίϯʣ w ϦετΛ؅ཧ͢Δίϯςφ7JFXΛ࡞Δ w ͜͜ʹδΣωϦΫεΛ࢖͍ɺ֨ೲͰ͖ΔܕΛܾΊΔΑ͏ʹͨ͠ w ։ดͷॲཧ͸͜ͷ7JFXͰ΍Δ w ։͍͍ͯΔ৔߹͸ߴ͞Մมͷ$PMMFDUJPO7JFXΛදࣔ͢Δ ͱͬͨख๏

Slide 15

Slide 15 text

©2018 Wantedly, Inc. ͱͬͨख๏ ϦετΛ؅ཧ͢ΔίϯςφView ProfileEditExpandableItemsView ൚༻తͳView ProfileEditItemView

Slide 16

Slide 16 text

©2018 Wantedly, Inc. Ϧετܥ؅ཧ7JFXଞͷ7JFX

Slide 17

Slide 17 text

©2018 Wantedly, Inc. Ϧετܥ؅ཧ7JFX7JFX֊૚

Slide 18

Slide 18 text

©2018 Wantedly, Inc. Ϧετܥ؅ཧ7JFXσʔλ͔Β7JFXߋ৽

Slide 19

Slide 19 text

©2018 Wantedly, Inc. Ϧετܥ؅ཧ7JFXσʔλ͔Β$FMMߋ৽ͱίʔϧόοΫ CollectionViewͱCell

Slide 20

Slide 20 text

©2018 Wantedly, Inc. ฤूը໘ͷ࣮ྫ ৬ྺͷྫ

Slide 21

Slide 21 text

©2018 Wantedly, Inc. ৬ྺͷ7JFXߋ৽ྫ

Slide 22

Slide 22 text

©2018 Wantedly, Inc. ৬ྺͷ$BMMCBDLྫ

Slide 23

Slide 23 text

©2018 Wantedly, Inc. ΞΠςϜฤूը໘ͷ՝୊

Slide 24

Slide 24 text

©2018 Wantedly, Inc. ΞΠςϜฤूը໘ w ߲໨ͦΕͧΕʹը໘ w Ϧετܥ͸௥ՃͱฤूϞʔυ͕͋Δ w όϦσʔγϣϯ͕͋Δ w ը໘͝ͱʹϑΥʔϜ͕ҟͳΔ ϓϩϑΟʔϧฤूͷ࢓༷ ௥ՃϞʔυ ฤूϞʔυ

Slide 25

Slide 25 text

©2018 Wantedly, Inc. ը໘࡞Βͳ͍ͱ͍͚ͳ͍ w อଘϘλϯɺด͡ΔϘλϯɺอଘதͷΠϯδέʔ λ͸ڞ௨ w ฤूϑΥʔϜ͸߲໨ʹΑͬͯશ͘ҧ͏ w όϦσʔγϣϯ΋ҧ͏ w ୟ͘ߋ৽"1*΋ҟͳΔ΋ͷ͕͋Δ w Ϧετܥͷ΋ͷ͸࡟আ͕Ͱ͖Δ ՝୊఺ ֶྺ ৬ྺ

Slide 26

Slide 26 text

ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc. ڞ௨෦෼Λ਌ ͦΕҎ֎Λࢠ✕̍̒Ͱ࡞Ζ͏

Slide 27

Slide 27 text

©2018 Wantedly, Inc. w ڞ௨෦෼͸਌΁ w ਌7JFX$POUSPMMFSͰ7JFXͱঢ়ଶͷ؅ཧ w ࢠͷঢ়ଶΛ0CTFSWFͯ͠อଘϘλϯͷঢ়ଶมߋͳͲ͢Δ w อଘ"1*ίʔϧ͸ࢠͷΠϯλʔϑΣʔεΛݺΜͰࢠͷํͰߦ͏ w ϑΥʔϜ΍όϦσʔγϣϯ͸ࢠ΁ w όϦσʔγϣϯͳͲͷೖྗঢ়ଶ؅ཧ͸ࢠͰߦ͏ w ࢠͷQSPUPDPMʹ४ڌͤ͞Δ ͱͬͨख๏ ਌ ࢠ✕̍̒

Slide 28

Slide 28 text

©2018 Wantedly, Inc. ਌7JFX$POUSPMMFSͱ3FBDUPS w DMBTT1SPpMF*UFN&EJU7JFX$POUSPMMFS7JFX$POUSPMMFS*UFN&EJU7JFX$POUSPMMFS w DMBTT1SPpMF*UFN&EJU3FBDUPS*UFN3FBDUPS*UFN&EJU3FBDUPS ࢠ7JFX$POUSPMMFSͱ3FBDUPS w QSPUPDPM*UFN&EJU7JFX$POUSPMMFS7JFXXIFSF3FBDUPS*UFN&EJU3FBDUPS w QSPUPDPM*UFN&EJU3FBDUPS3FBDUPSXIFSF4UBUF*UFN&EJU3FBDUPS4UBUF w QSPUPDPM*UFN&EJU3FBDUPS4UBUF&EJUBCMF ܕͷఆٛ

Slide 29

Slide 29 text

©2018 Wantedly, Inc. ✕ ࢀরͱδΣωϦΫε ࢀর Observable δΣωϦΫεͷܕ ਌3FBDUPS ࢠ3FBDUPS ਌7JFX$POUSPMMFS ࢠ7JFX$POUSPMMFS ࢠ3FBDUPS ࢠ7JFX$POUSPMMFS &EJUBCMF

Slide 30

Slide 30 text

©2018 Wantedly, Inc. Editable

Slide 31

Slide 31 text

©2018 Wantedly, Inc. Editable - ྫ Entityͷఆ͔ٛΒ SourceryͰEditableΛੜ੒͍ͯ͠Δ

Slide 32

Slide 32 text

©2018 Wantedly, Inc. ࢠReactorͱStateͷprotocol

Slide 33

Slide 33 text

©2018 Wantedly, Inc. ਌Reactor

Slide 34

Slide 34 text

©2018 Wantedly, Inc. ਌Reactor - ਌ࢠͷ࿈ܞ submit updateSingle state (button.isEnabled) state (Valid, Changed)

Slide 35

Slide 35 text

©2018 Wantedly, Inc. ਌ViewController - Viewߏ੒

Slide 36

Slide 36 text

©2018 Wantedly, Inc. ਌ViewController - Reactorͷbind action update views

Slide 37

Slide 37 text

©2018 Wantedly, Inc. ߲໨ฤूը໘ͷ࣮ྫ ৬ྺͷྫ

Slide 38

Slide 38 text

©2018 Wantedly, Inc. ৬ྺͷྫ - ࢠReactor ςΩετߋ৽࣌ʹ ͜ͷAction͕౤͛ΒΕΔ

Slide 39

Slide 39 text

©2018 Wantedly, Inc. ৬ྺͷྫ - ࢠReactorͷߋ৽APIݺͼग़͠ submit updateSingle

Slide 40

Slide 40 text

©2018 Wantedly, Inc. ৬ྺͷྫ - ViewController όϦσʔγϣϯΤϥʔͷදࣔ

Slide 41

Slide 41 text

©2018 Wantedly, Inc. ·ͱΊ

Slide 42

Slide 42 text

©2018 Wantedly, Inc. w 6*ʹ΋δΣωϦΫε͸ར༻Ͱ͖Δ w ֎࿮͸ಉ͚ͩ͡Ͳத਎΍$FMM͕ҧ͏ύλʔϯͳͲͰ༗ޮ w ৼΔ෣͍Λϓϩτίϧ΍ΫϩʔδϟͰҕৡ͢Δ w ΠϕϯτίʔϧόοΫ࣌ʹܕ҆શʹΦϒδΣΫτΛॲཧͰ͖Δ w ͞ΒͳΔվળ w 6*Ͱͳ͘ΦϒδΣΫτʹ1SPUPDPMΛద༻͢Δ͜ͱͰࣅͨΑ͏ͳ࣮૷͸Մೳ w ΋͏গ͠ந৅ԽͰ͖͔ͨ΋ w 4UPSZCPBSEͰ͸δΣωϦΫε͕࢖͑ͳ͍ͷͰΧελϜ7JFXʴ1SPUPDPMͷ΄͏͕ॊೈ͔΋ ·ͱΊ

Slide 43

Slide 43 text

ϖʔδλΠτϧ ϖʔδαϒλΠτϧ ©2018 Wantedly, Inc.