レガシーコードの触り方 / Working Effectively with Legacy Code

レガシーコードの触り方 / Working Effectively with Legacy Code

オープンセミナー2017@岡山

9f3a83db74bee75a64b5e6ed106a775c?s=128

Takuto Wada

May 13, 2017
Tweet

Transcript

  1. ϨΨγʔίʔυͷ ৮Γํ ࿨ా୎ਓ !U@XBEB  .BZ !ΦʔϓϯηϛφʔԬࢁ

  2. ࿨ా୎ਓ JEUXBEB !U@XBEB HJUIVCUXBEB

  3. None
  4. ひとり歩きするスタンド ελϯυ໊ϫΠϧυɾαόϯφ

  5. assert(typeof item.id === 'strong') | | | | | |

    | false | | "foo" | Item{id:"foo",name:"bar"} "string" --- [string] 'strong' +++ [string] typeof item.id @@ -1,6 +1,6 @@ str -o +i ng https://github.com/power-assert-js/power-assert power-assert
  6. ΑΖ͓͘͠ئ͍͠·͢

  7. ݱ৔͔ΒͷதܧͰ͢

  8. ർฐ͖ͬͨ͠ݱ৔

  9. IUUQTXXXqJDLSDPNQIPUPTPLJOBXBTPCB ߥΈ͖ͬͨίʔυ

  10. ര஄ॲཧͷΑ͏ͳϦϦʔε

  11. ͭͷlͳΒΘ͠z

  12. IUUQTXXXqJDLSDPNQIPUPTELBMP lςετΛॻ࣌ؒ͘͸ͳ͍z

  13. ετϨε ςετ

  14. ࣗಈςετ ετϨε

  15. ςετΛॻ͕࣌ؒ͘ͳ͍ͷͰ ͸ͳ͘ɺςετΛॻ͔ͳ͍͔ Β͕࣌ؒͳ͘ͳΔͷͰ͢ɻ

  16. lಈ͘ίʔυʹ৮ΕΔͳz IUUQTXXXqJDLSDPNQIPUPT!/

  17. &EJU1SBZ͸ࢮ͕଴͍ͬͯΔ

  18. $PWFS.PEJGZ

  19. w ʮςετΛॻ͕࣌ؒ͘ͳ͍ʯͷͰ͸ ͳ͘ʮςετΛॻ͔ͳ͍͔Β͕࣌ؒ ͳ͘ͳΔʯ w ʮಈ͘ίʔυʹ৮ΕΔͳʯͱಆ͏ɻ ৮Βͳ͘ͱ΋पΓ͕มΘͬͯಈ͔ͳ ͘ͳΔɻ৮Εͳ͚Ε͹ίʔυ͸؇΍ ͔ʹࢮΜͰ͍͘ ͭͷʮͳΒΘ͠ʯͱಆ͏

  20. ͭͷlಓ͠Δ΂z

  21. w ʮϨΨγʔίʔυͷδϨϯϚʯ w lίʔυΛมߋ͢ΔͨΊʹ͸ςετΛ੔උ͢Δ ඞཁ͕͋Δɻଟ͘ͷ৔߹ɺςετΛ੔උ͢Δ ͨΊʹ͸ɺίʔυΛมߋ͢Δඞཁ͕͋Δz w ϨΨγʔίʔυʹ৮ΔͨΊͷ
 ޠኮͱٕ๏Λ੔ཧͨ͠ຊ w

    TUBDLPWFSqPXDPN͔Βͷ
 ඃݴٴ਺ୈҐ ϨΨγʔίʔυվળΨΠυ
  22. w ϨΨγʔίʔυվળΨΠυΑΓ΍΍ந৅ ౓͕ߴ͍ w ιϑτ΢ΣΞͷϦΤϯδχΞϦϯάΛߦ ͏ͭͷબ୒ࢶΛ͍ࣔͯ͠Δ w ϦϑΝΫλϦϯά w ϦΞʔΩςΫςΟϯά

    w ϏοάɾϦϥΠτ ϨΨγʔιϑτ΢ΣΞվળΨΠυ
  23. Ͳ͜ʹςετΛ ॻ͍͍͔ͯ͘

  24. ʮ௧ΜͩՕॴʯͱʮख͕ಧ͘Ռ࣮ʯ

  25. w ϦεΫ w खಈςετͷίετ w ࣗಈԽίετ ςετͷτϦΞʔδ

  26. ςετέʔεΛҰཡʹ·ͱΊΔ ςετέʔε σβΠϯมߋ ηΩϡϦςΟΞϥʔτ औҾཤྺ ޱ࠲ͷౚ݁ ৽نϢʔβొ࿥ ݕࡧ݁Ռͷฒͼସ͑ ͓ۚͷೖۚ ৼΓࠐΈͷ֬ೝ

  27. ϦεΫΛݟੵ΋Δ ςετέʔε ϦεΫ σβΠϯมߋ ηΩϡϦςΟΞϥʔτ औҾཤྺ ޱ࠲ͷౚ݁ ৽نϢʔβొ࿥ ݕࡧ݁Ռͷฒͼସ͑ ͓ۚͷೖۚ

    ৼΓࠐΈͷ֬ೝ
  28. खಈςετͷίετΛݟੵ΋Δ ςετέʔε ϦεΫ खಈςετͷ ίετ σβΠϯมߋ ηΩϡϦςΟΞϥʔτ औҾཤྺ ޱ࠲ͷౚ݁ ৽نϢʔβొ࿥

    ݕࡧ݁Ռͷฒͼସ͑ ͓ۚͷೖۚ ৼΓࠐΈͷ֬ೝ
  29. ࣗಈԽίετΛݟੵ΋Δ ςετέʔε ϦεΫ खಈςετͷ ίετ ࣗಈԽίετ σβΠϯมߋ ηΩϡϦςΟΞϥʔτ औҾཤྺ ޱ࠲ͷౚ݁

    ৽نϢʔβొ࿥ ݕࡧ݁Ռͷฒͼସ͑ ͓ۚͷೖۚ ৼΓࠐΈͷ֬ೝ
  30. ༏ઌॱҐΛ෇͚ͯฒ΂ସ͑Δ ςετέʔε ϦεΫ खಈςετͷ ίετ ࣗಈԽίετ ޱ࠲ͷౚ݁ ৼΓࠐΈͷ֬ೝ औҾཤྺ ݕࡧ݁Ռͷฒͼସ͑

    ͓ۚͷೖۚ ηΩϡϦςΟΞϥʔτ ৽نϢʔβొ࿥ σβΠϯมߋ
  31. Ͳ͏ςετΛ ॻ͍͍͔ͯ͘

  32. w ςετ͕ͳ͍ͷ͸طʹઃܭ͕ѱ͍ஹީ w ઃܭ࣮૷Λม͑Δͷ͕લఏ w ࣮૷ͷςετΛॻ͔ͳ͍͜ͱ w ςετ͕Χόʔ͢Δൣғʹ༡ͼΛ࣋ͨ ͤɺΧόʔൣғ಺ΛϦϑΝΫλϦϯά w

    ঢ়گʹԠͯ͡&&ςετΛ࢖͍͜ͳ͢ ઃܭͷՄಈҬΛ֬อ͢Δ
  33. w ࠷ॳ͔Βશ෦΍Ζ͏ͱ͠ͳ͍ w ςετۦಈʹͩ͜ΘΔͳ w ςετϑΝʔετʹͩ͜ΘΔͳ w ʮϢχοτʯςετʹͩ͜ΘΔͳ w ςετͷ࣮ߦ଎౓ʹͩ͜ΘΔͳ

    w ςετͷ໢ཏੑʹͩ͜ΘΔͳ ͩ͜ΘΔͳ
  34. w ྑ͍Ϣχοτςετͷࢦඪʹ΋༏ઌ ౓͕͋Δ w ࠶ݱɺ܁Γฦ͠Մೳ 3FQFBUBCMF  w ಠཱ͍ͯ͠Δ *OEFQFOEFOU

     w ଞ͸ͦΕ͔ΒͰ͍͍ ͩ͜ΘΖ͏
  35. w ઀߹෦ͷݕ౼ͱۛຯ w ߜΓࠐΈ఺ͷൃݟͱґଘͷ෼཭ w ࠶ݱੑ͋Δςετϋʔωεͷ੔උ w ௒ूதฤू )ZQFSBXBSF&EJUJOH 

    w ίϯύΠϥ*%&·͔ͤ w ࢓༷Խςετ w ࢼߦϦϑΝΫλϦϯά ϨΨγʔίʔυվળͷٕ๏ ৄ͘͠͸ σϞͰ
  36. σϞطʹୀ৬ͨ͠ ઌഐ͕ॻ͍ͨ ṖͷίʔυΛҾ͖ܧ͙

  37. IUUQTXXXqJDLSDPNQIPUPTUPNQBHFOFU ςετ͸඼࣭Λ্͛ͳ͍

  38. w ඼࣭͕ʮΘ͔ΔʯΑ͏ʹͳΔ w Θ͔Δ͜ͱͦ͜େࣄ w ςετΛॻ͚ͩ͘Ͱ͸ɺྑ͘͸ͳΒͳ͍ w ମॏܭʹ৐Δ͚ͩͰ͸૫ͤͳ͍ w ඼࣭Λ্͛Δͷ͸ઃܭͱϓϩάϥϛϯά

    w ࠶ઃܭͱϦϑΝΫλϦϯάΛςετͰࢧ͑Δ ςετ͸඼࣭Λ্͛ͳ͍
  39. lςετͰ͸඼࣭͸্͕Βͳ͍ Ͱ͢Αɻςετ͸͋͘·Ͱ΋඼ ࣭Λ͋͛Δ͖͔͚ͬɻ඼࣭Λ͋ ͛Δͷ͸ϓϩάϥϛϯάͰ͢ɻ ͜Ε͸େੲ͔Βͦ͏ɻz

  40. w ઀߹෦ͷݕ౼ͱۛຯ w ߜΓࠐΈ఺ͷൃݟͱґଘͷ෼཭ w ࠶ݱੑ͋Δςετϋʔωεͷ੔උ w ௒ूதฤू )ZQFSBXBSF&EJUJOH 

    w ίϯύΠϥ*%&·͔ͤ w ࢓༷Խςετ w ࢼߦϦϑΝΫλϦϯά ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠