$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

  2. ࣗݾ঺հ • @amacou • ݩSIer:2~3೥ಇ͍ͨޙɺ਺೥ؒ;Β;Βͯͨ͠ • 2014೥4݄25೔ʹGMO ϖύϘೖࣾ • ෱ԬͷminneνʔϜʹ഑ଐ

    • 2015೥6݄ʹ౦ژͷminneνʔϜʹҠಈ • ޷͖ͳ৯΂෺:মௗͱഅࢗ
  3. LGTM

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

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

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

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

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

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

    ʹయܕతͳηΩϡϦςΟϗʔϧΛݟ͚ͭΔ࡞ۀΛߦͬͯ͘ΕΔɻͦͷΑ͏ͳιϑτ ΢ΣΞͷྫͱͯ͠ɺFlawfinder ΍ Rough Auditing Tool for Security(RATS) ͳͲ͕ ͋Δɻ (ग़య)https://ja.wikipedia.org/wiki/ίʔυϨϏϡʔ
  10. ͭ·Γ ΈΜͳͰόά΍ηΩϡϦςΟʔϗʔ ϧΛݟ͚ͭΔ࡞ۀ

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

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

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

    ೲಘ͢Δ·Ͱ࿩͠߹͏ඞཁ͕͋Δ
  14. ίʔυϨϏϡʔͷ໨త • ੹೚Λڞ༗ • ଐਓԽΛഉআ͢Δ • ίʔυͷ࣭Λ্͛Δ

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

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

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

    ίʔυ͸อकͰ͖Δ͔ • ૉ੖Β͍͠ίʔυ͸ͳ͍͔
  18. ίʔυΛཧղͰ͖Δ͔ • ίʔυΛཧղ͢ΔͨΊʹ͸஌͕ࣝඞཁ • ݴޠ • ϑϨʔϜϫʔΫ • ϥΠϒϥϦ •

    ΞϧΰϦζϜ • αʔϏε(ϏδωεϩδοΫ) • ஌ࣝͷڞ༗ • ͩΕ΋͕ཧղͰ͖ΔΑ͏ʹͳΒͳ͍ͱଐਓԽ ͕͢͢Ή
  19. ίʔυΛཧղͰ͖Δ͔ • Ͳ͏΍ͬͯཧղ͢Δ͔ • ͦͷίʔυ͸Ͳ͏ͯ͠ඞཁͳͷ͔?Λҙࣝ͠ ͯಡΉ • Θ͔Βͳͯ͘٧·ͬͨΒฉ͘

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

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

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

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

    ίʔυ͸อकͰ͖Δ͔ • ૉ੖Β͍͠ίʔυ͸ͳ͍͔
  24. ϛΫϩͳόά • ϧʔϓ • ifͷ৚݅ • typo͕ͳ͍͔ • ଎౓ʹ໰୊͸ͳ͍͔

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

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

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

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

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

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

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

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

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

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

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

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

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

  38. Մಡੑ͸ߴ͍͔ • ୭Ͱ΋ಡΊ͹ॲཧͷ಺༰͕Θ͔Δίʔυ͕ඞ ཁ • ࣍͸୭͕ฤू͢Δ͔Θ͔Βͳ͍ • ͦ΋ͦ΋໌೔ͷࣗ෼͸ଞਓ

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

  40. ద੾ • ద੾ͳ໊લ͕෇͍͍ͯΔͱॲཧͷৄࡉΛ௥͏ճ਺ ͕ݮΔ • a1, a2ͱ͍͏ϝιου໊ͱ, delete, nameͱ͍͏ ϝιου໊

    • ϝιουʹӕ͕ͳ͍͔Ͳ͏͔ΛΑ͘ߟ͑ͳ͍ͱό άͷԹচʹͳΔ • deleteͰupdateΛ͍ͯͨ͠ͱ͔ɺdeleteͰࣦഊ ͯ͠΋trueΛฦ͍ͯͨ͠ͱ͔
  41. ίʔυ͸อकͰ͖Δ͔ • ίʔυ͸γϯϓϧ͔ • Մಡੑ͸ߴ͍͔ • ςετ͸଍Γ͍ͯΔ͔

  42. ςετ͸଍Γ͍ͯΔ͔ • ྫ͑͹ • rubyͷόʔδϣϯΞοϓ • railsͷόʔδϣϯΞοϓ • େ͖ΊͷػೳͷϦϑΝΫλϦϯά •

    ࣮֬ʹྑ͘ͳΔ͸ͣͳͷʹɺςετ͕ͳ͍ͱාͯ͘Ͱ͖ ͳ͘ͳͬͯ͠·͏ • ͍ͭͷؒʹ͔࠷৽ʹ௥͍͚ͭͳΔ • ηΩϡϦςΟʔϦεΫ • Ͳ͏ͤͳΒॻ͖௚ͨ͠΄͏͕଎͍ͷͰ͸
  43. ίʔυͷ࣭Λ্͛Δ • ίʔυΛཧղͰ͖Δ͔ • ޡΓ(όά)͸ͳ͍͔ • ϛΫϩͳόά • ϚΫϩͳόά •

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

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

  46. ϨϏϡʔස౓ • Ͱ͖Δ͚ͩૣ͘ϨϏϡʔ͠Α͏ • ࢖ΘΕͳ͍ίʔυ͸͙͢෗Δ • ίʔυ͸ॻ͍ͨ௚ޙ͔Β๨Ε͍ͯ͘ • ϨϏϡʔ →

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

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

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

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

  51. ࠷ޙʹ

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

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

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

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