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

クリーンアーキテクチャとiOSアプリ開発のためのVIPERと

yimajo
January 20, 2020

 クリーンアーキテクチャとiOSアプリ開発のためのVIPERと

yimajo

January 20, 2020
Tweet

More Decks by yimajo

Other Decks in Technology

Transcript

  1. ΫϦʔϯΞʔΩςΫνϟͱ
    J04ΞϓϦ։ൃͷͨΊͷ
    7*1&3ͱ
    J04$MFBO"SDIJUFDUVSFษڧձTQPOTPSFECZ4BOTBO
    !ZJNBKP

    View Slide

  2. w ΫϦʔϯΞʔΩςΫνϟຊʢҎԼ$"ຊʣ͸ࢲʹ͸ಡΈͮΒ͍
    w ख์͠Ͱྑ͍ຊʂͱ͸ݴ͍ͮΒ͍
    w ࣗ෼͕ཧղͰ͖͔ͨͲ͏͔ո͍͠
    ͸͡Ίʹ

    View Slide

  3. ΫϦʔϯΞʔΩςΫνϟͰ΋࢖͏
    ʰґଘؔ܎ٯసͷݪଇʢ%*1ʣʱ
    ʹ͍ͭͯͷٙ໰

    View Slide

  4. ϓϩάϥϛϯάͷجૅͰ͋Δ
    ʮந৅ʹରͯ͠ϓϩάϥϛϯάͤΑʯͱ͍͏ࣄͱ
    ʰґଘؔ܎ٯసͷݪଇ %*1
    ʱ
    ͱ͍͏ݴ༿ͷҧ͍͸Կʁ
    ͓Μͳ͜͡ͱΛΘ͟Θ͟ݪଇʹ͢Δͷʁ

    View Slide

  5. $"ຊΛԿ౓΋ಡ
    ΜͰ΍ͬͱ
    ٯసΛཧղͰ͖ͨ

    View Slide

  6. ໰࣍ͷਤ͸ґଘؔ܎ٯసͷݪଇͰ͔͢
    DMBTT
    3FQPSU(FOFSBUPS
    DMBTT
    $PSF%BUB.BOBHFS
    ίʔυͷݺͼग़͠
    QSPUPDPM
    %BUB(BUFXBZ
    ४ڌ
    ͜Ε͸୯७ʹେੲ͔ΒݴΘΕͯΔ
    ʮந৅ʹରͯ͠ϓϩάϥϛϯάͤΑʯΛ
    ࣮ݱ͍ͯ͠Δ͚ͩͰ͸ʁ

    View Slide

  7. ࢲͷײ૝
    ͜ͷ୯७ͳந৅ܕͷར༻ςΫχοΫ͸
    ʰґଘؔ܎ٯసʱ͚ͩͲ
    ʰґଘؔ܎ٯసͷݪଇʱ
    Ͱ͸ͳ͍

    View Slide

  8. ࢲͷײ૝
    ʰґଘؔ܎ٯసͷݪଇʱ͸ݫີʹ͸ɺ
    ෳ਺Ϟδϡʔϧ͕͋Δ৔߹ʹɺ
    Ϟδϡʔϧͷґଘؔ܎͕ٯస͢Δͱ͖
    ͷΈͦΕ͕ద༻͞ΕΔͷͰ͸

    View Slide

  9. Θ͔Γ΍͢͞ͷͨΊ
    J04ΞϓϦ։ൃతʹ
    &NCFEEFE'SBNFXPSLʹΑΓ
    Ϟδϡʔϧ෼ׂͯ͠
    ̎ͭͷϞδϡʔϧͰͷྫΛߟ͑·͢

    View Slide

  10. DMBTT
    3FQPSU(FOFSBUPS
    Ϟδϡʔϧ" Ϟδϡʔϧ#
    ίʔυͷݺͼग़͠
    ґଘؔ܎
    Ϟδϡʔϧ"͸Ϟδϡʔϧ#ʹґଘ͍ͯ͠Δɻ
    Ϟδϡʔϧ"͕#ΛݺͿྫ
    DMBTT
    $PSF%BUB.BOBHFS
    JNQPSU.PEVMF#
    DMBTT3FQPSU(FOFSBUPS\
    MFUEBUB$PSF%BUBNBOBHFS

    ʜ
    ^

    View Slide

  11. DMBTT
    3FQPSU(FOFSBUPS
    Ϟδϡʔϧ" Ϟδϡʔϧ#
    ίʔυͷݺͼग़͠
    ґଘؔ܎
    Ϟδϡʔϧ"͸Ϟδϡʔϧ#ʹґଘ͍͕ͯͨ͠ɺϓϩτίϧར༻ʹΑͬͯɺ
    Ϟδϡʔϧ#͕Ϟδϡʔϧ"ʹґଘ͠͸͡Ίͨʂʂʜٯసʂʂʂʂ
    QSPUPDPM
    %BUB(BUFXBZ
    ४ڌ
    Ϟδϡʔϧ#͕"ͷϓϩτίϧʹ४ڌͤ͞Δ
    DMBTT
    $PSF%BUB.BOBHFS
    ͜ͷ৔߹ͷϓϩτίϧ͸Ϟδϡʔϧ"ʹॴଐͤ͞ͳ͚Ε͹ٯస͠ͳ͍

    View Slide

  12. $"ຊͰ͸
    w ͨͩͷந৅ܕͷར༻Λʰґଘؔ܎ٯసʱͱ͍ͯ͠Δͷ͕ฆΒΘ͍͠
    w $"ຊୈ̑ষʢਤʣ
    w zιʔείʔυͷґଘؔ܎ͱ੍ޚͷํ޲ͱٯస
    w ຊ౰ʹϞδϡʔϧͷґଘؔ܎͕ٯస͢Δ͜ͱ͕ʰґଘؔ܎ٯసͷݪ
    ଇʱͱ͍ͯ͠Δ
    w $"ຊୈ̔ষʢਤʣ
    w z*OUFSBDUPSίϯϙʔωϯτ͔Β%BUBCBTFίϯϙʔωϯτ΁ͷ
    ґଘؔ܎Λٯస

    View Slide

  13. ʰґଘؔ܎ٯసͷݪଇʱ
    ʰґଘؔ܎ٯసͷݪଇʱ
    Ͱ͸ͳ͍
    *OUFSBDUPSϞδϡʔϧ
    $POUSPMMFSϞδϡʔϧ
    %BUBCBTFϞδϡʔϧ

    View Slide

  14. ࣗݾ঺հ
    w ג
    ΩϡϦΦγςΟιϑτ΢ΣΞ
    w J04ΞϓϦ։ൃΛੜۀ

    View Slide

  15. ࣗݾ঺հ
    w BTZODBXBJUݚڀಡຊ
    w
    w 3Y4XJGUݚڀಡຊ* ** ***
    w
    w 7*1&3ݚڀಡຊ*
    w
    IUUQTTXJGUCPPUIQN

    View Slide

  16. ຊ୊

    View Slide

  17. ࠓճൃද͍ͨ͜͠ͱ
    w ͳͥ7*1&3͔
    w ΫϦʔϯΞʔΩςΫνϟ $"
    ͷJ04࣮૷ύλʔϯͰ͋Δ
    7*1&3ͷαϯϓϧίʔυൺֱ
    w େ఍ͷ7*1&3͸$"ຊʹ͋Δґଘؔ܎ٯసͷݪଇ %*1
    Λద
    ༻͍ͯ͠ͳ͍

    View Slide

  18. ͳͥ7*1&3͔
    w 7*1&3͸ΫϦʔϯΞʔΩςΫνϟ $"
    ΛJ04ΞϓϦ։ൃʹ෦෼తʹద༻͠
    ͨ΋ͷ
    w 7JFX *OUFSBDUPS 1SFTFOUFS &OUJUZ 3PVUFSͷύʔπ͝ͱʹ੹೚Λ෼
    ׂ͍ͯ͠Δ
    7JFX
    3PVUFS
    1SFTFOUFS *OUFSBDUPS
    &OUJUZ
    %FMFHBUF
    *OUFSBDUPSΛॴ࣋͠
    ߋ৽Λཁٻ͢Δ
    ૢ࡞
    3PVUFSΛॴ࣋͠
    ը໘ભҠٴͼ
    දࣔΛߦ͏
    7JFXΛॴ࣋͠
    ը໘ભҠΛ࣮ߦ͢Δ
    DPNQMFUJPO 3FTVMU4VDDFTT &SSPS



    ໾ׂ
    ΠϕϯτΛ1SFTFOUFSʹ఻͑ɺ
    σʔλͷදࣔΛߦ͏ɻ
    ໾ׂ
    ը໘ભҠͷͨΊ࣍ͷը໘΁ͷ੍ޚΛ୲౰͢Δɻ
    ΤϥʔΛදࣔ͢Δ͚ͩͷ6*"MFSU$POUSPMMFSදࣔ΋ߦ͍΍͍͢ɻ
    ໾ׂ
    ϏδωεϩδοΫΛ୲౰͢Δ
    ໾ׂ
    σʔλΛΧϓηϧԽ͢Δ
    ໾ׂ
    7JFX͔ΒͷೖྗΛड৴͠ɺ
    *OUFSBDUPS΁σʔλΛཁٻ͢Δɻ
    6*,JUʹґଘͤͣɺ
    දࣔ͢Δ΋ͷΛ7JFXʹ఻͑Δɻ
    ॴ࣋
    ௨஌
    ૢ࡞
    1SFTFOUFSΛॴ࣋͠
    ΞΫγϣϯΛ఻͑Δ

    View Slide

  19. 7*1&3ͷܥේ
    ຊՈPCKDJPJTTVFWJQFS
    ຊՈPCKDJPJTTVFWJQFSTXJGU
    QFESPIQFSBMUB"SUJDMFTJ047*1&3 KB[[CQO7*1&3%&.0
    ΞϯΫϧϘϒʹΑΔΫϦʔϯΞʔΩςΫνϟ
    ʜ
    ʜ

    View Slide

  20. ͳ༷ͥʑͳ7*1&3͕ʜ

    View Slide

  21. ຊՈ7*1&3
    w
    w PCKDJPʹدߘ
    w 50%0ΞϓϦ
    w $PSF%BUBΛ࢖ͬͯΔ
    w ܕ΍ม਺ͷ໋໊͕ΠϚΠν
    w ΞϓϦىಈ࣌ʹશը໘ͷґଘ
    ؔ܎Λղܾ

    View Slide

  22. QFESPIQFSBMUB"SUJDMFT
    J047*1&3
    w ೥
    w $IFFTDBLF-BCT
    w 344ͷهࣄΛදࣔ
    w "MBNPpSF3Y4XJGUΛ࢖ͬͯ
    Δ
    w ܕ΍ม਺ͷ໋໊͕ྑ͘ͳͬͨ
    w 3PVUFS͕ґଘؔ܎Λղܾ

    View Slide

  23. 7*1&3αϯϓϧͷڞ௨఺
    w $PSF%BUB΍3Y4XJGU"MBNPpSFͳͲͷϑϨʔϜϫʔΫʹʰґଘؔ
    ܎ٯసͷݪଇʱΛద༻͍ͯ͠ͳ͍
    w *OUFSBDUPS͕$PSF%BUBʹґଘ
    w *OUFSBDUPS͕"MBNPpSF3Y4XJGUʹґଘ

    View Slide

  24. %*1Λ࢖Θͳ͍͜ͱͷ
    σϝϦοτΛղܾ͢Δʹ͸
    w $PSF%BUB΍"MBNPpSFΛ੾Γ
    ସ͍͑ͨͳΒ
    w *OUFSBDUPSࣗମΛೖΕସ͑Δ
    7JFX
    3PVUFS
    1SFTFOUFS *OUFSBDUPS
    &OUJUZ
    %FMFHBUF
    *OUFSBDUPSΛॴ࣋͠
    ߋ৽Λཁٻ͢Δ
    ૢ࡞
    3PVUFSΛॴ࣋͠
    ը໘ભҠٴͼ
    දࣔΛߦ͏
    7JFXΛॴ࣋͠
    ը໘ભҠΛ࣮ߦ͢Δ
    DPNQMFUJPO 3FTVMU4VDDFTT &SSPS



    ໾ׂ
    ΠϕϯτΛ1SFTFOUFSʹ఻͑ɺ
    σʔλͷදࣔΛߦ͏ɻ
    ໾ׂ
    ը໘ભҠͷͨΊ࣍ͷը໘΁ͷ੍ޚΛ୲౰͢Δɻ
    ΤϥʔΛදࣔ͢Δ͚ͩͷ6*"MFSU$POUSPMMFSදࣔ΋ߦ͍΍͍͢ɻ
    ໾ׂ
    ϏδωεϩδοΫΛ୲౰͢Δ
    ໾ׂ
    σʔλΛΧϓηϧԽ͢Δ
    ໾ׂ
    7JFX͔ΒͷೖྗΛड৴͠ɺ
    *OUFSBDUPS΁σʔλΛཁٻ͢Δɻ
    6*,JUʹґଘͤͣɺ
    දࣔ͢Δ΋ͷΛ7JFXʹ఻͑Δɻ
    ॴ࣋
    ௨஌
    ૢ࡞
    1SFTFOUFSΛॴ࣋͠
    ΞΫγϣϯΛ఻͑Δ

    View Slide

  25. %*1Λ࢖Θͳ͍͜ͱͷ
    σϝϦοτΛղܾ͢Δʹ͸
    w $PSF%BUB3FBMNͳͲʹґଘ
    ͠ͳ͍Α͏ʹ
    w σʔλߏ଄
    ʢ.BOBHFE0CKFDU
    3FBMN0CKFDUʣΛϓϨʔϯ
    ͳ4USVDUʹม׵ͯ͠7JFX·
    Ͱ͍࣋ͬͯ͘
    7JFX
    3PVUFS
    1SFTFOUFS
    %FMFHBUF
    *OUFSBD
    ߋ৽Λ
    3PVUFSΛॴ࣋͠
    ը໘ભҠٴͼ
    දࣔΛߦ͏
    7JFXΛॴ࣋͠
    ը໘ભҠΛ࣮ߦ͢Δ
    DPNQMFUJPO 3FTVMU
    ໾ׂ
    ΠϕϯτΛ1SFTFOUFSʹ఻͑ɺ
    σʔλͷදࣔΛߦ͏ɻ
    ໾ׂ
    ը໘ભҠ
    ΤϥʔΛ
    ໾ׂ
    7JFX͔ΒͷೖྗΛड৴͠
    *OUFSBDUPS΁σʔλΛཁ
    6*,JUʹґଘͤͣɺ
    දࣔ͢Δ΋ͷΛ7JFXʹ఻
    ॴ࣋
    ௨஌
    ૢ࡞
    1SFTFOUFSΛॴ࣋͠
    ΞΫγϣϯΛ఻͑Δ
    ٭஫͜Ε͸ಛผ7*1&3తͳղܾํ๏ͱ͍͏Θ͚Ͱ͸͋Γ·ͤΜ

    View Slide

  26. ͜͜·Ͱͷ7*1&3·ͱΊ
    w ͳΜͰ͜Μͳ৭ʑͳ7*1&3͋Δͷʁ
    w ݫີʹ$"ʹԊ͓ͬͯΒͣϑϨʔϜϫʔΫґଘ͕͋Δ
    w ຊՈͷܕ໊ม਺໊ͷϨΨγʔײ
    w ݫີʹ$"ʹԊͬͯͳ͍͜ͱͷσϝϦοτ͸ʁ
    w ׂͱղܾͰ͖Δ
    w ͦ΋ͦ΋%#΍௨৴ϥΠϒϥϦΛஔ͖׵͑Δ͜ͱͬͯ͋Δ
    ͷ͔ʁͱ͍͏ׂΓ੾Γ΋ʜ

    View Slide

  27. ࢀߟʹͳΔ
    7*1&3࣮૷͸ʁ

    View Slide

  28. 7*1&3ݚڀಡຊ
    w ͜ͷຊͳΓͷ7*1&3αϯϓϧ࡞੒
    w νʔϜͰ΍ͬͯ͘ͷʹ͓͢͢Ί
    ͳ6TF$BTFϓϩτίϧ
    w ςετίʔυͷར༻Օॴ

    View Slide

  29. 6TF$BTF
    protocol UseCase where Failure: Error {
    associatedtype Parameters // Ҿ਺ͷܕ
    associatedtype Success // ੒ޭͨ͠ࡍͷܕ
    associatedtype Failure // ࣦഊ࣌ͷError΋NeverʹͰ͖ΔΑ͏ʹ
    func execute(_ parameters: Parameters,
    completion: ((Result) -> ())?)
    func cancel()
    }
    7*1&3Λ࢖͍ͨ͘ͳΔཁٻͬͯɺܕʹቕΊΒΕ੍ͨ໿ͷ΋ͱͰ
    νʔϜͰϒϨͳ͘ϓϩάϥϛϯά͕͍ͨ͠Μ͡Όͳ͍ͷ͔ͳͱ

    View Slide

  30. 1SFTFOUFSΛςετ͍ͨ͠ͳΒ
    5FTU%PVCMF
    7JFX
    5FTU%PVCMF
    3PVUFS
    1SFTFOUFS 5FTU%PVCMF
    *OUFSBDUPS
    &OUJUZ
    ςετ༻ͷσʔλ
    ΋͘͠͸ςετ༻ΤϥʔΛग़ྗ͢Δ
    ༻ҙͨ͠ςετσʔλΛηοτ͠ɺ
    ৗʹͦΕΛग़ྗ͢Δɻ
    1SFTFOUFSͷΤϥʔϋϯυϦϯάΛ
    ςετ͚ͨ͠Ε͹ɺ
    ΤϥʔΛฦͤΔผͷ5FTU%PVCMF΋
    ༻ҙ͢Δɻ
    1SFTFOUFSͷग़ྗͱͯ͠7JFXͷEFMFHBUFϝιου͕ಈ࡞ɻ
    ͦͷϝιου͔Βظ଴஋ͱΛൺֱ͢Δ
    ظ଴஋ͱͷൺֱݕূՕॴ
    ςετίʔυ͔Βͷݺͼग़͠
    1SFTFOUFSͷग़ྗͱͯ͠3PVUFSʹσʔλ͕౉͞ΕΔ
    ͦͷϝιου͔Βظ଴஋ͱΛൺֱ͢Δ

    View Slide

  31. ॲཧܦ࿏Λ௵ͨ͢Ίʹ
    ςετίʔυ͸όϦΤʔγϣϯΛ૿΍͢

    View Slide

  32. ༨ஊ
    w ΫϦʔϯΞʔΩςΫνϟͰ΋ந৅Ͱ͸ͳ͘۩৅Λ࢖͍ͬͯ
    Δྫ͸͋Δʢ$"ຊୈষʣ
    w 4USJOH͸҆ఆͨ͠۩৅ͳͷͰґଘ͍͍ͯ͠
    w 4USJOH͕ίϩίϩมΘΔ͜ͱ͸ؾʹ͠ͳ͍͍ͯ͘
    w ґଘͨ͘͠ͳ͍ͷ͸มԽ͠΍͍͢۩৅ཁૉ
    ͨ·ʹϝδϟʔόʔδϣϯͰ࢓༷มΘͬͨΓ͢Δ3Y4XJGUΛ
    શϨΠϠʔͰ࢖ͬͯͦΕʹґଘ͢Δͷ͸ΫϦʔϯΞʔΩςΫνϟతͰ͸ͳ͍͚Ͳ
    ͦΕ͸֮ޛ͕͋ͬͯ΍ΔΜͳΒྑ͍ͱࢥ͍·͢

    View Slide