Upgrade to Pro — share decks privately, control downloads, hide ads and more …

私が取り組んだレガシーコード(公開版)

LegacyCodeMeetup
June 01, 2019
450

 私が取り組んだレガシーコード(公開版)

Legacy Code Meetup 2019 の講演資料です。

LegacyCodeMeetup

June 01, 2019
Tweet

Transcript

  1. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE ࣗݾ঺հ ࣲా๕थʢYoshiki Shibata ɹ೥ੜ·Ε ۝भ޻ۀେֶ৘ใ޻ֶՊˍେֶӃʢ৘ใ޻ֶʣ ৬຿ܦྺ ෋࢜θϩοΫεʢגʣʢύϩΞϧτݚڀॴΛؚΊถࠃθϩοΫεࣾʹ೥൒றࡏʣ ೔ຊΦϥΫϧʢגʣ ʢגʣδϟετγεςϜ

    ෋࢜θϩοΫε৘ใγεςϜʢגʣʢถࠃθϩοΫεࣾʹ൒೥றࡏʣ ʢגʣϦίʔ ιϥϛπʢגʣ ʢגʣϝϧϖΠʢ೥݄ʙݱࡏʣ ओͳஶॻ͓Αͼ຋༁ຊ w ʰϓϩάϥϚʔz·ͩ·ͩzݱ໾ଓߦʱ w ʰ&⒎FDUJWF+BWBୈ൛ʱ w ʰϓϩάϥϛϯάݴޠ(Pʱ w ʰϕλʔϓϩάϥϚʱ
  2. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE ओͳιϑτ΢ΣΞ։ൃ )0-&/&5ʢ)%-$0SJFOUFE-PDBM"SFB/FUXPSLʣʢେֶ೥ɺम࢜೥ɺ೥ʣ w ϋʔυ΢ΣΞͷ࡞੒ɾσόοάɺ௨৴ιϑτͷ։ൃʢ;ΞηϯϒϦݴޠʣ 'VKJ9FSPY8PSLTUBUJPOʢ೥ʙ೥ʣʢࡀʙࡀʣ w IUUQTXXXZPVUVCFDPNXBUDI W,(-1BE'B. w

    &UIFSOFUυϥΠόʔɺ9/4ʢ9FSPY/FUXPSL4ZTUFNTʣϓϩτίϧελοΫͷ ։ൃ w '844ʢ'JFME8PSL4VQQPSU4ZTUFNʣ༻୺຤ΤϛϡϨʔλιϑτ΢ΣΞ ։ൃ w 9/4ʹج֤ͮ͘छ։ൃπʔϧͷ࡞੒ʢϝʔϧɺϓϦϯτɺϑΝΠϦϯάɺϦϞʔτ ϩάΠϯɺάϧʔϓ؅ཧπʔϧɺνϟοτπʔϧɺFUDʣ 'VKJ9FSPY(MPCBM7JFXʢ೥ʙ೥ʣʢࡀʙࡀʣ w 71%PDVNFOU&EJUPSͷ4VO04΁ͷҠ২ʢ.FTBݴޠʣ 9FSPY1"3$ʢ೥ʙ೥ʣʢࡀʙࡀʣ w ϖʔύʔɾϢʔβʔΠϯλϑΣʔεͷٕज़։ൃ w 4VO04༻9/4ʹج֤ͮ͘छ։ൃπʔϧͷ࡞੒ʢάϧʔϓ؅ཧπʔϧɺνϟοτ πʔϧɺFUDʣ 'VKJ9FSPY%PDV4UBUJPO*."4ʢ೥ʙ೥ʣʢࡀʙࡀʣ w ϖʔύʔɾϢʔβʔΠϯλϑΣʔεʢ*.ʣɺ࣏ࣗମ૭ޱূ໌ʢށ੶ʣൃߦγε ςϜʢ"4ʣΛ౥ࡌͨ͠.'1ͷίϯτϩʔϥιϑτ΢ΣΞͷ৽ن։ൃ
  3. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE ओͳ੡඼ͷ֓ཁ ग़యɿIUUQXXXGVKJYFSPYDPKQDPNQBOZQSPpMFIJTUPSZQSPEVDUIUNM ग़యɿIUUQXXXGVKJYFSPYDPKQDPNQBOZQSPpMFIJTUPSZQSPEVDUIUNM ग़యɿIUUQTXFCBSDIJWFPSHXFCIUUQXXXGVKJYFSPYDPKQQSPEVDUIVLVHPETBTIUNM ΠϚδΦ4(ɿIUUQKQSJDPIDPNSFMFBTFCZ@pFMEDPQZIUNM 'VKJ9FSPY8PSLTUBUJPOʢ೥ൃചʣ w ϏοτϚοϓσΟεϓϨΠɺϚϧν΢Οϯυ΢ɺจॻ࡞੒ɺωοτ ϫʔΫػೳɺFUD

    w $16 04*ESJT 6OJYΫϩʔϯʣɺ։ൃݴޠɿ$ݴޠ w ϓϩηεؒ௨৴ʹΑΔϓϩάϥϛϯά 'VKJ9FSPY%PDV4UBUJPO*.ʢ೥ൃചʣ w ίϐʔͱ'BYͷجຊػೳʹՃ͑ͯϖʔύʔϢʔβʔΠϯλϑΣʔε౥ࡌ w $1641"3$ 044PMBSJTɺ։ൃݴޠɿ$ ݴޠ w ϚϧνεϨουϓϩάϥϛϯά 'VKJ9FSPY%PDV4UBUJPO"4ʢ೥ൃചʣ w ίϐʔͱ'BYͷجຊػೳʹՃ͑ͯɺ w ࣏ࣗମ૭ޱূ໌ʢށ੶ʣൃߦγεςϜ w ϓϨζϚσΟεϓϨΠʹΑΔλονύωϧૢ࡞ w $1641"3$ 044PMBSJTɺ։ൃݴޠɿ$ ݴޠ w ϚϧνεϨουϓϩάϥϛϯά w ೥ʹϦίʔ΁0&.ʢʮΠϚδΦࢢொଜ૭ޱূ໌γεςϜ4(ʯ
  4. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE ओͳιϑτ΢ΣΞ։ൃ 'VKJ9FSPY%PDV$FOUSFγϦʔζʢ೥ʙ೥ʣʢࡀʙࡀʣ w $ ༻ʮϝϞϦ؅ཧϥΠϒϥϦʯʮεϨουɺίϨΫγϣϯϥΠϒϥϦʯͷ࢓༷ࡦ ఆ .'1ίϯτϩʔϥιϑτ΢ΣΞ։ൃʢ೥ʙ೥ʣʢࡀʙࡀʣ w ׬શͳςετۦಈ։ൃϓϩδΣΫτʢ໊ن໛ʣ

    w -JOVYɺ$ ɺϚϧνεϨουϓϩάϥϛϯάɺࣗಈςετɺऴ໷ϥϯχϯάςε τɺFUD ૊ΈࠐΈ+BWBͷ+BWB4&Ҡߦʢ೥ʙ೥ʣʢࡀʙࡀʣ w +BWB%4%,ͷϏϧυ؀ڥͷܧଓతΠϯςάϨʔγϣϯԽ .'1ίϯτϩʔϥιϑτ΢ΣΞ։ൃʢ೥ʙ೥ʣʢࡀʙࡀʣ w -JOVYɺ(PݴޠΛ༻͍ͨ׬શͳςετۦಈ։ൃʹΑΔ.'1ίϯτϩʔϥͷ։ൃ ϒϩοΫνΣʔϯؔ࿈։ൃʢ೥ʙ೥ʣʢࡀʙࡀʣ w ΧϯϘδΞࠃཱۜߦ޲͚ͷϒϩοΫνΣʔϯٕज़Λ༻͍ͨγεςϜ։ൃ ϝϧϖΠͷαʔϏε։ൃʢ೥݄ʙݱࡏʣʢࡀʙݱࡏʣ w (PݴޠΛ༻͍ͨՃໍళ؅ཧը໘༻ͷCBDLFOEαʔϏεͷ։ൃ
  5. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE ͋Δ΂͖࢟ ιϑτ΢ΣΞ։ൃͰ͸ɺ1990೥୅·Ͱͷख࡞ۀʹΑΔςετ͔Βɺ2000೥Ҏ߱͸ςετۦಈ։ ൃʹΑΔςετͷࣗಈԽ͕ߦΘΕɺϏϧυͷࣗಈԽ͸1990೥୅͔ΒߦΘΕ͍ͯΔ ίϯϐϡʔλʹΑΔࣗಈ࣮ߦՄೳͳςετίʔυΛࢿ࢈ͱͯ͠࢒͢͜ͱʹΑΓɺख࡞ۀʹΑΔς ετ͔ΒίϯϐϡʔλʹΑΔࣗಈςετ΁ͷҠߦ ➢ιϑτ΢ΣΞमਖ਼ʹ൐͏σάϨʔυͷૣظݕग़ ➢ෛՙςετʹΑΔෆ۩߹ͷൃݟʢಛʹϚϧνεϨουϓϩάϥϛϯάʣ ➢ίʔυͷ඼࣭Λྑ͘͢ΔͨΊͷϦϑΝΫλϦϯά ςετͷࣗಈԽ

    ◆ 1990೥୅·Ͱͷ໷ؒϏϧυ※ʢNightly Buildʣ͔Βɺ2000೥Ҏ߱͸ܧଓతΠϯςάϨʔγϣ ϯʢContinuous Integrationʣͷ࣌୅ ➢ ιʔείʔυͷमਖ਼͕ίϛοτ͞ΕΔͱɺίϯύΠϧ͔Β୯ମςετͷࣗಈ࣮ߦ·Ͱɺ ଈ࣌ʹαʔόͰ࣮ࢪ͠ɺͦͷ݁ՌΛϑΟʔυόοΫ ➢ ૣظʹ໰୊Λൃݟ͢Δ ➢ ϏοάόϯɾΠϯςάϨʔγϣϯΛආ͚ͯɺৗʹಈ࡞͢Διϑτ΢ΣΞΛอͭ ◆ 2010೥Ҏ߱͸ɺܧଓతΠϯςάϨʔγϣϯ͔ΒܧଓతσϦόϦʔʢContinuous Deliveryʣͷ ࣌୅ ➢ ιʔείʔυͷमਖ਼Λίϛοτ͢Δ͜ͱͰɺίϯύΠϧ͔Β࢝·ͬͯɺςετͷࣗಈ࣮ ߦʢ࠷ऴ੒Ռ෺ͷςετ΋ؚΉʣɺϦϦʔειϑτ΢ΣΞͷ࡞੒·ͰΛαʔόͰࣗಈͰ ࣮ࢪ ※ ༗໊ͳྫ͸ɺWindows NT։ൃͰߦΘΕͨ໷ؒϏϧυɻͦͷ಺༰͸ɺॻ੶ʰಆ͏ϓϩάϥϚʔʱʹॻ͔Ε͍ͯΔ ϏϧυͷࣗಈԽ
  6. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE ܧଓతΠϯςάϨʔγϣϯ ։ൃऀ͕Կ͔Βͷमਖ਼Λίϛοτͨ͠ΒɺΞϓϦέʔγϣϯશମ͕ιʔείʔυ͔Β࠶Ϗϧυ͞ Εͯɺแׅతͳࣗಈςετ͕࣮ߦ͞ΕΔɻ Ϗϧυ͋Δ͍͸ࣗಈςετ͕ࣦഊͨ͠Βɺ։ൃνʔϜ͸ߦ͍ͬͯΔ࡞ۀΛ௚ͪʹதஅͯ͠ɺͦͷ ࣦഊΛमਖ਼͢Δɻ ܧଓతΠϯςάϨʔγϣϯͷ໨త͸ɺৗʹɺιϑτ΢ΣΞΛಈ࡞͢Δঢ়ଶʹอͭ͜ͱɻ ܧଓతΠϯςάϨʔγϣϯ͸ɺύϥμΠϜγϑτɻ ܧଓతΠϯςάϨʔγϣϯΛߦΘͳ͚Ε͹ɺςετϑΣʔζظؒதʹ୭͔͕ιϑτ΢ΣΞ͕ػೳ ͍ͯ͠Δ͜ͱΛূ໌͢Δ·Ͱɺιϑτ΢ΣΞ͸յΕͨঢ়ଶͰ͋Δɻ

    ܧଓతΠϯςάϨʔγϣϯ͸ɺόʔδϣϯίϯτϩʔϧΛ࢖༻͢Δͷͱಉ͙͡Β͍։ൃͷͨΊͷ جຊతͳ࣮ફͰ͋Δɻ ςετۦಈ։ൃʹ͸ɺܧଓతΠϯςάϨʔγϣϯ͸ෆՄܽɻ όʔδϣϯίϯτϩʔϧ gitͳͲͷιʔείʔυίϯτϩʔϧ͸ඞཁ ࣗಈϏϧυ/ࣗಈςετ ίϚϯυϥΠϯϕʔεͰࣗಈϏϧυͰ͖ɺࣗಈςετ΋࣮ߦ͞ΕΔ ։ൃνʔϜ಺ͷ߹ҙ ܧଓతΠϯςάϨʔγϣϯ͸ɺಓ۩Ͱ͸ͳ࣮͘ફɻ։ൃνʔϜ಺ͷ߹ҙͱن཯͕ඞཁɿ
 ɾখ͞ͳมߋΛසൟʹϝΠϯϥΠϯ΁νΣοΫΠϯ
 ɾΞϓϦέʔγϣϯΛಈ࡞ͤ͞ͳ͘ͳͬͨͲͷΑ͏ͳมߋ΋ɺͦΕΛ࠷༏ઌʹमਖ਼͢Δ
  7. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE σδλϧෳ߹ػίϯτϩʔϥιϑτ΢ΣΞ։ൃ5BLF ग़యɿIUUQXXXGVKJYFSPYDPKQDPNQBOZQSPpMFIJTUPSZQSPEVDUIUNM ग़యɿIUUQTXFCBSDIJWFPSHXFCIUUQXXXGVKJYFSPYDPKQQSPEVDUIVLVHPETBTIUNM 'VKJ9FSPY%PDV4UBUJPO*.ʢ೥ൃചʣ ίϐʔͱ'BYͷجຊػೳʹՃ͑ͯϖʔύʔϢʔβʔΠϯλ ϑΣʔε౥ࡌ $1641"3$ 044PMBSJTɺ։ൃݴޠɿ$ ݴޠ

    ϚϧνεϨουϓϩάϥϛϯά ΞϓϦέʔγϣϯϥϯλΠϜͷઃܭɾ࣮૷ɺϏϧυ୲౰ ϝϞϦ؅ཧϥΠϒϥϦͷઃܭɾ࣮૷ 'VKJ9FSPY%PDV4UBUJPO"4ʢ೥ൃചʣ ίϐʔͱ'BYͷجຊػೳʹՃ͑ͯɺ ࣏ࣗମ૭ޱূ໌ʢށ੶ʣൃߦγεςϜ ϓϨζϚσΟεϓϨΠʹΑΔλονύωϧૢ࡞ $1641"3$ 044PMBSJTɺ։ൃݴޠɿ$ ݴޠ ϚϧνεϨουϓϩάϥϛϯά ೥ʹϦίʔ΁0&.ʢʮΠϚδΦࢢொଜ૭ޱূ໌γεςϜ 4(ʯ ถࠃθϩοΫε1"3$Ͱͷ1BHF.JMMϓϩδΣΫτͷ঎඼Խ
 ʢ1"3$றࡏɿ೥݄ʙ೥݄ʣ
  8. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE ৽ͨͳίϯτϩʔϥιϑτ΢ΣΞ։ൃʢ೥݄ʙ೥݄ʣ ίϯτϩʔϥιϑτ΢ΣΞΛ࠶ઃܭɾ࠶࣮૷͢Δେن໛ϓϩδΣΫτ ΦϒδΣΫτࢦ޲ઃܭͷڭҭɾίϯαϧςΟϯάΛ୲౰ ೥͸΄΅ຖ೔ઃܭϨϏϡʔ΍ίʔυϨϏϡʔΛ࣮ࢪʢࣗ෼Ͱ͸࣮૷ͤͣʣ ֤छΨΠυͷ੍ఆ ʰ$PEF3FWJFX(VJEFʱ ʰ$ $PEJOH4UBOEBSEʱ $

    ༻ϝϞϦ؅ཧϥΠϒϥϦʔͷ࠶ઃܭ 'VKJ9FSPY*.ͷܦݧΛ౿·͑ͯɺ$ ༻ϝϞϦ؅ཧϥΠϒϥϦʔΛ࠶ઃܭ ϝϞϦഁյใࠂػߏ ϝϞϦϦʔΫௐࠪػߏ ϝϞϦ࢖༻ྔใࠂػߏ ͦͷϝϞϦ؅ཧϥΠϒϥϦʔΛϕʔεʹεϨουؔ࿈ͷϥΠϒϥϦʔΛઃܭ εϨουੜ੒ ࠶ؼతϩοΫɺ3FBEFS8SJUFSϩοΫɺ௨஌ػߏʢ/PUJGZ"MM8BJUʣ εϨουηʔϑͳίϨΫγϣϯϥΠϒϥϦʔ ςετ͸͢΂ͯख࡞ۀ σδλϧෳ߹ػίϯτϩʔϥιϑτ΢ΣΞ։ൃ5BLF
  9. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE σδλϧෳ߹ػͷίϯτϩʔϥιϑτ΢ΣΞ։ൃʢ೥݄ʙ೥݄ʣ 04-JOVY ։ൃݴޠ$  ϚϧνϓϩηεɾϚϧνεϨουϓϩάϥϛϯά ϨΠϠߏ੒ͷΞʔΩςΫνϟ ϓϩάϥϚϒϧɾσόΠεɾΤϛϡϨʔλ ϐʔΫ࣌ʹ໿໊ͷ։ൃऀ ໷ؒϏϧυʢϏϧυͱࣗಈςετͷ࣮ߦʣ

    ׬શͳςετۦಈ։ൃ ύωϧૢ࡞΋ؚΊͯɺࣗಈςετΛߦ͍ͬͯͨ ໷ؒɺि຤͸ࣗಈςετΛ։ൃऀͷ1$Ͱ࿈ଓ࣮ߦ͍ͯͨ͠ ࣮ػͰ΋೔ʑςετΛܧଓʢ௿ϨΠϠɾΤϛϡϨʔλͷ୲౰νʔϜͷΈʣ ΄ͱΜͲͷ։ൃऀ͸ɺ࣮ػΛ࢖༻͢Δඞཁ͕ͳ͔ͬͨ σδλϧෳ߹ػίϯτϩʔϥιϑτ΢ΣΞ։ൃ5BLF
  10. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE σδλϧෳ߹ػͷίϯτϩʔϥιϑτ΢ΣΞ։ൃ5BLFʢ೥݄ʙ೥݄ʣ Linux OS Layer 1 Layer 2 Layer 3

    Layer 4 Programmable Device Emulator Layer 4 API Layer 3 API Layer 2 API Layer 1 API Emulator API Automated Layer 1 Test Code Automated Layer 2 Test Code Automated Layer 3 Test Code Automated Layer 4 Test Code σδλϧෳ߹ػίϯτϩʔϥιϑτ΢ΣΞ։ൃ5BLFʢ4/4ෆՄʣ
  11. $PQZSJHIU˜:PTIJLJ4IJCBUB"MMSJHIUTSFTFSWFE ख࡞ۀʹΑΔ໰୊఺ ▪ खॱʢϚχϡΞϧʣͷ࣮ࢪΛ֬ೝͰ͖ͳ͍ ➢ खॱΛؒҧ͏͜ͱͰ໰୊͕ൃੜ͢ΔͱɺʮखॱΛ֬ೝ͔ͨ͠Λ֬ೝ͢ΔνΣοΫϦετʯ ͷ࡞੒Ͱରॲ ➢ ͦΕͰ΋໰୊͕ൃੜͨ͠ΒɺʮνΣοΫϦετΛνΣοΫ͔ͨ͠ͱ͍͏νΣοΫϦε τʯΛ࡞੒ͯ͠ରॲ

    ➢ ແݶνΣοΫϦετ஍ࠈʹؕΔ͕ɺਓ͕ߦ͏͜ͱͳͷͰղܾͰ͖ͳ͍ ▪ ࣗಈεΫϦϓτͷ৔߹ɺ໰୊ͷରॲ͸ʮࣗಈεΫϦϓτͷमਖ਼ʯͱͳΓɺ߃ٱରࡦ ▪ खॱͷ࣮ߦऀ͕͍ͭ΋ಉ͡୲౰ऀͰ͸ɺઐ೚ʹͳͬͯ͠·͏ ➢ ඞཁͳࣄฑ͕खॱॻʹ͢΂ͯهड़͞Ε͍ͯͳ͍ʢ୲౰ऀ͸ɺॻ͔ͳͯ͘΋෼͔͍ͬͯΔʣ ➢ ୲౰ऀ͔͠࡞ۀ͕Ͱ͖ͳ͍ ✓ ୲౰ऀ͕ٳΊ͹࡞ۀͰ͖ͳ͍ ✓ ୲౰ऀ͕ڠྗձࣾͷ৔߹ɺܖ໿Λܧଓ͠ଓ͚Δ͜ͱʹͳΔ ✓ ୲౰ऀ͕ࣾһͷ৔߹ɺଞͷۀ຿ΛΞαΠϯͰ͖ͣɺຊਓͷ੒௕͕ݟࠐΊͳ͍ ▪ ࣗಈεΫϦϓτͷ৔߹ɺ୲౰ऀ͕͍ͳ͍৔߹Ͱ΋ॲཧ಺༰Λୈ3ऀ͕ௐࠪՄೳ ▪ ख࡞ۀʹΑΔιϑτ΢ΣΞϏϧυͷฐ֐ ➢ Ϗϧυ༧ఆ೔ʢҰिؒʹҰճͱ͔ʣͷேʹ୲౰ऀ͕εΫϦϓτΛ࣮ߦͯ͠Ϗϧυ͢Δ
 ʢຊདྷɺલ೔΍લ໷ʹࣗಈϏϧυ͞ΕΔ΂͖ʣ ➢ Ϗϧυ೔ʹ͸ϏοάόϯɾΠϯςάϨʔγϣϯͱͳΓɺϏϧυ͕ࣦഊ͢Δɻ ➢ Ϗϧυ౰೔·ͰcommitʢνΣοΫΠϯʣ๨Εʹؾ෇͔ͳ͍ ➢ ϏϧυΤϥʔͷରԠͰ஗Ε͕ൃੜ͠ɺϦϦʔε͕౰೔Ͱ͖ͳ͍͜ͱ͕͋Δ ➢ ֤։ൃνʔϜͰγεςϜશମͷϏϧυΛࢼ͢͜ͱ͕Ͱ͖ͳ͍