$30 off During Our Annual Pro Sale. View Details »

LGTMについて

amacou
June 28, 2016

 LGTMについて

社内の新卒研修でコードレビューについての私見を共有しました

amacou

June 28, 2016
Tweet

More Decks by amacou

Other Decks in Programming

Transcript

  1. LGTMʹ͍ͭͯ
    GMO ϖύϘ

    @amacou

    View Slide

  2. ࣗݾ঺հ
    • @amacou
    • ݩSIer:2~3೥ಇ͍ͨޙɺ਺೥ؒ;Β;Βͯͨ͠
    • 2014೥4݄25೔ʹGMO ϖύϘೖࣾ
    • ෱ԬͷminneνʔϜʹ഑ଐ
    • 2015೥6݄ʹ౦ژͷminneνʔϜʹҠಈ
    • ޷͖ͳ৯΂෺:মௗͱഅࢗ

    View Slide

  3. LGTM

    View Slide

  4. LGTM
    • Looks good to meʂ(Αͦ͞͏ʂ)
    • ࠓճ͸ɺ͍ͭ΋࢖͍ͬͯΔʮLGTMʯ͸Ͳ͏
    ͍͏ͱ͜Ζ͕ʮΑͦ͞͏ʯͱࢥͬͯॻ͍͍ͯ
    Δ͔Λ·ͱΊ·͢

    View Slide

  5. ࠓ೔࿩͢͜ͱ
    • ίʔυϨϏϡʔͷ໨త
    • ͳʹΛϨϏϡʔ͢Δͷ͔
    • TipsΛ͚ͩ͢͜͠

    View Slide

  6. ΋ͪΖΜݸਓͷݟղΛଟ෼ʹؚΜ
    Ͱ͍·͢

    View Slide

  7. ίʔυϨϏϡʔͱ͸
    ίʔυϨϏϡʔʢӳ: Code reviewʣ͸ɺιϑ
    τ΢ΣΞ։ൃ޻ఔͰݟա͝͞ΕͨޡΓΛݕग़ɾ
    मਖ਼͢Δ͜ͱΛ໨తͱͯ͠ιʔείʔυͷମܥ
    తͳݕࠪʢࠪಡʣΛߦ͏࡞ۀͷ͜ͱɻ
    (ग़య)https://ja.wikipedia.org/wiki/ίʔυϨϏϡʔ

    View Slide

  8. ίʔυϨϏϡʔͱ͸
    ίʔυϨϏϡʔʢӳ: Code reviewʣ͸ɺιϑ
    τ΢ΣΞ։ൃ޻ఔͰݟա͝͞ΕͨޡΓΛݕग़ɾ
    मਖ਼͢Δ͜ͱΛ໨తͱͯ͠ιʔείʔυͷମܥ
    తͳݕࠪʢࠪಡʣΛߦ͏࡞ۀͷ͜ͱɻ
    (ग़య)https://ja.wikipedia.org/wiki/ίʔυϨϏϡʔ

    View Slide

  9. ݟա͝͞ΕͨޡΓ
    ϓϩάϥϚͷεΩϧʹΑΒͣɺॻ͖ԼΖ͞Εͨ͹͔Γͷιʔείʔυ͸જࡏతʹό
    ά΍ηΩϡϦςΟϗʔϧʢॻࣜจࣈྻ໰୊ɺڝ߹ঢ়ଶɺϝϞϦϦʔΫɺόοϑΝΦʔ
    όʔϥϯͳͲʣͳͲͷෆ۩߹͕ೖΓࠐΜͰ͍Δ͜ͱ͕ଟ͍ɻ
    ιϑτ΢ΣΞ඼࣭ΛߴΊΔͨΊʹ͸͜ͷΑ͏ͳෆ۩߹Λআڈ͍ͯ͘͠ඞཁ͕͋Δɻ
    ͜ͷෆ۩߹Λൃݟ͠मਖ਼͢ΔͨΊͷ1ͭͷํ๏͕ɺιʔείʔυͷࠪಡΛߦ͏͜
    ͱɺ͢ͳΘͪίʔυϨϏϡʔͰ͋Δɻ
    ΦϯϥΠϯͷιϑτ΢ΣΞϦϙδτϦʢಗ໊ͷCVSͳͲʣΛ࢖͏ͱɺෳ਺ͷݸਓ͕
    ڞಉͰίʔυϨϏϡʔΛߦ͏͜ͱ͕Ͱ͖Δɻ
    ίʔυϨϏϡʔΛࣗಈԽ͢Διϑτ΢ΣΞΛ࢖͏ͱɺιϑτ΢ΣΞ։ൃऀͷ୅ΘΓ
    ʹయܕతͳηΩϡϦςΟϗʔϧΛݟ͚ͭΔ࡞ۀΛߦͬͯ͘ΕΔɻͦͷΑ͏ͳιϑτ
    ΢ΣΞͷྫͱͯ͠ɺFlawfinder ΍ Rough Auditing Tool for Security(RATS) ͳͲ͕
    ͋Δɻ
    (ग़య)https://ja.wikipedia.org/wiki/ίʔυϨϏϡʔ

    View Slide

  10. ͭ·Γ
    ΈΜͳͰόά΍ηΩϡϦςΟʔϗʔ
    ϧΛݟ͚ͭΔ࡞ۀ

    View Slide

  11. Ͱ΋ຊ౰ʹͦΕ͚ͩͳͷ͔ʁʁ

    View Slide

  12. ίʔυϨϏϡʔͷ໨త
    • ੹೚Λڞ༗͢Δ
    • ଐਓԽΛഉআ͢Δ
    • ίʔυͷ࣭Λ্͛Δ

    View Slide

  13. ੹೚Λڞ༗͢Δ
    • ϨϏϡʔ͢Δ͜ͱ͸ͦͷίʔυʹରͯ͠੹೚
    Λ࣋ͭ͜ͱ
    • ͦͷίʔυʹ໰୊͕ͳ͍ͱ͍͏͜ͱͷอূ
    ਓʹͳΔ
    • ࣗ෼ࣄʹ͢Δ
    • ೲಘ͢Δ·Ͱ࿩͠߹͏ඞཁ͕͋Δ

    View Slide

  14. ίʔυϨϏϡʔͷ໨త
    • ੹೚Λڞ༗
    • ଐਓԽΛഉআ͢Δ
    • ίʔυͷ࣭Λ্͛Δ

    View Slide

  15. ଐਓԽΛͳ͘͢
    • ʮࠓ೔͸ʓʓ͞Μ͕ٳΈ͔ͩΒରԠͰ͖ͳ͍ʯ
    ʹͳΒͳ͍Α͏ʹ͢Δ
    • ͩΕͰ΋͢΂ͯͷίʔυΛϝϯςͰ͖ΔΑ
    ͏ʹͳΔ

    View Slide

  16. ίʔυϨϏϡʔͷ໨త
    • ੹೚Λڞ༗
    • ଐਓԽΛഉআ͢Δ
    • ίʔυͷ࣭Λ্͛Δ

    View Slide

  17. ίʔυͷ࣭Λ্͛Δ
    • ίʔυΛཧղͰ͖Δ͔
    • ޡΓ(όά)͸ͳ͍͔
    • ϛΫϩͳόά
    • ϚΫϩͳόά
    • ίʔυ͸อकͰ͖Δ͔
    • ૉ੖Β͍͠ίʔυ͸ͳ͍͔

    View Slide

  18. ίʔυΛཧղͰ͖Δ͔
    • ίʔυΛཧղ͢ΔͨΊʹ͸஌͕ࣝඞཁ
    • ݴޠ
    • ϑϨʔϜϫʔΫ
    • ϥΠϒϥϦ
    • ΞϧΰϦζϜ
    • αʔϏε(ϏδωεϩδοΫ)
    • ஌ࣝͷڞ༗
    • ͩΕ΋͕ཧղͰ͖ΔΑ͏ʹͳΒͳ͍ͱଐਓԽ
    ͕͢͢Ή

    View Slide

  19. ίʔυΛཧղͰ͖Δ͔
    • Ͳ͏΍ͬͯཧղ͢Δ͔
    • ͦͷίʔυ͸Ͳ͏ͯ͠ඞཁͳͷ͔?Λҙࣝ͠
    ͯಡΉ
    • Θ͔Βͳͯ͘٧·ͬͨΒฉ͘

    View Slide

  20. ίʔυΛཧղͰ͖Δ͔
    • Θ͔Βͳͯ͘٧·ͬͨΒฉ͘
    • ͜Ε΋ཱ೿ͳίʔυϨϏϡʔ
    • ฉ͔Εͨํ΋ɺઆ໌͢Δ͜ͱͰཧղ͕ਂ·
    Δ
    • ͓ޓ͍ͷ੒௕ػձͱͳΔ

    View Slide

  21. ͍͢͝ΤϯδχΞ͞Μ͕ҙຯΘ͔
    Μͳ͍ίʔυॻ͍ͨΒόάͷՄೳ
    ੑ͕ߴ͍(ؾ͕͢Δ)

    View Slide

  22. ·͕ͪͬͯ΋ɺ
    ʰʮ͋ͷਓʯͷ͜ͱ͔ͩΒɺ͜ͷ
    ίʔυʹ͸ࢲͷߟ͕͑ٴ͹ͳ͍ਸ
    ߴͳཧ༝͕͋Δʹҧ͍ͳ͍ʱ
    ͳͲͲࢥͬͯޱΛ͙ͭ·ͳ͍͜ͱɻ
    ·ͣฉ͜͏ɻ

    View Slide

  23. ίʔυͷ࣭Λ্͛Δ
    • ίʔυΛཧղͰ͖Δ͔
    • ޡΓ(όά)͸ͳ͍͔
    • ϛΫϩͳόά
    • ϚΫϩͳόά
    • ίʔυ͸อकͰ͖Δ͔
    • ૉ੖Β͍͠ίʔυ͸ͳ͍͔

    View Slide

  24. ϛΫϩͳόά
    • ϧʔϓ
    • ifͷ৚݅
    • typo͕ͳ͍͔
    • ଎౓ʹ໰୊͸ͳ͍͔

    View Slide

  25. ϛΫϩͳόά
    • ඞཁͳ஌͕ࣝগͳ͘ɺؒҧ͍͕͸͖ͬΓͱࢦ
    ఠͰ͖ΔͷͰ௿ίετ
    • linter(੩తίʔυղੳπʔϧ)Ͱػցతʹݟͭ
    ͚Δ͜ͱ͕Ͱ͖Δ͜ͱ΋ଟ͍
    • ex) rubocop

    View Slide

  26. ػցʹͰ͖Δ͜ͱ͸ͳΔ΂͘ػ
    ցʹ΍ͬͯ΋Β͍·͠ΐ͏

    View Slide

  27. ίʔυͷ࣭Λ্͛Δ
    • ίʔυΛཧղͰ͖Δ͔
    • ޡΓ(όά)͸ͳ͍͔
    • ϛΫϩͳόά
    • ϚΫϩͳόά
    • ίʔυ͸อकͰ͖Δ͔
    • ૉ੖Β͍͠ίʔυ͸ͳ͍͔

    View Slide

  28. ϚΫϩͳόά
    • αʔϏεͱͯؒ͠ҧ͍ͬͯͳ͍͔
    • ࠓ·Ͱͷ࢓༷ͱໃ६͸ͳ͍͔
    • ฏߦͯ͠࡞͍ͬͯΔଞͷػೳͱͷໃ६͸ͳ͍
    ͔
    • ಛఆͷ৚݅ͷ࣌ʹഁ୼͠ͳ͍͔

    View Slide

  29. ϚΫϩͳόά
    • ݟ͚ͭΔͷ͸ൺֱత೉͍͠
    • αʔϏεͷ஌͕ࣝඞཁʹͳΔ
    • ࣌ؒ΋͔͔Δ͠ߴίετ

    View Slide

  30. αʔϏεʹ഑ଐ͞Ε͙ͯ͢ݟͭ
    ͚Δͷ͸೉͍͠

    View Slide

  31. Ͳ͏͢Ε͹ݟ͚ͭΒΕΔ͔?

    View Slide

  32. ஌ࣝΛ૿΍͔͢͠ͳ͍

    View Slide

  33. ഑ଐ͞Ε͙ͯ͢ʹ͸͜ͷϨϕϧͷ
    ϨϏϡʔ͸ٻΊΒΕͳ͍ͷͰɺয
    Βͣʹண࣮ʹ͍͜͏

    View Slide

  34. ίʔυͷ࣭Λ্͛Δ
    • ίʔυΛཧղͰ͖Δ͔
    • ޡΓ(όά)͸ͳ͍͔
    • ϛΫϩͳόά
    • ϚΫϩͳόά
    • ίʔυ͸อकͰ͖Δ͔
    • ૉ੖Β͍͠ίʔυ͸ͳ͍͔

    View Slide

  35. ίʔυ͸อकͰ͖Δ͔
    • ίʔυ͸γϯϓϧ͔
    • Մಡੑ͸ߴ͍͔
    • ςετ͸଍Γ͍ͯΔ͔

    View Slide

  36. ίʔυ͸γϯϓϧ͔
    • ૄ݁߹ͳΫϥεʹͳ͍ͬͯΔ͔
    • DRYʹͳ͍ͬͯΔ͔
    • ܧঝ͸ਂ͗͢ͳ͍͔
    • Ϋϥε͸େ͖͗͢ͳ͍͔
    • ૣ͗͢Δ࠷దԽ͸ͳ͍͔

    View Slide

  37. ίʔυ͸อकͰ͖Δ͔
    • ίʔυ͸γϯϓϧ͔
    • Մಡੑ͸ߴ͍͔
    • ςετ͸଍Γ͍ͯΔ͔

    View Slide

  38. Մಡੑ͸ߴ͍͔
    • ୭Ͱ΋ಡΊ͹ॲཧͷ಺༰͕Θ͔Δίʔυ͕ඞ

    • ࣍͸୭͕ฤू͢Δ͔Θ͔Βͳ͍
    • ͦ΋ͦ΋໌೔ͷࣗ෼͸ଞਓ

    View Slide

  39. ໊෇͚
    • Ϋϥε໊/ϝιου໊/ม਺໊ͳͲΛద੾ͳ໊
    લʹ͢Δ͜ͱ
    • ՄಡੑΛߴΊΔͨΊʹ͸ద੾ͳ໊લ͕ඞཁ
    • ΊͬͪΌ೉͍͠
    • Αٞ͘࿦ʹͳΔ

    View Slide

  40. ద੾
    • ద੾ͳ໊લ͕෇͍͍ͯΔͱॲཧͷৄࡉΛ௥͏ճ਺
    ͕ݮΔ
    • a1, a2ͱ͍͏ϝιου໊ͱ, delete, nameͱ͍͏
    ϝιου໊
    • ϝιουʹӕ͕ͳ͍͔Ͳ͏͔ΛΑ͘ߟ͑ͳ͍ͱό
    άͷԹচʹͳΔ
    • deleteͰupdateΛ͍ͯͨ͠ͱ͔ɺdeleteͰࣦഊ
    ͯ͠΋trueΛฦ͍ͯͨ͠ͱ͔

    View Slide

  41. ίʔυ͸อकͰ͖Δ͔
    • ίʔυ͸γϯϓϧ͔
    • Մಡੑ͸ߴ͍͔
    • ςετ͸଍Γ͍ͯΔ͔

    View Slide

  42. ςετ͸଍Γ͍ͯΔ͔
    • ྫ͑͹
    • rubyͷόʔδϣϯΞοϓ
    • railsͷόʔδϣϯΞοϓ
    • େ͖ΊͷػೳͷϦϑΝΫλϦϯά
    • ࣮֬ʹྑ͘ͳΔ͸ͣͳͷʹɺςετ͕ͳ͍ͱාͯ͘Ͱ͖
    ͳ͘ͳͬͯ͠·͏
    • ͍ͭͷؒʹ͔࠷৽ʹ௥͍͚ͭͳΔ
    • ηΩϡϦςΟʔϦεΫ
    • Ͳ͏ͤͳΒॻ͖௚ͨ͠΄͏͕଎͍ͷͰ͸

    View Slide

  43. ίʔυͷ࣭Λ্͛Δ
    • ίʔυΛཧղͰ͖Δ͔
    • ޡΓ(όά)͸ͳ͍͔
    • ϛΫϩͳόά
    • ϚΫϩͳόά
    • ίʔυ͸อकͰ͖Δ͔
    • ૉ੖Β͍͠ίʔυ͸ͳ͍͔

    View Slide

  44. ૉ੖Β͍͠ίʔυ͸ͳ͍͔
    • ૉ੖Β͍͠ίʔυΛݟ͚ͭͨΒੵۃతʹڞ༗
    ͠Α͏
    • ྑ͍ίʔυ͸ΈΜͳͰ๙ΊΑ͏
    • ͔࣍Β͸ΈΜͳͰͦΜͳίʔυΛ͔͚ΔΑ
    ͏ʹͳΖ͏

    View Slide

  45. ೔ʑͷϨϏϡʔͰؾΛ͚ͭΔ͜ͱ

    View Slide

  46. ϨϏϡʔස౓
    • Ͱ͖Δ͚ͩૣ͘ϨϏϡʔ͠Α͏
    • ࢖ΘΕͳ͍ίʔυ͸͙͢෗Δ
    • ίʔυ͸ॻ͍ͨ௚ޙ͔Β๨Ε͍ͯ͘
    • ϨϏϡʔ → मਖ਼ → ࠶ϨϏϡʔͷαΠΫϧ
    ͸খ͍͞΄͏͕Φʔόʔϔου͕গͳ͍

    View Slide

  47. ٞ࿦ʹ٬؍ੑ͕଍Γͳ͍࣌
    • ϝιου໊ͳͲͰAͱBͲ͕ͬͪΘ͔Γ΍͍͢
    ͔൑அͰ͖ͳ͍͕࣌͋Δ
    • ୈࡾऀ͕Ͳ͏͍͏൑அΛ͍ͯ͠Δ͔Λௐ΂Δ
    ͱೲಘͰ͖Δ͜ͱ͕ଟ͍
    • ex)ݴޠͰ͸Ͳ͏͍͏نଇͰ໊લΛ͚͍ͭͯ
    Δ͔?/ϑϨʔϜϫʔΫ͸?/ϥΠϒϥϦ͸?

    View Slide

  48. ϨϏϡʔΛॻ͘ͱ͖
    • ཧ༝Λॻ͘
    • ྫΛग़͢
    ͱฦ౴͠΍͍͢

    View Slide

  49. ʮ͜ͷॲཧ͸Կ͕͍ͨ͠ͷ?ʯ
    ↑Ͳ͏౴͑·͔͢?

    View Slide

  50. ʮ͜ͷॲཧ͸ʓʓͱ͍͏͜ͱΛ΍Γ͍ͨΑ͏ʹ
    ݟ͑ΔͷͰ͕͢ɺͦΕͳΒ͹☓☓☓ͱ͍͏ॻ͖ํ
    ʹม͑ͨ΄͏͕γϯϓϧʹͳΓͦ͏Ͱ͢ʯ
    ↑Ͳ͏౴͑·͔͢?

    View Slide

  51. ࠷ޙʹ

    View Slide

  52. େࣄͳ͜ͱ
    • αʔϏεΛյ͞ͳ͍͜ͱΛνʔϜͰ୲อ͢Δ
    • ະདྷʹΘͨͬͯ։ൃΛଓ͚ΒΕΔΑ͏ʹ͢Δ
    • ࣗ෼͕ͨͪ੒௕͢Δ

    View Slide

  53. ΋ͬͱΘ͔Γ΍͍͢ࢿྉͳ͍ͷ?
    • ࠓճͷࢿྉΛॻ͖ऴ͑ͯʮ͏ʙΜΘ͔Γʹ͘
    ͍ͳ͊ͬͯʯͬͯࢥͬͯάάͬͨΒɺಉ྅͕2
    ೥લʹॻ͍ͨࢿྉ͕͋ͬͨɻ
    • ͥΜͥΜιονͷ΄͏͕Θ͔Γ΍͍͢Α
    • https://speakerdeck.com/hisaichi5518/
    kodorebiyufalsehua

    View Slide

  54. ϨϏϡʔؔ܎Ͱ޷͖ͳεϥΠυ
    • ͦ͘ίʔυͷ࿩ http://www.slideshare.net/
    rootmoon/7-37892729
    • ϨϏϡʔ͓͡͞Μͷ࿩ https://
    speakerdeck.com/seri/
    turakunaikodorebiyufalseyun-yong

    View Slide

  55. ίʔυϨϏϡʔͯ͠΋Β͏ଆͷ࿩
    • http://techlife.cookpad.com/entry/
    2015/03/30/174713

    View Slide