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

リライトプロジェクトを安全・効率良く進めるための取り組み【DeNA TechCon 2023】

リライトプロジェクトを安全・効率良く進めるための取り組み【DeNA TechCon 2023】

youtube:https://youtu.be/3ZrOd_uRFZY

概要:
私達のチームは、開発が始まってから8年が経つPerlの認証認可基盤をJavaで刷新するリライトプロジェクトを担当しています。
このプロジェクトは大規模な改修になるため、思わぬ不具合がでてしまう可能性があります。そのため、利用者に影響がないように安全にプロジェクトを進めていく必要があります。
しかし、安全だけを求めてしまうとリリースまでの期間が長くなってしまうので、同時に効率や生産性も考えなければなりません。

そこで、私達のチームでは「安全であることを確認しつつも効率よく開発できる」開発フローを目指して、不具合をできるだけ早期に発見するShift Leftの取り組みを行っています。

このセッションではShift Leftの考え方を元に実践している静的解析や自動テスト、挙動の差分を自動で発見するための取組みについて紹介します。

登壇内でのリンク集:
p50-1, https://www.oreilly.co.jp/books/9784873119823/
p51-2, https://www.oreilly.co.jp/books/9784873119656/

◆ チャンネル登録はこちら↓
https://youtube.com/c/denatech?sub_confirmation=1

◆ Twitter
https://twitter.com/DeNAxTech

◆ DeNA Engineering
https://engineering.dena.com/

◆ DeNA Engineer Blog
https://engineering.dena.com/blog/

◆ DeNA TechCon 2023 公式サイト
https://techcon2023.dena.dev/

DeNA_Tech

March 02, 2023
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. ར༻ऀʹӨڹ͕ग़ͳ͍Α͏ʹ͍ͨ͠  ։ൃऀ ఏڙ͢Δػೳ΍ڍಈΛ 
 ม͑ΒΕͳ͍ ར༻ऀ ࢓༷ॻʹ໌ه͞Ε͍ͯͳ͍ 
 ࢖͍ํΛ͍ͯ͠Δ৔߹͕͋Δ

    ҙਤ͠ͳ͍ڍಈࠩ෼Λ 
 ࣮૷ͯ͠͠·͏Մೳੑ ར༻ऀʹӨڹ͕ग़ͳ͍Α͏ʹ ҆શʹ ࣄલʹෆ۩߹Λൃݟ͍ͨ͠ ίʔυϕʔεΛ 
 Ұ৽͢Δͱ
  2. ͳͥ4IJGU-FGU͢Δͷ͔ʁ ໰୊ͷൃݟ͕஗͘ͳΕ͹஗͘ͳΔ΄Ͳɺमਖ਼ʹ͔͔Δ࣌ؒ͸େ͖͘ͳΔ  म ਖ਼ ʹ ͔ ͔ Δ ࣌

    ؒ ൃݟλΠϛϯά $BQFST+POFT"QQMJFE4PGUXBSF.FBTVSFNFOU(MPCBM"OBMZTJTPG1SPEVDUJWJUZBOE2VBMJUZ
  3. ͳͥ4IJGU-FGU͢Δͷ͔ʁ ໰୊ͷൃݟ͕ૣ͘ͳΕ͹ɺमਖ਼ʹ͔͔Δ͕࣌ؒݮΔ  म ਖ਼ ʹ ͔ ͔ Δ ࣌

    ؒ ൃݟλΠϛϯά $BQFST+POFT"QQMJFE4PGUXBSF.FBTVSFNFOU(MPCBM"OBMZTJTPG1SPEVDUJWJUZBOE2VBMJUZ 4IJGU-FGU
  4. ੩తղੳ ϓϩάϥϜΛ࣮ߦ͢Δ͜ͱͳ͘ ੩తʹ ɺ༷ʑͳҟৗΛݕग़͢Δख๏ ϝϦοτ👍 ˔ ࣗಈςετΛ࣮ߦͨ͠ͱ͖ʹ ಈతʹ ௨ա͠ͳ͍ίʔυ΋ݕূͰ͖Δ ˔

    ঺հ͢Δ΋ͷͷதͰ࠷΋ϑΟʔυόοΫαΠΫϧ͕ૣ͍ ˔ ݴޠ΍ϑϨʔϜϫʔΫͷϋϚΓ΍͍͢᠘Λճආ͠΍͍͢ σϝϦοτ👎 ˔ νʔϜಠࣗͷϧʔϧΛݕূ͢Δ੩తղੳπʔϧ͕044ʹͳ͍৔߹͕͋Δˠޙड़ 
  5. /VMM1PJOUFS&YDFQUJPOରࡦ +BWBΛ࢖͍ͬͯΔҎ্ৗʹ·ͱΘΓͭ͘໰୊  QVCMJDWPJESVO \ 4USJOHWBMVFOVMM TPNF.FUIPE WBMVF  ^

    QSJWBUFWPJETPNF.FUIPE 4USJOHWBMVF \ 4ZTUFNPVUQSJOUMO WBMVFUP-PXFS$BTF  ࣮ߦ࣌ʹམͪΔˢˢˢˢˢˢˢˢˢˢˢ ^ υϝΠϯ஌ࣝͰ͸ͳ͘ݴޠ࢓༷ͳͷͰ੩తղੳͰ๷͍͗ͨ
  6. ࢲͨͪͷνʔϜͷํ਑ ํ਑ ˔ σϑΥϧτͰ͸OVMMΛڐ༰͠ͳ͍ ˔ OVMM͕ೖΓ͏Δ৔߹͸ΞϊςʔγϣϯΛඞਢʹ͢Δ എܠ ˔ ఆٛ͞ΕΔม਺ͷଟ͘͸OVMMΛड͚ೖΕΔඞཁ͕ͳ͍ ˔

    OVMMΛڐ༰͠ͳ͍ํ͕ίʔσΟϯάதʹߟ͑Δ͜ͱ͕গͳ͍ ˔ OVMMBCMFʹΞϊςʔγϣϯΛ෇͚ͨ΄͏͕*OUFMMJ+΍4QPU#VHTͰΤϥʔΛݕग़͠΍͍͢ 
  7. "SDI6OJUͷ׆༻ྫ ϨΠϠʔυΞʔΩςΫνϟͷґଘؔ܎Λݕূ͢Δ  DPNUOHUFDIBSDIVOJUMJCSBSZ"SDIJUFDUVSFTMBZFSFE"SDIJUFDUVSF  MBZFS $POUSPMMFS  EFGJOFE#Z DPNFYBNQMFDPOUSPMMFS

     MBZFS *OGSBTUSVDUVSF  EFGJOFE#Z DPNFYBNQMFJOGSBTUSVDUVSF  $POUSPMMFS͸*OGSBTUSVDUVSF͔ΒͷΈґଘ͞ΕΔ XIFSF-BZFS $POUSPMMFS  NBZ0OMZ#F"DDFTTFE#Z-BZFST *OGSBTUSVDUVSF 
  8. ࣗ༝ʹϩδοΫΛ࡞ΓࠐΉ͜ͱ΋Ͱ͖Δ ͦͷଞͷ"SDI6OJUͷ׆༻ྫ  Ξϊςʔγϣϯ͕෇͚ํΛݕূ͢Δίʔυྫ +BWB$MBTTFTJNQPSUFE$MBTTFT OFX$MBTT'JMF*NQPSUFS  XJUI*NQPSU0QUJPO *NQPSU0QUJPO1SFEFGJOFE%0@/05@*/$-6%&@5&454 

    JNQPSU1BDLBHFT DPNFYBNQMF  WBSJOWBMJE.FUIPET JNQPSUFE$MBTTFTTUSFBN  GMBU.BQ DMB[[DMB[[HFU"MM.FUIPET TUSFBN  GJMUFS NNJT"OOPUBUFE8JUI (&5DMBTT  GJMUFS  NNHFU1BSBNFUFST TUSFBN BOZ.BUDI Q QJT"OOPUBUFE8JUI 'PSN1BSBNDMBTT  UP-JTU  BTTFSU5IBU JOWBMJE.FUIPET JT&NQUZ 
  9. ੩తղੳͰಘΒΕͨ੒Ռ ҆શɾޮ཰ʹର͢Δ੒Ռ👍 ˔ OVMMपΓͷෆ۩߹͕ϦϦʔεલʹൃݟͰ͖͍ͯΔ ҆શ໘  ˓ $*͕མͪͯͯؾͮ͘ύλʔϯ͕݁ߏ͋Δ ˔ ϨϏϡʔͷ޻਺࡟ݮ

    ޮ཰໘  ˓ ੩తղੳͰݕग़Ͱ͖Δ಺༰ͷࢦఠˠमਖ਼ˠमਖ਼֬ೝͷճ਺͕ݮͬͨ ˓ αʔϏεͷ࢓༷ͳͲຊ࣭తͳ෦෼ͷϨϏϡʔʹूதͰ͖Δ ෇ਵͨ͠੒Ռ👍 ˔ /FX$PNFS͕ίʔσΟϯάϧʔϧΛ஌Δػձʹͳ͍ͬͯΔ ˔ ϦϥΠτલͱൺ΂ͯzࣗ৴Λ࣋ͬͯzίʔυΛॻ͚ΔΑ͏ʹͳͬͨ 
  10. ຊ෺ͷґଘΛݺͼग़ͤͳ͍ͱ͖͸ϞοΫ΍ελϏϯάͷϥΠϒϥϦΛͰ͖Δ͚ͩ࢖Θͣɺ 
 ܰྔͳผ࣮૷ 'BLF Λ஫ೖ͢Δ յΕͮΒ͍ϢχοτςετΛॻ͘  QVCMJDDMBTT'BLF3FQPTJUPSZJNQMFNFOUT3FQPTJUPSZ\ QSJWBUFGJOBM$PODVSSFOU)BTI.BQ4USJOH %BUBECOFX$PODVSSFOU)BTI.BQ

     !0WFSSJEF QVCMJD%BUBWPJETBWF %BUBEBUB \ ECQVU EBUBHFU*E EBUB  ^ !0WFSSJEF QVCMJD0QUJPOBM%BUBGFUDI 4USJOHJE \ SFUVSO0QUJPOBMPG/VMMBCMF ECHFU JE  ^ ࣮ࡍ͸%ZOBNP%#ʹอଘ͍ͯ͠Δ͕ɺϢχοτςετͰ͸ΠϯϝϞϦʹอଘ͢Δ
  11. 'BLFΛ࢖͏ͱɺςετίʔυͰґଘͷڍಈΛελϒ͢Δඞཁ͕ͳ͍ 
 յΕͮΒ͍ϢχοτςετΛॻ͘  QVCMJDDMBTT4BNQMF5FTU\ %*ͷઃఆʹΑͬͯ͸JOUFSGBDFΛࢦఆ͢Ε͹উखʹ'BLFΛ஫ೖͰ͖Δ !*OKFDU'BLF3FQPTJUPSZSFQPTJUPSZ!*OKFDU3FQPTJUPSZSFQPTJUPSZ !5FTU WPJEUFTU4BNQMF*T)PHF4IPVME#F'BMTF \

    XIFO SFQPTJUPSZ GFUDI BOZ UIFO3FUVSO 0QUJPOBMFNQUZ  WBSTBNQMFOFX4BNQMF SFQPTJUPSZ  BTTFSU5IBU TBNQMFJT)PHF JT'BMTF  ^ ελϏϯάʹؔ͢Δهड़͕ςετίʔυʹͳ͍ͷͰɺ 
 ࢓༷͕มΘΒͳ͍ͳΒςετίʔυΛमਖ਼͢Δඞཁ͕ͳ͍
  12. 4IJGU-FGUͷઓज़ͷൺֱ  ੩తղੳ Ϣχοτςετ &&ςετ ϑΟʔυόοΫ 
 αΠΫϧ ࠷΋ૣ͍ ૣ͍

    ஗͍ ݕূ߲໨ ݴޠ΍ϑϨʔϜϫʔΫ ʹؔ࿈͢Δ໰୊ ਖ਼ৗܥɾҟৗܥͷ྆ํ ͷυϝΠϯϩδοΫ ਖ਼ৗܥͷυϝΠϯ 
 ϩδοΫ ݕূର৅ શͯͷιʔείʔυ ֎෦ͷґଘΛ෼཭ͯ͠ ࣮ߦͨ͠γεςϜ ϒϥ΢βɾ֎෦"1*Λ ؚΊͨຊ൪ಉ༷ͷ؀ڥ ϝϦοτ શͯͷίʔυ͕ 
 ݕূର৅ʹͳΔ ֱత༰қʹυϝΠϯͷ ࢓༷ΛݕূͰ͖Δ ར༻ऀͱಉ͡؀ڥͰ 
 ςετͰ͖Δ
  13. 4IJGU-FGUͷઓज़ͷൺֱ  ੩తղੳ Ϣχοτςετ &&ςετ ϑΟʔυόοΫ 
 αΠΫϧ ࠷΋ૣ͍ ૣ͍

    ஗͍ ݕূ߲໨ ݴޠ΍ϑϨʔϜϫʔΫ ʹؔ࿈͢Δ໰୊ ਖ਼ৗܥɾҟৗܥͷ྆ํ ͷυϝΠϯϩδοΫ ਖ਼ৗܥͷυϝΠϯ 
 ϩδοΫ ݕূର৅ શͯͷιʔείʔυ ֎෦ͷґଘΛ෼཭ͯ͠ ࣮ߦͨ͠γεςϜ ϒϥ΢βɾ֎෦"1*Λ ؚΊͨຊ൪ಉ༷ͷ؀ڥ ϝϦοτ શͯͷίʔυ͕ 
 ݕূର৅ʹͳΔ ֱత༰қʹυϝΠϯͷ ࢓༷ΛݕূͰ͖Δ ར༻ऀͱಉ͡؀ڥͰ 
 ςετͰ͖Δ 4IJGU-FGUͷߟ͑ํʹै͏ͳΒɺ੩తղੳ͕࠷΋ྑ͍
  14. 4IJGU-FGUͷઓज़ͷൺֱ  ੩తղੳ Ϣχοτςετ &&ςετ ϑΟʔυόοΫ 
 αΠΫϧ ࠷΋ૣ͍ ૣ͍

    ஗͍ ݕূ߲໨ ݴޠ΍ϑϨʔϜϫʔΫ ʹؔ࿈͢Δ໰୊ ਖ਼ৗܥɾҟৗܥͷ྆ํ ͷυϝΠϯϩδοΫ ਖ਼ৗܥͷυϝΠϯ 
 ϩδοΫ ݕূର৅ શͯͷιʔείʔυ ֎෦ͷґଘΛ෼཭ͯ͠ ࣮ߦͨ͠γεςϜ ϒϥ΢βɾ֎෦"1*Λ ؚΊͨຊ൪ಉ༷ͷ؀ڥ ϝϦοτ શͯͷίʔυ͕ 
 ݕূର৅ʹͳΔ ֱత༰қʹυϝΠϯͷ ࢓༷ΛݕূͰ͖Δ ར༻ऀͱಉ͡؀ڥͰ 
 ςετͰ͖Δ ݕূ߲໨ͷਂ͞΍ݕূͷ෯͕ҟͳΔ
  15. 4IJGU-FGUͷઓज़ͷൺֱ  ੩తղੳ Ϣχοτςετ &&ςετ ϑΟʔυόοΫ 
 αΠΫϧ ࠷΋ૣ͍ ૣ͍

    ஗͍ ݕূ߲໨ ݴޠ΍ϑϨʔϜϫʔΫ ʹؔ࿈͢Δ໰୊ ਖ਼ৗܥɾҟৗܥͷ྆ํ ͷυϝΠϯϩδοΫ ਖ਼ৗܥͷυϝΠϯ 
 ϩδοΫ ݕূର৅ શͯͷιʔείʔυ ֎෦ͷґଘΛ෼཭ͯ͠ ࣮ߦͨ͠γεςϜ ϒϥ΢βɾ֎෦"1*Λ ؚΊͨຊ൪ಉ༷ͷ؀ڥ ϝϦοτ શͯͷίʔυ͕ 
 ݕূର৅ʹͳΔ ֱత༰қʹυϝΠϯͷ ࢓༷ΛݕূͰ͖Δ ར༻ऀͱಉ͡؀ڥͰ 
 ςετͰ͖Δ ͦΕͧΕͷ௕ॴΛ೺Ѳ͠ɺิ׬͋ͬͯ҆͠શੑΛߴΊΔ͜ͱ͕ॏཁ
  16. ·ͱΊ 4IJGU-FGUͱ͸ʁ ͳΜΒ͔ͷ࡞ۀΛͰ͖Δ͚ͩૣظ -FGU ʹߦ͑ΔΑ͏ʹલ౗͠ 4IJGU ͍ͯ͘͠ߟ͑ํ 4IJGU-FGUͷઓज़ ݕূର৅΍࣮ࢪϑΣʔζ͕ҟͳΔͭͷऔ૊ΈΛ࣮ࢪ ˔

    ੩తղੳ ˔ Ϣχοτςετ ˔ &&ςετ  ಛੑͷҟͳΔෳ਺ͷऔ૊ΈΛ૊Έ߹ΘͤΔ͜ͱͰ 
 ҆શͱޮ཰ͷཱ྆Λ௥ٻ
  17. ࢀߟจݙ ˔ ιϑτ΢ΣΞΞʔΩςΫνϟͷجૅ ˓ .BSL3JDIBSETɺ/FBM'PSEஶɺౡాߒೋ༁ ˓ IUUQTXXXPSFJMMZDPKQCPPLT ˔ (PPHMFͷιϑτ΢ΣΞΤϯδχΞϦϯά ˓

    5JUVT8JOUFSTɺ5PN.BOTISFDLɺ)ZSVN8SJHIUฤɺ஛ล༃ত؂༁ɺٱ෋໦ོҰ ༁ ˓ IUUQTXXXPSFJMMZDPKQCPPLT