社内の新卒研修でコードレビューについての私見を共有しました
LGTMʹ͍ͭͯGMO ϖύϘ @amacou
View Slide
ࣗݾհ• @amacou• ݩSIer:2~3ಇ͍ͨޙɺؒ;Β;Βͯͨ͠• 20144݄25ʹGMO ϖύϘೖࣾ• ԬͷminneνʔϜʹଐ• 20156݄ʹ౦ژͷminneνʔϜʹҠಈ• ͖ͳ৯:মௗͱഅ
LGTM
LGTM• Looks good to meʂ(Αͦ͞͏ʂ)• ࠓճɺ͍͍ͭͬͯΔʮLGTMʯͲ͏͍͏ͱ͜Ζ͕ʮΑͦ͞͏ʯͱࢥͬͯॻ͍͍ͯΔ͔Λ·ͱΊ·͢
ࠓ͢͜ͱ• ίʔυϨϏϡʔͷత• ͳʹΛϨϏϡʔ͢Δͷ͔• TipsΛ͚ͩ͢͜͠
ͪΖΜݸਓͷݟղΛଟʹؚΜͰ͍·͢
ίʔυϨϏϡʔͱίʔυϨϏϡʔʢӳ: Code reviewʣɺιϑτΣΞ։ൃఔͰݟա͝͞ΕͨޡΓΛݕग़ɾमਖ਼͢Δ͜ͱΛతͱͯ͠ιʔείʔυͷମܥతͳݕࠪʢࠪಡʣΛߦ͏࡞ۀͷ͜ͱɻ(ग़య)https://ja.wikipedia.org/wiki/ίʔυϨϏϡʔ
ݟա͝͞ΕͨޡΓϓϩάϥϚͷεΩϧʹΑΒͣɺॻ͖ԼΖ͞Ε͔ͨΓͷιʔείʔυજࡏతʹόάηΩϡϦςΟϗʔϧʢॻࣜจࣈྻɺڝ߹ঢ়ଶɺϝϞϦϦʔΫɺόοϑΝΦʔόʔϥϯͳͲʣͳͲͷෆ۩߹͕ೖΓࠐΜͰ͍Δ͜ͱ͕ଟ͍ɻιϑτΣΞ࣭ΛߴΊΔͨΊʹ͜ͷΑ͏ͳෆ۩߹Λআڈ͍ͯ͘͠ඞཁ͕͋Δɻ͜ͷෆ۩߹Λൃݟ͠मਖ਼͢ΔͨΊͷ1ͭͷํ๏͕ɺιʔείʔυͷࠪಡΛߦ͏͜ͱɺ͢ͳΘͪίʔυϨϏϡʔͰ͋ΔɻΦϯϥΠϯͷιϑτΣΞϦϙδτϦʢಗ໊ͷCVSͳͲʣΛ͏ͱɺෳͷݸਓ͕ڞಉͰίʔυϨϏϡʔΛߦ͏͜ͱ͕Ͱ͖ΔɻίʔυϨϏϡʔΛࣗಈԽ͢ΔιϑτΣΞΛ͏ͱɺιϑτΣΞ։ൃऀͷΘΓʹయܕతͳηΩϡϦςΟϗʔϧΛݟ͚ͭΔ࡞ۀΛߦͬͯ͘ΕΔɻͦͷΑ͏ͳιϑτΣΞͷྫͱͯ͠ɺFlawfinder Rough Auditing Tool for Security(RATS) ͳͲ͕͋Δɻ(ग़య)https://ja.wikipedia.org/wiki/ίʔυϨϏϡʔ
ͭ·ΓΈΜͳͰόάηΩϡϦςΟʔϗʔϧΛݟ͚ͭΔ࡞ۀ
ͰຊʹͦΕ͚ͩͳͷ͔ʁʁ
ίʔυϨϏϡʔͷత• Λڞ༗͢Δ• ଐਓԽΛഉআ͢Δ• ίʔυͷ࣭Λ্͛Δ
Λڞ༗͢Δ• ϨϏϡʔ͢Δ͜ͱͦͷίʔυʹରͯ͠Λ࣋ͭ͜ͱ• ͦͷίʔυʹ͕ͳ͍ͱ͍͏͜ͱͷอূਓʹͳΔ• ࣗࣄʹ͢Δ• ೲಘ͢Δ·Ͱ͠߹͏ඞཁ͕͋Δ
ίʔυϨϏϡʔͷత• Λڞ༗• ଐਓԽΛഉআ͢Δ• ίʔυͷ࣭Λ্͛Δ
ଐਓԽΛͳ͘͢• ʮࠓʓʓ͞Μ͕ٳΈ͔ͩΒରԠͰ͖ͳ͍ʯʹͳΒͳ͍Α͏ʹ͢Δ• ͩΕͰͯ͢ͷίʔυΛϝϯςͰ͖ΔΑ͏ʹͳΔ
ίʔυͷ࣭Λ্͛Δ• ίʔυΛཧղͰ͖Δ͔• ޡΓ(όά)ͳ͍͔• ϛΫϩͳόά• ϚΫϩͳόά• ίʔυอकͰ͖Δ͔• ૉΒ͍͠ίʔυͳ͍͔
ίʔυΛཧղͰ͖Δ͔• ίʔυΛཧղ͢ΔͨΊʹ͕ࣝඞཁ• ݴޠ• ϑϨʔϜϫʔΫ• ϥΠϒϥϦ• ΞϧΰϦζϜ• αʔϏε(ϏδωεϩδοΫ)• ࣝͷڞ༗• ͩΕ͕ཧղͰ͖ΔΑ͏ʹͳΒͳ͍ͱଐਓԽ͕͢͢Ή
ίʔυΛཧղͰ͖Δ͔• Ͳ͏ͬͯཧղ͢Δ͔• ͦͷίʔυͲ͏ͯ͠ඞཁͳͷ͔?Λҙࣝͯ͠ಡΉ• Θ͔Βͳͯ͘٧·ͬͨΒฉ͘
ίʔυΛཧղͰ͖Δ͔• Θ͔Βͳͯ͘٧·ͬͨΒฉ͘• ͜ΕཱͳίʔυϨϏϡʔ• ฉ͔Εͨํɺઆ໌͢Δ͜ͱͰཧղ͕ਂ·Δ• ͓ޓ͍ͷػձͱͳΔ
͍͢͝ΤϯδχΞ͞Μ͕ҙຯΘ͔Μͳ͍ίʔυॻ͍ͨΒόάͷՄೳੑ͕ߴ͍(ؾ͕͢Δ)
·͕ͪͬͯɺʰʮ͋ͷਓʯͷ͜ͱ͔ͩΒɺ͜ͷίʔυʹࢲͷߟ͕͑ٴͳ͍ਸߴͳཧ༝͕͋Δʹҧ͍ͳ͍ʱͳͲͲࢥͬͯޱΛ͙ͭ·ͳ͍͜ͱɻ·ͣฉ͜͏ɻ
ϛΫϩͳόά• ϧʔϓ• ifͷ݅• typo͕ͳ͍͔• ʹͳ͍͔
ϛΫϩͳόά• ඞཁͳ͕ࣝগͳ͘ɺؒҧ͍͕͖ͬΓͱࢦఠͰ͖ΔͷͰίετ• linter(੩తίʔυղੳπʔϧ)Ͱػցతʹݟ͚ͭΔ͜ͱ͕Ͱ͖Δ͜ͱଟ͍• ex) rubocop
ػցʹͰ͖Δ͜ͱͳΔ͘ػցʹͬͯΒ͍·͠ΐ͏
ϚΫϩͳόά• αʔϏεͱͯؒ͠ҧ͍ͬͯͳ͍͔• ࠓ·Ͱͷ༷ͱໃ६ͳ͍͔• ฏߦͯ͠࡞͍ͬͯΔଞͷػೳͱͷໃ६ͳ͍͔• ಛఆͷ݅ͷ࣌ʹഁ͠ͳ͍͔
ϚΫϩͳόά• ݟ͚ͭΔͷൺֱత͍͠• αʔϏεͷ͕ࣝඞཁʹͳΔ• ͔͔࣌ؒΔ͠ߴίετ
αʔϏεʹଐ͞Ε͙ͯ͢ݟ͚ͭΔͷ͍͠
Ͳ͏͢Εݟ͚ͭΒΕΔ͔?
ࣝΛ૿͔͢͠ͳ͍
ଐ͞Ε͙ͯ͢ʹ͜ͷϨϕϧͷϨϏϡʔٻΊΒΕͳ͍ͷͰɺযΒͣʹண࣮ʹ͍͜͏
ίʔυอकͰ͖Δ͔• ίʔυγϯϓϧ͔• Մಡੑߴ͍͔• ςετΓ͍ͯΔ͔
ίʔυγϯϓϧ͔• ૄ݁߹ͳΫϥεʹͳ͍ͬͯΔ͔• DRYʹͳ͍ͬͯΔ͔• ܧঝਂ͗͢ͳ͍͔• Ϋϥεେ͖͗͢ͳ͍͔• ૣ͗͢Δ࠷దԽͳ͍͔
Մಡੑߴ͍͔• ୭ͰಡΊॲཧͷ༰͕Θ͔Δίʔυ͕ඞཁ• ࣍୭͕ฤू͢Δ͔Θ͔Βͳ͍• ͦͦ໌ͷࣗଞਓ
໊͚• Ϋϥε໊/ϝιου໊/ม໊ͳͲΛదͳ໊લʹ͢Δ͜ͱ• ՄಡੑΛߴΊΔͨΊʹదͳ໊લ͕ඞཁ• ΊͬͪΌ͍͠• Αٞ͘ʹͳΔ
ద• దͳ໊લ͕͍͍ͯΔͱॲཧͷৄࡉΛ͏ճ͕ݮΔ• a1, a2ͱ͍͏ϝιου໊ͱ, delete, nameͱ͍͏ϝιου໊• ϝιουʹӕ͕ͳ͍͔Ͳ͏͔ΛΑ͘ߟ͑ͳ͍ͱόάͷԹচʹͳΔ• deleteͰupdateΛ͍ͯͨ͠ͱ͔ɺdeleteͰࣦഊͯ͠trueΛฦ͍ͯͨ͠ͱ͔
ςετΓ͍ͯΔ͔• ྫ͑• rubyͷόʔδϣϯΞοϓ• railsͷόʔδϣϯΞοϓ• େ͖ΊͷػೳͷϦϑΝΫλϦϯά• ࣮֬ʹྑ͘ͳΔͣͳͷʹɺςετ͕ͳ͍ͱාͯ͘Ͱ͖ͳ͘ͳͬͯ͠·͏• ͍ͭͷؒʹ͔࠷৽ʹ͍͚ͭͳΔ• ηΩϡϦςΟʔϦεΫ• Ͳ͏ͤͳΒॻ͖ͨ͠΄͏͕͍ͷͰ
ૉΒ͍͠ίʔυͳ͍͔• ૉΒ͍͠ίʔυΛݟ͚ͭͨΒੵۃతʹڞ༗͠Α͏• ྑ͍ίʔυΈΜͳͰ๙ΊΑ͏• ͔࣍ΒΈΜͳͰͦΜͳίʔυΛ͔͚ΔΑ͏ʹͳΖ͏
ʑͷϨϏϡʔͰؾΛ͚ͭΔ͜ͱ
ϨϏϡʔස• Ͱ͖Δ͚ͩૣ͘ϨϏϡʔ͠Α͏• ΘΕͳ͍ίʔυ͙͢Δ• ίʔυॻ͍ͨޙ͔ΒΕ͍ͯ͘• ϨϏϡʔ → मਖ਼ → ࠶ϨϏϡʔͷαΠΫϧখ͍͞΄͏͕Φʔόʔϔου͕গͳ͍
ٞʹ٬؍ੑ͕Γͳ͍࣌• ϝιου໊ͳͲͰAͱBͲ͕ͬͪΘ͔Γ͍͔͢அͰ͖ͳ͍͕࣌͋Δ• ୈࡾऀ͕Ͳ͏͍͏அΛ͍ͯ͠Δ͔ΛௐΔͱೲಘͰ͖Δ͜ͱ͕ଟ͍• ex)ݴޠͰͲ͏͍͏نଇͰ໊લΛ͚͍ͭͯΔ͔?/ϑϨʔϜϫʔΫ?/ϥΠϒϥϦ?
ϨϏϡʔΛॻ͘ͱ͖• ཧ༝Λॻ͘• ྫΛग़͢ͱฦ͍͢͠
ʮ͜ͷॲཧԿ͕͍ͨ͠ͷ?ʯ↑Ͳ͏͑·͔͢?
ʮ͜ͷॲཧʓʓͱ͍͏͜ͱΛΓ͍ͨΑ͏ʹݟ͑ΔͷͰ͕͢ɺͦΕͳΒ☓☓☓ͱ͍͏ॻ͖ํʹม͑ͨ΄͏͕γϯϓϧʹͳΓͦ͏Ͱ͢ʯ↑Ͳ͏͑·͔͢?
࠷ޙʹ
େࣄͳ͜ͱ• αʔϏεΛյ͞ͳ͍͜ͱΛνʔϜͰ୲อ͢Δ• ະདྷʹΘͨͬͯ։ൃΛଓ͚ΒΕΔΑ͏ʹ͢Δ• ͕ࣗͨͪ͢Δ
ͬͱΘ͔Γ͍͢ࢿྉͳ͍ͷ?• ࠓճͷࢿྉΛॻ͖ऴ͑ͯʮ͏ʙΜΘ͔Γʹ͍͘ͳ͊ͬͯʯͬͯࢥͬͯάάͬͨΒɺಉ྅͕2લʹॻ͍ͨࢿྉ͕͋ͬͨɻ• ͥΜͥΜιονͷ΄͏͕Θ͔Γ͍͢Α• https://speakerdeck.com/hisaichi5518/kodorebiyufalsehua
ϨϏϡʔؔͰ͖ͳεϥΠυ• ͦ͘ίʔυͷ http://www.slideshare.net/rootmoon/7-37892729• ϨϏϡʔ͓͡͞Μͷ https://speakerdeck.com/seri/turakunaikodorebiyufalseyun-yong
ίʔυϨϏϡʔͯ͠Β͏ଆͷ• http://techlife.cookpad.com/entry/2015/03/30/174713