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

SwiftでわかるSOLID原則 iOSDC 2020

k-kohey
September 21, 2020

SwiftでわかるSOLID原則 iOSDC 2020

iOSDC 2020の発表に用いた資料

k-kohey

September 21, 2020
Tweet

More Decks by k-kohey

Other Decks in Technology

Transcript

  1. J04%[email protected]
    4XJGUͰΘ͔Δ40-*%ݪଇ
    J04ͷ։ൃࣄྫʹ߹Θͤͯ෼Ͱ঺հ

    View Slide


  2. ֶੜ࣌୅ελʔτΞοϓͰ
    J04ΞϓϦ։ൃΛ͍ͯͨ͠
    ࢲ͸౓ʑ͜ͷΑ͏ͳ͜ͱΛ
    ߟ͍͑ͯ·ͨ͠

    View Slide


  3. ࣗ෼͸
    ࣗ෼͸ػೳ௥ՃΛ
    ͍ͯ͠Δ͕

    View Slide


  4. ࣗ෼͸
    ͦͷ࣮
    ௥Ճ͍ͯ͠Δͷ͸
    ػೳͰ͸ͳ͘
    όάͳͷͰ͸ʁʁ

    View Slide


  5. IUUQTXXXESPQCPYDPNTIOTJHWQSNJNWKSB""$//LWD8/I:&SHBJ4876B EM
    ϦϦʔεຖʹൃੜ͢Δόά

    ͦΕΛमਖ਼͢Δෛͷϧʔϓ

    View Slide

  6. 40-*%ݪଇ
    มߋʹڧ͘ཧղ͠΍͍͢γεςϜΛ࡞ΔͨΊͷݪଇ
    ͭͷઃܭݪଇͷ಄จࣈΛऔ໊ͬͨલʹͳ͍ͬͯΔ

    View Slide

  7. J04։ൃʹབྷΊͯ
    40-*%ݪଇ Ұ෦

    Λઆ໌͠Α͏
    ͱ͍͏ࢼΈͰ͢
    ͜ͷൃද͸

    View Slide

  8. ୯Ұ੹೚ͷݪଇ

    4JOHMF3FTQPOTJCJMJUZ1SJODJQMF

    View Slide

  9. ୯Ұ੹೚ͷݪଇ
    ֓ཁ
    w ͋ΔΫϥεʢߏ଄ମ΍ྻڍܕʹؔͯ͠΋ಉ͡ʣ͸ͭͷΞΫλʔʹରͯ͠
    ੹຿Λෛ͏΂͖Ͱ͋Δ
    w ΞΫλʔσβΠφʔ΍ϓϥϯφʔ౳ͷεςʔΫϗϧμʔɽࢀߟจݙͰ͸$50΍
    $&0͕֘౰͢Δͱઆ໌͞Ε͍ͯΔɽ

    View Slide

  10. ୯Ұ੹೚ͷݪଇ
    ֓ཁ
    w ͋ΔΫϥεʢߏ଄ମ΍ྻڍܕʹؔͯ͠΋ಉ͡ʣ͸ͭͷΞΫλʔʹରͯ͠
    ੹຿Λෛ͏΂͖Ͱ͋Δ
    w ΞΫλʔσβΠφʔ΍ϓϥϯφʔ౳ͷεςʔΫϗϧμʔɽࢀߟจݙͰ͸$50΍
    $&0͕֘౰͢Δͱઆ໌͞Ε͍ͯΔɽ
    ͋ΔΞΫλʔͷཁٻʹΑΔมߋ͕
    ผͷΞΫλʔͷཁٻΛյͯ͠͠·͏Մೳੑ͕͋Δ

    View Slide

  11. ୯Ұ੹೚ͷݪଇʹ
    ै͍ͬͯͳ͍ྫ

    View Slide


  12. ୯Ұ੹೚ͷݪଇ
    ै͍ͬͯͳ͍ྫ
    ͳΜͰ΋೚ͤͯԼ͍͞ʂʂ
    ੹೚ײڧ͗͢Δ

    View Slide

  13. 破…!!!
    破…!!!

    ͋ΔΞΫλʔͷཁٻ͕΋͏ҰํͷΞΫλʔͷมߋΛഁյ͢Δ౳ͷӨڹΛٴ΅͢Մೳੑ͕͋Δɽ
    খ͍͞Өڹͩͱɼ(JUͷίϯϑϦΫτͳͲ͕ߟ͑ΒΕΔɽ

    View Slide

  14. ୯Ұ੹೚ͷݪଇʹ
    ै͏Α͏ʹΫϥεΛ
    ෼͚Δ
    2͡Ό͋Ͳ͏͢Δͷʁ

    View Slide

  15. ୯Ұ੹೚ͷݪଇʹैͬͯ੹຿Λ෼཭ͨ͠Ұྫ
    6*7JFX$POUSPMMFS
    ભҠઌΛܾఆ͢Δॲཧ
    $PPSEJOBUPS
    ભҠΞχϝʔγϣϯ
    σβΠφʔ
    ભҠΞχϝʔγϣϯ
    ΛϦονʹʂ
    มߋΛཁٻ
    ϓϥϯφʔ
    ભҠॲཧΛҕৡ
    ભҠઌͷը໘Λ
    มߋ͍ͨ͠ʂ
    มߋΛཁٻ

    $PPSEJOBUPSύλʔϯը໘ભҠʹؔ͢Δ੹຿Λ$PPSEJOBUPSͱݺ͹ΕΔΫϥε΁ҕৡ͢Δ࣮૷ύλʔϯ

    View Slide

  16. ୯Ұ੹೚ͷݪଇʹैͬͯ੹຿Λ෼཭ͨ͠Ұྫ
    6*7JFX$POUSPMMFS
    ભҠઌΛܾఆ͢Δॲཧ
    $PPSEJOBUPS
    ભҠΞχϝʔγϣϯ
    σβΠφʔ
    ભҠΞχϝʔγϣϯ
    ΛϦονʹʂ
    มߋΛཁٻ
    ϓϥϯφʔ
    ભҠॲཧΛҕৡ
    ભҠઌͷը໘Λ
    มߋ͍ͨ͠ʂ
    มߋΛཁٻ

    $PPSEJOBUPSύλʔϯը໘ભҠʹؔ͢Δ੹຿Λ$PPSEJOBUPSͱݺ͹ΕΔΫϥε΁ҕৡ͢Δ࣮૷ύλʔϯ

    View Slide

  17. ୯Ұ੹೚ͷݪଇʹैͬͯ੹຿Λ෼཭ͨ͠Ұྫ
    6*7JFX$POUSPMMFS
    ભҠઌΛܾఆ͢Δॲཧ
    $PPSEJOBUPS
    ભҠΞχϝʔγϣϯ
    σβΠφʔ
    ભҠΞχϝʔγϣϯ
    ΛϦονʹʂ
    มߋΛཁٻ
    ϓϥϯφʔ
    ભҠॲཧΛҕৡ
    ભҠઌͷը໘Λ
    มߋ͍ͨ͠ʂ
    มߋΛཁٻ

    $PPSEJOBUPSύλʔϯը໘ભҠʹؔ͢Δ੹຿Λ$PPSEJOBUPSͱݺ͹ΕΔΫϥε΁ҕৡ͢Δ࣮૷ύλʔϯ

    View Slide

  18. ୯Ұ੹೚ͷݪଇʹैͬͯ੹຿Λ෼཭ͨ͠Ұྫ
    6*7JFX$POUSPMMFS
    ભҠઌΛܾఆ͢Δॲཧ
    $PPSEJOBUPS
    ભҠΞχϝʔγϣϯ
    σβΠφʔ
    ભҠΞχϝʔγϣϯ
    ΛϦονʹʂ
    มߋΛཁٻ
    ϓϥϯφʔ
    ભҠॲཧΛҕৡ
    ભҠઌͷը໘Λ
    มߋ͍ͨ͠ʂ
    มߋΛཁٻ
    9$PPSEJOBUPSΛ༻͍ͨྫ
    IUUQTHJUIVCDPNRVJDLCJSETUVEJPT9$PPSEJOBUPS͔ΒҰ෦Ҿ༻

    View Slide

  19. ݪଇʹै͏ͱ֤ΞΫλʔʹΑΔมߋ͕͓ޓ͍ʹׯব͠ͳ͍ͨΊ
    յΕʹ͍͘ઃܭͱͳͬͨ
    6*7JFX$POUSPMMFS
    ભҠઌΛܾఆ͢Δॲཧ
    $PPSEJOBUPS
    ભҠΞχϝʔγϣϯ
    σβΠφʔ
    ભҠΞχϝʔγϣϯ
    ΛϦονʹʂ
    มߋΛཁٻ
    ϓϥϯφʔ
    ભҠॲཧΛҕৡ
    ભҠઌͷը໘Λ
    มߋ͍ͨ͠ʂ
    มߋΛཁٻ

    View Slide

  20. Ϧείϑͷஔ׵ݪଇ

    -JTLPWTVCTUJUVUJPOQSJODJQMF

    View Slide

  21. Ϧείϑͷஔ׵ݪଇ
    ֓ཁ
    ͋Δܕ"ͱަ׵Մೳͳܕ#Λ࢖༻Ͱ͖Δ৔߹ɼ#͸"ͱಉ͡ৼΔ෣͍Λ͢Δ͜ͱ
    Λอূ͞Εͳ͍ͱ͍͚ͳ͍

    View Slide

  22. Ϧείϑͷஔ׵ݪଇ
    ֓ཁ
    ͋Δܕ"ͱަ׵Մೳͳܕ#Λ࢖༻Ͱ͖Δ৔߹ɼ#͸"ͱಉ͡ৼΔ෣͍Λ͢Δ͜ͱ
    Λอূ͞Εͳ͍ͱ͍͚ͳ͍
    ͋ΔܕΛ֦ு͢Δຖʹमਖ਼͕
    ඞཁʹͳΔՄೳੑ͕͋Δ

    View Slide

  23. Ϧείϑͷஔ׵ݪଇ
    ໰͍
    ΦϒδΣΫτࢦ޲ݴޠͳΒܧঝʹΑͬͯৗʹຬͨͤͦ͏ʁ
    BEE4VC7JFX 6*7JFX
    ʹରͯ͠
    6*7JFXͷαϒλΠϓʢ&MMJQTF7JFXʣΛ
    ౉͢͜ͱ͕Ͱ͖Δ

    View Slide

  24. Ϧείϑͷஔ׵ݪଇ
    ໰͍
    ΦϒδΣΫτࢦ޲ݴޠͳΒܧঝʹΑͬͯৗʹຬͨͤͦ͏ʁ
    BEE4VC7JFX 6*7JFX
    ʹରͯ͠
    6*7JFXͷαϒλΠϓʢ&MMJQTF7JFXʣΛ
    ౉͢͜ͱ͕Ͱ͖Δ


    View Slide

  25. ৼΔ෣͍·Ͱަ׵ՄೳʹͳΔ͜ͱ͸୲อ͞Εͳ͍
    7JFXͷഎܠͱڥքઢͷ৭Λม͑Δ6*7JFXͷ֦ுؔ਺ͷྫ

    ͜ͷϝιου͸શͯͷ6*7JFXͷαϒλΠϓ
    ʹ͓͍ͯಉ͡Α͏ʹৼΔ෣͏͔ʁʁ

    View Slide

  26. ৼΔ෣͍·Ͱަ׵ՄೳʹͳΔ͜ͱ͸୲อ͞Εͳ͍
    6*4UBDL7JFXΛ༻͍ͨ൓ྫʢ9DPEFҎલʣ
    )PHF7JFX 'VHB7JFX
    6*7JFX
    pMM*ODMVEJOH#PSEFS
    6*4UBDL7JFX
    9DPEF͔ΒCBDLHSPVOE$PMPSʹΑΔഎܠ৭ͷมߋ͕ՄೳͱͳΓ·ͨ͠IUUQTUXJUUFSDPNMBZPVU4VCWJFXTTUBUVT T
    આ໌ͷͨΊʹ6*4UBDL7JFXΛ࣋ͪग़͕ͨ͠ɼ6*,JU͸ͦΜͳʹසൟʹมߋ͕ೖΔ΋ͷͰ͸ͳ͍͠ɼ͜ͷ-41ҧ൓͸େͨ͠໰୊Ͱ͸ͳ͍ͱ͍͏ೝࣝͰ͢

    View Slide

  27. ৼΔ෣͍·Ͱަ׵ՄೳʹͳΔ͜ͱ͸୲อ͞Εͳ͍
    6*4UBDL7JFXΛ༻͍ͨ൓ྫʢ9DPEFҎલʣ
    )PHF7JFX 'VHB7JFX
    6*7JFX
    pMM*ODMVEJOH#PSEFS
    6*4UBDL7JFX
    ͜͜Ͱॲཧͷ෼ذ
    ͕ඞཁʹͳΔ

    View Slide

  28. ৼΔ෣͍·Ͱަ׵ՄೳʹͳΔ͜ͱ͸୲อ͞Εͳ͍
    6*4UBDL7JFXΛ༻͍ͨ൓ྫ
    )PHF7JFX 'VHB7JFX
    6*7JFX
    pMM*ODMVEJOH#PSEFS
    6*4UBDL7JFX
    ͜͜Ͱॲཧͷ෼ذ
    ͕ඞཁʹͳΔ

    UIKit͸සൟʹมߋ͕ՃΘΒͳ͍ͨΊ͞΄Ͳ໰୊ʹͳΒͳ͍͕
    αϒλΠϓΛ௥Ճ͢Δ౓ʹ
    ྫ֎ͷ֬ೝͱରԠΛ͢Δඞཁ͕͋Δͷ͸
    ඇৗʹ໽հ

    View Slide

  29. Ϧείϑͷஔ׵ݪଇҧ൓ͷ؆қνΣοΫ
    ࣗ਎͕ఆٛͨ͠ܕ͕มߋʹڧ͍͔Λ֬ೝ͢Δͷʹ࢖͑Δ
    w ܧঝઌͰୀԽ͍ͯ͠ΔϝιουŋϓϩύςΟ͸ͳ͍͔
    w ྫʣܧঝݩͰ͸࣮૷͕͋ΔͷʹɼܧঝઌͰ͸ۭ࣮૷ʹͳ͍ͬͯΔϝιου
    w ܧঝઌͰܧঝݩͰ౤͍͛ͯͳ͍ྫ֎Λ౤͍͛ͯͳ͍͔
    w ྫʣ4XJGUͰ͸ΤϥʔΛ౤͛ͳ͍ϝιουΛΦʔόʔϥΠυͯ͠
    ΤϥʔΛ౤͛ΔΑ͏ͳมߋ͸Ͱ͖ͳ͍ɽ
    w ແཧ΍ΓGBUBM&SSPSΛى͜͢͜ͱ͸Մೳɽ

    View Slide

  30. ґଘੑٯసͷݪଇ

    %FQFOEFODZJOWFSTJPOQSJODJQMF

    View Slide

  31. ґଘੑٯసͷݪଇ
    ֓ཁ
    w ؆୯ʹݴ͏ͱɼʮந৅ʹґଘͤΑɽʯͱ͍͏ܦݧଇɽ
    w มߋ͞Ε΍͍͢۩৅ΫϥεΛܧঝͨ͠Γ໊ࢦ͠Ͱࢀরͨ͠Γͯ͠͸͍͚ͳ͍

    ٯసͱ͸ɼґଘͷ޲͖͕ٯ޲͖ʹͳΔ͜ͱɼґଘͷํ޲ͱΠϯλϑΣʔεͷॴ༗ݖ͕ٯʹͳΔ͜ͱΛࢦ͢

    View Slide

  32. ґଘੑٯసͷݪଇ
    ֓ཁ
    w ؆୯ʹݴ͏ͱɼʮந৅ʹґଘͤΑɽʯͱ͍͏ܦݧଇɽ
    w มߋ͞Ε΍͍͢۩৅ΫϥεΛܧঝͨ͠Γ໊ࢦ͠Ͱࢀরͨ͠Γͯ͠͸͍͚ͳ͍
    ଟ͘ͷ৔߹ʹ͓͍ͯ۩৅ΫϥεΑΓ
    ΠϯλϑΣʔεͷํ͕มߋ͞Εʹ͍ͨ͘Ί
    ͜ͷݪଇʹै͏ͱมߋʹڧ͍ઃܭʹͳΔ

    ٯసͱ͸ɼґଘͷ޲͖͕ٯ޲͖ʹͳΔ͜ͱɼґଘͷํ޲ͱΠϯλϑΣʔεͷॴ༗ݖ͕ٯʹͳΔ͜ͱΛࢦ͢

    View Slide

  33. ґଘੑٯసͷݪଇ
    ֓ཁ
    w ؆୯ʹݴ͏ͱɼʮந৅ʹґଘͤΑɽʯͱ͍͏ܦݧଇɽ
    w มߋ͞Ε΍͍͢۩৅ΫϥεΛܧঝͨ͠Γ໊ࢦ͠Ͱࢀরͨ͠Γͯ͠͸͍͚ͳ͍
    ଟ͘ͷ৔߹ʹ͓͍ͯ۩৅ΫϥεΑΓ
    ΠϯλϑΣʔεͷํ͕มߋ͞Εʹ͍ͨ͘Ί
    ͜ͷݪଇʹै͏ͱมߋʹڧ͍ઃܭʹͳΔ

    ٯసͱ͸ɼґଘͷ޲͖͕ٯ޲͖ʹͳΔ͜ͱɼґଘͷํ޲ͱΠϯλϑΣʔεͷॴ༗ݖ͕ٯʹͳΔ͜ͱΛࢦ͢
    Մೳͳͷ͔ʁ

    View Slide

  34. ໊ࢦ͠ͷࢀরΛ࠷খݶʹ͢Δํ๏
    ґଘੑ஫ೖΛ༻͍ͨࣄྫ
    w 4XJOKFDUͷΑ͏ͳґଘੑ஫ೖΛߦ͏࣮૷Λ༻͍Δ͜ͱʹΑͬͯɼ۩৅Ϋϥε
    ͷࢀরΛ࠷খݶʹͰ͖Δɽ
    ϓϩτίϧͱ
    ॳظԽʹඞཁͳ
    ύϥϝʔλ
    ۩৅Ϋϥεͷ
    Πϯελϯε
    ίϯςφʹ͋Δ
    1FSTPOBMϓϩτίϧ
    ʹ४ڌͨ͠ΠϯελϯεΛԼ͍͞
    4VQFS1FSTPOͷΠϯελϯε
    ͕ొ࿥͞Ε͍ͯΔͷͰ
    ίϨΛ࢖͍ͬͯͩ͘͞ʂ

    ຊൃදͰ͸ΠϯλϑΣʔεͱϓϩτίϧΛҙຯతʹ࢖Θ͚ͳ͍ɽͨͩ͠ɼϓϩτίϧͱ࢖͏ͱ͖͸ΑΓ4XJGUͷݴޠ࢓తͳഎܠ͕ڧ͍ɽ

    View Slide

  35. ໊ࢦ͠ͷࢀরΛ࠷খݶʹ͢Δํ๏
    ґଘੑ஫ೖΛ༻͍ͨࣄྫ
    w 4XJOKFDUͷΑ͏ͳґଘੑ஫ೖΛߦ͏࣮૷Λ༻͍Δ͜ͱʹΑͬͯɼ۩৅Ϋϥε
    ͷࢀরΛ࠷খݶʹͰ͖Δɽ
    %*ίϯςφʹ͸
    ۩৅Ϋϥεͷొ࿥ʢࢀরʣ
    ͕ඞཁ

    View Slide

  36. ໊ࢦ͠ͷࢀরΛ࠷খݶʹ͢Δํ๏
    ґଘੑ஫ೖΛ༻͍ͨࣄྫ
    w 4XJOKFDUͷΑ͏ͳґଘੑ஫ೖΛߦ͏࣮૷Λ༻͍Δ͜ͱʹΑͬͯɼ۩৅Ϋϥε
    ͷࢀরΛ࠷খݶʹͰ͖Δɽ
    1SPUPDPM͑͞஌͍ͬͯΕ͹
    ۩৅ΫϥεΛࢀর͢Δ͜ͱͳ͘
    ͦͷΠϯελϯεΛऔಘͰ͖Δ

    View Slide

  37. ໊ࢦ͠ͷࢀরΛ࠷খݶʹ͢Δํ๏
    ґଘੑ஫ೖΛ༻͍ͨࣄྫ
    w 4XJOKFDUͷΑ͏ͳґଘੑ஫ೖΛߦ͏࣮૷Λ༻͍Δ͜ͱʹΑͬͯɼ۩৅Ϋϥε
    ͷࢀরΛ࠷খݶʹͰ͖Δɽ
    1SPUPDPM͑͞஌͍ͬͯΕ͹
    ۩৅ΫϥεΛࢀর͢Δ͜ͱͳ͘
    ͦͷΠϯελϯεΛऔಘͰ͖Δ

    ݪଇʹै͏͜ͱʹΑͬͯ
    มߋ͞Ε΍͍͢
    ۩৅ΫϥεͷࢀরΛආ͚ͳ͕Β
    ։ൃ͕Ͱ͖ΔΑ͏ʹͳͬͨ

    View Slide

  38. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠
    4XJGUͰΘ͔Δ40-*%ݪଇ[email protected]
    w 40-*%ݪଇ
    w มߋʹڧ͘ཧղ͠΍͍͢γεςϜΛ࡞ΔͨΊʹ༗ӹ
    w ୯Ұ੹೚ͷݪଇ
    w ͋ΔΫϥε͸ͭͷΞΫλʔ܈ʹରͯ͠੹຿Λෛ͏΂͖Ͱ͋Δ
    w Ϧείϑͷஔ׵ݪଇ
    w ͋Δܕ"ͱަ׵Մೳͳܕ#Λ࢖༻Ͱ͖Δ৔߹ɼ#͸"ͱಉ͡ৼΔ෣͍Λ͢
    Δ͜ͱΛอূ͞Εͳ͍ͱ͍͚ͳ͍
    w ґଘੑٯసͷݪଇ
    w ந৅ʹґଘͤΑ
    w ͦͷଞͷݪଇ
    w ͕࣌ؒ଍ΓͣൃදͰ͖·ͤΜͰͨ͠ϒϩάʹ·ͱΊ·͢ɽ


    5XJUUFSʢ[email protected]ʣ
    ͜ͷࢿྉ͓Αͼ
    ΑΓৄࡉͳݪଇͷઆ໌ࢿྉ
    ΛπΠʔτ͍ͯ͠·͢

    View Slide

  39. ࢀߟจݙ
    ॻ੶
    • <>3PCFSU$.BSUJOɼ੉୩ܒհɽΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛୈ൛ΦϒδΣΫτࢦ޲։ൃͷਆ਷ͱঊͷٕʢʣ4#ΫϦΤΠ
    ςΟϒ
    • <>3PCFSU$.BSUJOɼ֯੐యɼߴ໦ਖ਼߂ɽ$MFBO"SDIJUFDUVSFୡਓʹֶͿιϑτ΢ΣΞͷߏ଄ͱઃܭʢʣ,"%0,"8"
    هࣄ
    • ΠϯλʔϑΣΠε෼཭ͷݪଇIUUQTUIJOLPOPCKFDUCMPHTQPUDPNJOUFSGBDFTFHSFHBUJPOQSJODJQMFJTQUPQIUNM
    • 40-*%ݪଇΛཧղ͢ΔIUUQTTIUOLHNDPNTPMJEIUNM
    • ΠϯλʔϑΣʔε෼཭ͷ๏ଇ *41
    IUUQIBSVNJTBLVSBOFKQXPSEQSFTT
    &"&#&#'&#$&&"&#$&#&
    &#"&"&&#&JTQ
    • 4XJGUJ04ʹ͓͚Δ40-*%Š4JOHMF3FTQPOTJCJMJUZ1SJODJQMFIUUQTNFEJVNDPN!SJ[VNJUBTXJGU
    JPT&"#&"&&#TPMJETJOHMFSFTQPOTJCJMJUZQSJODJQMFBFBEEF
    • Α͘Θ͔Δ40-*%ݪଇ%ʢґଘੑٯసͷݪଇʣIUUQTOPUFDPNFSVLJUJOOFF
    • աڈʹ։࠵ͨ͠ňΞδϟΠϧιϑτ΢ΣΞ։ൃͷԞٛʼnͷษڧձʹͯ༻͍ΒΕͨࢿྉͨͪ
    ◦ IUUQTTQFBLFSEFDLDPNDIJHJDIBOBQQMJDBUJPOEFTJHONJBORJBOHIVJOVNCFS
    [email protected]

    View Slide