Slide 1

Slide 1 text

ϚωʔϑΥϫʔυͷઃܭ΁ͷΞϓϩʔν CAMPFIRE iOS #1 2017/03/16 גࣜձࣾϚωʔϑΥϫʔυ ࣇۄ޹ଠ࿠

Slide 2

Slide 2 text

ࣗಈՈܭ฽ɾࢿ࢈؅ཧαʔϏεʰϚωʔϑΥϫʔυʱ iOS, AndroidΞϓϦ։ൃΛ୲౰͍ͯ͠·͢ ࣇۄ޹ଠ࿠!LPVUBMPV ΤϯδχΞ ࣗݾ঺հ

Slide 3

Slide 3 text

಺༰ 1 "SDIJUFDUVSFʹ͍ͭͯ 2 "SDIJUFDUVSFͷબఆ 3 $MFBO"SDIJUFDUVSF΁ͷऔΓ૊Έ

Slide 4

Slide 4 text

1 2 "SDIJUFDUVSFͷબఆ 3 $MFBO"SDIJUFDUVSF΁ͷऔΓ૊Έ 2 3 "SDIJUFDUVSFʹ͍ͭͯ ಺༰

Slide 5

Slide 5 text

طଘͷ"SDIJUFDUVSF .7$"SDIJUFDUVSF .71 .77. "SDIJUFDUVSF

Slide 6

Slide 6 text

طଘͷ"SDIJUFDUVSF 7*1&3"SDIJUFDUVSF %%%"SDIJUFDUVSF

Slide 7

Slide 7 text

$MFBO"SDIJUFDUVSF 7JFX 1SFTFOUFS 6TF$BTF 5SBOTMBUPS .PEFM %BUB4UPSF &OUJUZ 3FQPTJUPSZ 1SFTFOUBUJPO-BZFS %PNBJO-BZFS %BUB-BZFS w ੹຿Λࡉ෼Խ͢Δ͜ͱͰɺ֤ϨΠϠ͕ԿΛ୲౰͢Δ͔໌֬ʹͳΔ w 6*ͱϏδωεϩδοΫΛ෼཭Ͱ͖ɺϨΠϠؒͷґଘΛ࠷খݶʹͰ͖Δ w ϨΠϠؒ͸ૄ݁߹ͳͷͰϞδϡʔϧͷஔ͖׵͑ɺςετ͕༰қ

Slide 8

Slide 8 text

$MFBO"SDIJUFDUVSFͷ1SPT$POT ɹQSPT w ಛఆͷ-BZFSͷංେԽΛ๷͛Δ w ݴޠԽ͞Εͨఆ͕ٛ͋ΔͷͰڞ௨ͷઃܭҙ͕ࣝ࣋ͯΔ w ੹຿͕ࡉ෼Խ͞Ε͍ͯΔͷͰϝϯς͠΍͍͢
 DPOT w ίʔυྔɺϑΝΠϧ਺͕ଟ͍ w ֶशίετ͕ߴ͍

Slide 9

Slide 9 text

औΓ૊Έ "SDIJUFDUVSFʹ͍ͭͯ 2 "SDIJUFDUVSFͷબఆ $MFBO"SDIJUFDUVSF΁ͷऔΓ૊Έ 1 3

Slide 10

Slide 10 text

Α͋͘ΔΞʔΩςΫνϟͷ໰୊ w ౓ॏͳΔ࢓༷มߋ΍ෳࡶͳ࢓༷ʹରԠ͢ΔͨΊʹ7JFX$POUSPMMFS΍
 ಛఆͷ.PEFM͕ංେԽ͠ɺϏδωεϩδοΫͷຊ࣭Λݟࣦ͏ w ಛఆͷϨΠϠ͕ෳ਺ͷ੹຿Λ࣋ͪґଘ౓ͷߴ͍ෳࡶͳίʔυ͕ੜ·ΕΔ ΤϯδχΞ ΤϯδχΞ ΤϯδχΞ ͍͢͝࢓༷มߋͩɺɺ ·ͨViewController͕๲ΒΉ ϏδωεϩδοΫ͜Μͳ ॻ͖ํͪ͠Ό͏Μͩɾɾ Model͕͍ΖΜͳॲཧΛ ؚΊͯෳࡶ͗͢Δɾɾ → VIPER΍Clean ArchitectureΛݕ౼ͯ͠΋ྑ͍

Slide 11

Slide 11 text

໰୊Λײ͍ͯ͡ͳ͍έʔε w গਓ਺Ͱن໛ͷখ͞ͳΞϓϦέʔγϣϯ͸ɺશ༰Λ೺Ѳ͠΍͍͢ w εϞʔϧελʔτͳͲͰ·ͣಈ͘΋ͷΛ࡞Γ͍ͨ w ϩδοΫ͕γϯϓϧͰಛʹෳࡶͳॲཧ͕ଘࡏ͠ͳ͍ ΤϯδχΞ ΤϯδχΞ ΤϯδχΞ ҰਓͰ։ൃ͢Δ͠ɺ ͦΜͳʹن໛΋େ͖͘ͳ͍ ͱʹ͔͘εϐʔυײॏࢹ ·ͣ͸ϞϊΛ࡞Γ͍ͨ ΞϓϦέʔγϣϯͷ ϩδοΫ͕ෳࡶͰ͸ͳ͍ → VIPER΍Clean Architecture͸޲͍͍ͯͳ͍

Slide 12

Slide 12 text

"1*ʹΑΔෳࡶੑʹ͍ͭͯ ͭͷը໘Ͱෳ਺ͷ"1*͔ΒσʔλΛऔಘ͢Δ৔߹ɺ 7JFXͰ࢖͏.PEFM΁ม׵͕ඞཁʹͳΓϩδοΫ͸ෳࡶʹͳΓ͕ͪ "1* "1* "1* "1* "1* → Clean ArchitectureΛݕ౼ͯ͠΋ྑ͍

Slide 13

Slide 13 text

ը໘"1*ͷΑ͏ͳ৔߹ɺ3FTQPOTF͕7JFXͷ.PEFMͱͯ͠ ࢖͑Δέʔε͕ଟ͍ͨΊϩδοΫ͸γϯϓϧʹͳΔ "1* "1* "1*ʹΑΔෳࡶੑʹ͍ͭͯ → Clean Architecture͸ෆ޲͖ɺVIPER͸ݕ౼ͯ͠΋ྑ͍

Slide 14

Slide 14 text

"SDIJUFDUVSFͷબఆ w ௕ظతͳ։ൃɺϝϯςφϯε͕ඞཁ͔ w ୯ಠ։ൃ͔։ൃϝϯόʔ͸ଟ͘ྲྀಈత͔ w αʔόଆͷϦιʔε͕े෼Ͱ$MJFOU͸γϯϓϧʹͰ͖Δ͔ w $MJFOUଆͰෳࡶͳϩδοΫΛ࣋ͨ͟ΔΛಘͳ͍͔ ϓϩδΣΫτͷঢ়گ΍ϝϯόʔɺ αʔόଆ΋ؚΊͨશମͷγεςϜΛߟྀͯ͠
 "SDIJUFDUVSFΛબఆ͢΂͖

Slide 15

Slide 15 text

3 $MFBO"SDIJUFDUVSF΁ͷऔΓ૊Έ "SDIJUFDUVSFʹ͍ͭͯ 1 2 "SDIJUFDUVSFͷબఆ 2 ಺༰

Slide 16

Slide 16 text

νʔϜͰ"SDIJUFDUVSFΛڞ༗ 7JFX 1SFTFOUFS 6TF$BTF 5SBOTMBUPS .PEFM %BUB4UPSF &OUJUZ 3FQPTJUPSZ 1SFTFOUBUJPO-BZFS %PNBJO-BZFS %BUB-BZFS "QQMJDBUJPO-BZFS #VJMEFS 8JSFGSBNF νʔϜͰݴޠԽ͞Εͨఆ͕ٛ͋Δ͜ͱ͕ॏཁ ఆ͕ٛͳ͍ͱɺ։ൃऀʹΑͬͯཧղ΍ҙݟ͕όϥόϥʹͳͬͯ͠·͏

Slide 17

Slide 17 text

࣮૷ํ਑ 1SFTFOUBUJPO %PNBJO %BUB-BZFS͸શͯQSPUPDPMΛఆٛ "QQMJDBUJPO-BZFSͰ*NQMFNFOUBUJPOΛ%*͢Δ 7JFX 1SFTFOUFS 6TF$BTF 5SBOTMBUPS .PEFM %BUB4UPSF &OUJUZ 3FQPTJUPSZ 1SFTFOUBUJPO-BZFS %PNBJO-BZFS %BUB-BZFS "QQMJDBUJPO-BZFS #VJMEFS 8JSFGSBNF

Slide 18

Slide 18 text

࣮૷ํ਑ 1SFTFOUBUJPO %PNBJO %BUB-BZFS͸શͯQSPUPDPMΛఆٛ "QQMJDBUJPO-BZFSͰ*NQMFNFOUBUJPOΛ%*͢Δ 7JFX 6TF$BTF 5SBOTMBUPS .PEFM %BUB4UPSF &OUJUZ 3FQPTJUPSZ 1SFTFOUFS

Slide 19

Slide 19 text

࣮૷ํ਑ 1SFTFOUBUJPO %PNBJO %BUB-BZFS͸શͯQSPUPDPMΛఆٛ "QQMJDBUJPO-BZFSͰ*NQMFNFOUBUJPOΛ%*͢Δ

Slide 20

Slide 20 text

'SBNFXPSLԽ ֤ϨΠϠΛ'SBNFXPSLͰ෼ׂ -BZFSؒΛૄ݁߹ɺґଘؔ܎Λ࠷খݶʹ͢ΔͨΊʹಋೖ 7JFX 6TF$BTF 5SBOTMBUPS .PEFM %BUB4UPSF &OUJUZ 3FQPTJUPSZ 1SFTFOUFS w 7JFX1SFTFOUFS૚ w %PNBJO%PNBJO૚ w %BUB%BUB૚ w $PSF௨৴ͳͲͷج൫෦ w 4UZMF6*$PNQPOFOUͷڞ௨ఆٛ w 6UJMJUZศརػೳͷू߹

Slide 21

Slide 21 text

'SBNFXPSLԽ ֤ϨΠϠΛ'SBNFXPSLͰ෼ׂ -BZFSؒΛૄ݁߹ɺґଘؔ܎Λ࠷খݶʹ͢ΔͨΊʹಋೖ 7JFX 6TF$BTF 5SBOTMBUPS .PEFM %BUB4UPSF &OUJUZ 3FQPTJUPSZ 1SFTFOUFS %PNBJO %BUB $PSF 6UJMJUZ 4UZMF 7JFX

Slide 22

Slide 22 text

4UZMF(VJEF"QQ 'SBNFXPSLʹ͢Δ͜ͱͰڞ௨ԽͰ͖ .POFZ'PSXBSEΞϓϦʹ΋ͦͷ··࢖͑Δ Money Forward App Style Guide App Style Framework

Slide 23

Slide 23 text

4UZMF(VJEF"QQ Money Forward App Style Guide App Style Framework 'SBNFXPSLʹ͢Δ͜ͱͰڞ௨ԽͰ͖ .POFZ'PSXBSEΞϓϦʹ΋ͦͷ··࢖͑Δ

Slide 24

Slide 24 text

6*$PNQPOFOUͷڞ௨Խ 4UPSZCPBSEͰઃఆ͢Δ6*$PNQPOFOUʹ௚઀ઃఆ஋ΛೖΕͨ͘ͳ͍ ͚Ͳ4UPSZCPBSE্Ͱ൓ө͞Εͯ΄͍͠ /PSJ ίʔυͰ4UPSZCPBSEͷ 7JFXΛσβΠϯ͢Δ !ZVLJBTBJ IUUQTHJUIVCDPNZVLJBTBJ/PSJ

Slide 25

Slide 25 text

ςϯϓϨʔτͷࣗಈੜ੒ $MFBO"SDIJUFDUVSF͸ϑΝΠϧ͕ଟ͘ͳΔͷͰɺ ςϯϓϨʔτΛࣗಈੜ੒͢Δͱ͔ͳΓָ IUUQTHJUIVCDPNCBOO[BJ,VSJ ,VSJ 9DPEF1SPKFDUʹ $MFBO"SDIJUFDUVSFͷ ςϯϓϨʔτΛࣗಈੜ੒ͯ͘͠ΕΔ !CBOO[BJ

Slide 26

Slide 26 text

$MFBO"SDIJUFDUVSF΁ͷஔ͖׵͑ Ұؾʹશͯ࡞Γ௚͠ͷΑ͏ͳϦϑΝΫλ͸ͤͣɺ ը໘୯ҐͰঃʑʹ$MFBO"SDIJUFDUVSF΁ஔ͖׵͑

Slide 27

Slide 27 text

$MFBO"SDIJUFDUVSF΁ͷஔ͖׵͑ 7JFX 1SFTFOU 6TF$BT 5SBOTMB .PEFM %BUB4U &OUJUZ 3FQPTJU Ұؾʹશͯ࡞Γ௚͠ͷΑ͏ͳϦϑΝΫλ͸ͤͣɺ ը໘୯ҐͰঃʑʹ$MFBO"SDIJUFDUVSF΁ஔ͖׵͑

Slide 28

Slide 28 text

$MFBO"SDIJUFDUVSF΁ͷஔ͖׵͑ 7JFX 1SFTFOU 6TF$BT 5SBOTMB .PEFM %BUB4U &OUJUZ 3FQPTJU Ұؾʹશͯ࡞Γ௚͠ͷΑ͏ͳϦϑΝΫλ͸ͤͣɺ ը໘୯ҐͰঃʑʹ$MFBO"SDIJUFDUVSF΁ஔ͖׵͑ 7JFX 1SFTFOU 6TF$BT 5SBOTMB .PEFM %BUB4U &OUJUZ 3FQPTJU

Slide 29

Slide 29 text

$MFBO"SDIJUFDUVSF΁ͷஔ͖׵͑ 7JFX 1SFTFOU 6TF$BT 5SBOTMB .PEFM %BUB4U &OUJUZ 3FQPTJU Ұؾʹશͯ࡞Γ௚͠ͷΑ͏ͳϦϑΝΫλ͸ͤͣɺ ը໘୯ҐͰঃʑʹ$MFBO"SDIJUFDUVSF΁ஔ͖׵͑ 7JFX 1SFTFOU 6TF$BT 5SBOTMB .PEFM %BUB4U &OUJUZ 3FQPTJU 7JFX 1SFTFOU 6TF$BT 5SBOTMB .PEFM %BUB4U &OUJUZ 3FQPTJU

Slide 30

Slide 30 text

ඇϑϨʔϜϫʔΫґଘ ɹ-BZFSؒΛ௒͑ΔΑ͏ͳϑϨʔϜϫʔΫʹґଘͤ͞ͳ͍ w ௨৴૚΋-BZFSͰ෼͚ͯ63-4FTTJPOΛ࢖༻ w "MBNPpSF΍"1*,JU͸ա౓ͳػೳΛ࣋ͭͷͰ࢖Θͳ͍ w 6*ܥͷϥΠϒϥϦ͸-BZFSΛ௒͑ͳ͍΋ͷʹݶΔ w ྫ֎Ͱ3Y4XJGUΛಋೖ

Slide 31

Slide 31 text

3Y4XJGUͷ1SPT$POT ɹQSPT w 6TF$BTF૚Ͱͷ1SPNJTFॲཧͷهड़͕༰қ w 3FQPTJUPSZ૚ҎԼͷ*'ΛετϦʔϜͰهड़ w ը໘ؒ&WFOU௨஌ͷ.VMUJ$BTUΛετϦʔϜͰ࣮૷Մ
 DPOT w ࠜװ෦Λ3Y4XJGUͷෆ۩߹΍ϝϯςφϯεঢ়گʹґଘ w 3Y4XJGUࣗମͷֶशίετ

Slide 32

Slide 32 text

1SPUPDPM0SJFOUFE1SPHSBNNJOH ɹ1SPUPDPM0SJFOUFE1SPHSBNNJOHΛҙࣝ͢Δ w QSPUPDPMΛ࢖ͬͨ*'ʹΑΔ࠷খݶͷґଘؔ܎ w QSPUPDPMʹ४ڌ࣮ͨ͠૷͸FYUFOTJPOͰهड़ w DMBTT͸ۃྗ࢖ΘͣTUSVDUͰ࣮૷͢Δ

Slide 33

Slide 33 text

1SPUPDPM0SJFOUFE1SPHSBNNJOH ɹ1SPUPDPM0SJFOUFE1SPHSBNNJOHΛҙࣝ͢Δ w QSPUPDPMΛ࢖ͬͨ*'ʹΑΔ࠷খݶͷґଘؔ܎ w QSPUPDPMʹ४ڌ࣮ͨ͠૷͸FYUFOTJPOͰهड़ w DMBTT͸ۃྗ࢖ΘͣTUSVDUͰ࣮૷͢Δ

Slide 34

Slide 34 text

1SPUPDPM0SJFOUFE1SPHSBNNJOH 1SFTFOUFS 6TF$BTF 5SBOTMBUPS .PEFM %BUB4UPSF &OUJUZ 3FQPTJUPSZ TUSVDU DMBTT 7JFX ɹ1SPUPDPM0SJFOUFE1SPHSBNNJOHΛҙࣝ͢Δ w QSPUPDPMΛ࢖ͬͨ*'ʹΑΔ࠷খݶͷґଘؔ܎ w QSPUPDPMʹ४ڌ࣮ͨ͠૷͸FYUFOTJPOͰهड़ w DMBTT͸ۃྗ࢖ΘͣTUSVDUͰ࣮૷͢Δ

Slide 35

Slide 35 text

Ϟδϡʔϧͷڞ༗ Ұ෦ͷϞδϡʔϧΛஔ͖׵͑Δ͚ͩͰ৭Μͳը໘ʹରԠՄೳ HomeTimelinePresenterImpl UserTimelinePresenterImpl 7JFX 1SFTFOUFS 6TF$BTF 5SBOTMBUPS .PEFM %BUB4UPSF &OUJUZ 3FQPTJUPSZ 1SFTFOUFSͷΈϞδϡʔϧ͕ҟͳΔྫ

Slide 36

Slide 36 text

ςετͷ༰қੑ RepositoryMockImpl 7JFX 1SFTFOUFS 6TF$BTF 5SBOTMBUPS .PEFM %BUB4UPSF &OUJUZ 3FQPTJUPSZ QSPUPDPMʹ४ڌͨ͠.PDL΍ςετίʔυͰ
 ϨΠϠຖͷॊೈͳςετ͕Մೳ 3FQPTJUPSZΛ.PDLʹͯ͠ &OUJUZˠ.PEFMͷม׵Λςετ 6TF$BTFΛ.PDLʹͯ͠ɺ 7JFXͷ&WFOUʹର͢Δ1SFTFOUFSͷڍಈΛςετ UseCaseMockImpl

Slide 37

Slide 37 text

·ͱΊ

Slide 38

Slide 38 text

·ͱΊ %FTJHOFS OFFS "SDIJUFDUVSFʹۜͷ஄ؙ͸ͳ͍ Կ͕࠷ద͔ߟ͑ଓ͚Δ͜ͱ͕ॏཁ w "SDIJUFDUVSF͸༷ʑͳঢ়گɺશମͷߏ੒΋౿·ܾ͑ͯΊΔ w ϝϯόʔͱઃܭ΍։ൃํ਑ΛؚΊͨίϯςΩετΛڞ༗͢Δ Architecture

Slide 39

Slide 39 text

5IBOLZPV