コードレビューが好きになるプログラミングの原則

A346995c1ccea0de3775215ece639fd7?s=47 Ebisuno
November 22, 2018

 コードレビューが好きになるプログラミングの原則

Web Developers Meetup Gotanda ~ MC Open Lab. #6 ~で利用した資料です。
https://memberscareer.connpass.com/event/106254/

A346995c1ccea0de3775215ece639fd7?s=128

Ebisuno

November 22, 2018
Tweet

Transcript

  1. ίʔυϨϏϡʔ͕޷͖ʹͳΔ ϓϩάϥϛϯάͷݪଇ by ॉ໺ ༤ଠ(͑ͼ͢ͷΏ͏ͨ)

  2. about me • ϝϯόʔζΩϟϦΞʢגʣ • ϓϩάϥϚʔ̏೥໨ • ͪΐͬͱલ·Ͱۀ຿γεςϜܥSESاۀʹۈ຿ • ࢓ࣄͰָ͘͠ϓϩάϥϛϯά͍ͨ͠

  3. ίʔυϨϏϡʔͰࢦఠ΋Βͬͨ • ͜ͷίʔυ͸Α͘ͳ͍ • ͜͜͸ผϝιουʹ෼͚ͨ΄͏͕Α͍ • ͜͜͸ڞ௨Խͨ͠΄͏͕Α͍ • ͳΜͰ͜͏͠ͳ͔ͬͨͷʁ

  4. ίʔυϨϏϡʔͰࢦఠ΋Βͬͨ • ͜ͷίʔυ͸Α͘ͳ͍ • ͜͜͸ผϝιουʹ෼͚ͨ΄͏͕Α͍ • ͜͜͸ڞ௨Խͨ͠΄͏͕Α͍ • ͳΜͰ͜͏͠ͳ͔ͬͨͷʁ

  5. None
  6. ʮΑ͍ʯʮΑ͘ͳ͍ʯʮͳΜͰʯ ͱ͸ʁ • ࢦఠͨ͠ଆ΋Θ͔ͬͯͳ͍ʁ • Θ͔ͬͯΔ͚Ͳઆ໌Ͱ͖ͳ͍ʁ • આ໌ͷ͕࣌ؒͳ͍ʁ • ޱԼखʁ

    • ܦݧଇʁ
  7. • Ϗδωεతʹ࣮ݱ͍ͨ͠໨తͰ͋Δ͔ʁ • Ϗδωεతʹ௚઀ؔ܎͢ΔΘ͚Ͱ͸ͳ͍͚Ͳɺ ඞཁͳ΋ͷͰ͋Δ͔ʁ • طଘͷίʔυͱॻ͖ํ͕ҧ͏ʁ • ྑ͍ίʔυͰ͋Δ͔ʁ ʮΑ͍ʯʮΑ͘ͳ͍ʯʮͳΜͰʯ

    ͷީิ
  8. • Ϗδωεతʹ࣮ݱ͍ͨ͠໨తͰ͋Δ͔ʁ • Ϗδωεతʹ௚઀ؔ܎͢ΔΘ͚Ͱ͸ͳ͍͚Ͳɺ ඞཁͳ΋ͷͰ͋Δ͔ʁ • طଘͷίʔυͱॻ͖ํ͕ҧ͏ʁ • ྑ͍ίʔυͰ͋Δ͔ʁ ʮΑ͍ʯʮΑ͘ͳ͍ʯʮͳΜͰʯ

    ͷީิ
  9. “ྑ͍ίʔυ”ͱ͸ͳʹ͔ʁ

  10. Θ͔Βͳ͍

  11. ʮΘ͔ΔʯͨΊͷ෢ثͱͯ͠ • ϓϩάϥϛϯά͢Δ࣌ʹ”Α͍”ͱ͞ΕΔࢦඪ ͕͋Δʂ • ʓʓݪଇ • ๏ଇͱ͔ɺࢥ૝ͱ͔΋

  12. ʓʓݪଇ͸ʢͨͿΜʣԞਂ͍ • ݪଇҰͭͰҰ࡭ຊ͕ग़དྷ্͕Δ͙Β͍ • LTͰ͸͢΂ͯΛ஌Δ͜ͱ͸Ͱ͖ͳ͍ͷͰ • ͨ͘͞ΜͷݪଇΛ ֓ཁ͚ͩ঺հʂʂ

  13. DRYݪଇʢυϥΠݪଇʣ (Don’t Repeat Yourself.) • ҙຯ • ܁Γฦ͞ͳ͍ • ίʔυΛผͷॲཧʹίϐϖ͠ͳ͍

    • ͳͥʁ • มߋ͢Δ࣌ʹɺίϐϖ෦෼Λ͢΂ͯมߋ͠ͳ͚Ε͹ͳΒ ͳ͍
  14. OCPݪଇʢΦʔϓϯΫϩʔζυͷݪଇʣ (Open-Closed Principle.) • ҙຯ • ػೳ௥Ճ͕Մೳ • ػೳ௥Ճͯ͠΋طଘॲཧʹӨڹ͠ͳ͍ •

    ͳͥʁ • ࢓༷มߋʹରԠ͠΍͍͢
  15. SRPݪଇʢ୯Ұ੹೚ݪଇʣ (Single Responsibility Principle.) • ҙຯ • ҰͭͷϞδϡʔϧͷมߋ࣌ʹɺཧ༝͕ೋͭҎ্͋ͬͯ͸ͳ Βͳ͍ •

    Ϟδϡʔϧͷ໾ׂ͸̍ͭʹ͢Δ • ͳͥʁ • A͞ΜͱB͞Μ͕ಉ͡ϞδϡʔϧΛผͷཧ༝Ͱमਖ਼ • όάൃੜʂˠόάͷݪҼ͸Ͳͬͪͷमਖ਼ʁ
  16. SLAPݪଇʢந৅ԽϨϕϧͷ౷Ұʣ(Single Level of Abstraction Principle.) • ҙຯ • ཻ౓Λ߹ΘͤΔ •

    ຊͷ”໨࣍”ɺ”ষ”ɺ”ஈམ” ͷΠϝʔδ • ͳͥʁ • Ͳ͜ʹԿ͕͋Δ͔ɺ • Θ͔Γ΍͍͢
  17. SLAPݪଇʢந৅ԽϨϕϧͷ౷Ұݪଇʣ (Single Level of Abstraction Principle.) • ҙຯ • ཻ౓Λ߹ΘͤΔ

    • ຊͷ”໨࣍”ɺ”ষ”ɺ”ஈམ”ͷΠϝʔδ • ͳͥʁ • Ͳ͜ʹԿ͕͋Δ͔ɺΘ͔Γ΍͍͢
  18. ڽू౓ͱ݁߹౓ • ҙຯ • ڽू͕ߴ͍ɿ੹೚ൣғ͕ಉ͡ॲཧΛҰͭͷ৔ॴʹ·ͱΊΔ • ݁߹͕௿͍ɿॲཧ͕ɺผͷॲཧʹӨڹ͕গͳ͍ • ͳͥʁ •

    ॲཧͷӨڹൣғ͕Θ͔Γ΍͍͢
  19. KISSݪଇʢ؆ܿʹ୯७ʹʣ (Keep It Short and Simple.) • ҙຯ • γϯϓϧʹ͓ͯ͘͠

    • ͳͥʁ • ຊ౰ʹ΍Γ͍ͨ͜ͱ͕Θ͔Γʹ͍͘ • ίʔυಡΈʹ͍͘
  20. YAGNIݪଇʢඞཁͰ͸ͳ͍ʣ (You Aren’t Going To Need It.) • ҙຯ •

    ඞཁͳ΋ͷ͚ͩॻ͘ • ʮ͋ͱͰ࢖͏͔΋ʯΛॻ͔ͳ͍ • ͳͥʁ • ࢖Θͳ͍͜ͱ͕΄ͱΜͲ • ʮ͋ͬͨ΄͏͕ศརʯʹΰʔϧ͸ͳ͍ʢແݶʹ࡞ΕΔʣ
  21. PIEݪଇʢҙਤΛදݱʣ (Program Intently and Expressively.) • ҙຯ • ΍Γ͍ͨ͜ͱͷҙਤΛॻ͘ •

    ͳͥʁ • ίʔυҎ֎ͷࢿྉ͕ɺίʔυΑΓਖ਼֬ͳ͜ͱ͸ͳ͍
  22. ࢀরͷҰ఺ੑ • ҙຯ • એݴˍఆٛ͸̍ճ͚ͩ • ͳͥʁ • ஋ͷมԽΛ௥͍͔͚ͳͯ͘ྑ͘ͳΔ •

    ޙଓͷॲཧʹӨڹΛ༩͑ͳ͍
  23. ႈ౳ੑͱ҆શੑ • ҙຯ • ෳ਺ճ࣮ߦͯ͠΋ɺ݁Ռ͕ಉ͡Ͱ͋Δ͜ͱ • ࣮ߦʹΑͬͯɺ࣮ߦର৅ͷঢ়ଶ͕มԽ͠ͳ͍͜ͱ • ͳͥʁ •

    ࣮ߦ͢Δॲཧͷத਎Λҙࣝ͠ͳͯ͘ྑ͘ͳΔ
  24. Մٯੑ • ҙຯ • ʮ໭Δʯ͕Ͱ͖Δॲཧ • ͳͥʁ • औΓฦ͠ͷ͔ͭͳ͍͜ͱ͸͠ͳ͍΄͏͕͍͍ •

    ࠓͷ݁࿦͕ɺະདྷͷ݁࿦ͱಉ͡Մೳੑ͸௿͍
  25. ٕज़తෛ࠴ͷ؅ཧ • ҙຯ • ΍ΉΛಘͣ”Α͘ͳ͍”ίʔυΛॻ͘ࡍʹɺॻ͍ͨ͜ͱ๨Εͳ ͍ɻ • ͳͥʁ • ෛ࠴͕͋Δ͜ͱΛ๨Εͨ࣌ʹɺฦࡁ͢Δίετ͕௓Ͷ্͕Δ

  26. ςετ༰қੑ • ҙຯ • ςετΛ۱ʑ·ͰͰ͖Δ͜ͱ • ςετ࡞੒ͷίετ͕௿͍͜ͱ • ͳͥʁ •

    ςετ͕ͳ͍ͱมߋ͕͏·͍͔ͬͨ͘Θ͔Βͳ͍ • ςετ༰қੑ͕ͳ͍ͱɺςετΛαϘΓ͕ͪ
  27. ͦͷଞͷݪଇʁ • ؔ৺ͷ෼཭ʢػೳ΍໨తͰ෼཭ʣ • ΠϯλʔϑΣʔεͱ࣮૷ͷ෼཭ʢར༻ऀ͸ΠϯλʔϑΣʔε͚ͩΘ͔Ε͹ػೳΛར༻Ͱ͖Δʣ • طଘίʔυͱಉ͡ॻ͖ํ • ڻ͖࠷খͷݪଇʢಈ࡞Λ༧ଌ͠΍͘͢ʣ •

    ࠷ॳ͸ύϑΥʔϚϯεΛҙࣝ͠ͳ͍ʢύϑΥʔϚϯεͷͨΊͷίʔυ͸௚ײతͰͳ͍͜ͱ͕ଟ ͍ʣ • υοΫϑʔσΟϯάʢϢʔβʔͷؾ࣋ͪʹͳΔʣ • ϥόʔμοΩϯάʢ໰୊Λ୭͔ʹઆ໌ͯ͠ΈΑ͏ʣ • ׂΕͨ૭ͷ๏ଇʢ୭͔͕ѱ͍͜ͱΛ͢ΔͱɺपΓ͸΍ͬͯ΋͍͍ͱߟ͑Δʣ • δϣγϡΞπϦʔͷ๏ଇʢ໊લΛ஌Βͳ͍΋ͷ͸ɺݟ͑ͳ͍ʣ
  28. ·ͱΊ • Why͕͋Ε͹ • Α͍ϓϩάϥϜ͕ॻ͚ΔΑ͏ʹʂ • ࢦఠΛཪʹ͋ΔҙਤΛਪ࡯ • ҙਤͷݩʹͳͬͨʓʓݪଇ͕͋Δ͔΋ʁ •

    ࢦఠͷຊ࣭ΛཧղͰ͖Δʂ • ͞Βʹɾɾɾຊ౰ʹΑ͍ϓϩάϥϜʹͳ͍ͬͯΔ͔Ͳ͏͔Λٞ࿦Ͱ͖Δ͔΋ʁ ָ͍͠ϓϩάϥϛϯάϥΠϑΛʂʂ
  29. Q