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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for LegacyCodeMeetup LegacyCodeMeetup
June 01, 2019
600

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

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

Avatar for LegacyCodeMeetup

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ʢνΣοΫΠϯʣ๨Εʹؾ෇͔ͳ͍ ➢ ϏϧυΤϥʔͷରԠͰ஗Ε͕ൃੜ͠ɺϦϦʔε͕౰೔Ͱ͖ͳ͍͜ͱ͕͋Δ ➢ ֤։ൃνʔϜͰγεςϜશମͷϏϧυΛࢼ͢͜ͱ͕Ͱ͖ͳ͍