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

pytestによるCIレボリューション(2020年更新版)

abenben
July 04, 2020

 pytestによるCIレボリューション(2020年更新版)

2020年7月4日の「Python Charity Talks in Japan」で発表したスライドです。
https://pyconjp.connpass.com/event/177586/

abenben

July 04, 2020
Tweet

More Decks by abenben

Other Decks in Technology

Transcript

  1. ͓લ୭Α ʲॴଐʳ *OTUJUVUJPOGPSB(MPCBM4PDJFUZגࣜձࣾ ͷ ্੮ݚڀһʢ㲈*5ΤϯδχΞʣͰ͢ɻ ʲ*5ίϛϡχςΟӡӦʢछྨʣʳ 4UBSU1ZUIPO$MVC GJOQZ GJOBODFͱQZUIPO 'JO+"84

    95FDI+"84 GPVOE*5ʢαϙʔλʔʣ ͭ͘͹ɾദͷ༿ϏοτίΠϯ ϑΟϯςοΫΤϯδχΞཆ੒ίϛϡχςΟ 76$"-BCP ͋΂Μ΂ΜʢѨ෦Ұ໵ʣ
  2. ςετۦಈ1ZUIPO ʲ໨࣍ʳ $)"15&3͸͡ΊͯͷQZUFTU $)"15&3ςετؔ਺Λ࡞੒͢Δ $)"15&3QZUFTUͷϑΟΫενϟ $)"15&3૊ΈࠐΈϑΟΫενϟ $)"15&3ϓϥάΠϯ $)"15&3ߏ੒ $)"15&3QZUFTUΛଞͷπʔϧͰ࢖ͬͯΈΔ ෇࿥"Ծ૝؀ڥ

    ෇࿥#QJQ ෇࿥$QZUFTUͷϓϥάΠϯ ෇࿥%1ZUIPOϓϩδΣΫτͷύοέʔδԽͱ഑෍ ෇࿥&Y6OJUϑΟΫενϟ ෇࿥' ˒ Ϋϥ΢υͰQZUFTUΛ࢖͏ $JSDMF$* ෇࿥( ˒ QZUFTUΛ༻͍ͨςετۦಈ։ൃ ˒ ೔ຊޠ຋༁൛ͷΈ IUUQTXXXTIPFJTIBDPKQCPPLEFUBJM
  3. ςετͷछྨ ςετͷछྨ ಺༰ උߟ Ϣχοτςετ ؔ਺΍ΫϥεͳͲɺίʔυͷ͘͝Ұ෦ΛνΣοΫ͢Δςετɻ ϗϫΠτϘοΫε ςετ ݁߹ςετ ෳ਺ͷΫϥε΍αϒγεςϜͳͲɺҰճΓେ͖ͳίʔυΛ

    νΣοΫ͢Δςετɻ ϗϫΠτϘοΫε ςετ γεςϜςετ ςετ͍ͯ͠ΔςετશମΛνΣοΫ͢Δςετɻຊ൪؀ڥʹ ͍ۙ؀ڥͰςετΛ͢Δɻ ϒϥοΫϘοΫε ςετ ػೳςετ γεςϜશମͷػೳͱੑೳΛςετ͢Δɻ γεςϜ͕ސ٬ͷཁٻΛຬ͍ͨͯ͠Δ͔Λςετ͢Δɻ ϒϥοΫϘοΫε ςετ ൽԼςετ ࠷ऴతͳΤϯυϢʔβʔͷΠϯλϑΣʔεʹର࣮ͯ͠ߦ͞ΕΔ ͷͰ͸ͳ͘ɺද໘ͷ͙͢Լʹ͋ΔΠϯλʔϑΣʔεʹର࣮ͯ͠ ߦ͢Δςετɻ "1*૚ʹରͯ͠ߦ͏ςετɻ ϒϥοΫϘοΫε ςετ
  4. (PPHMF&OHJOFFSJOH1SBDUJDFT%PDVNFOUBUJPO ü %FTJHOʢγεςϜʹͱͬͯద੾ͳઃܭ͔ʁʣ ü 'VODUJPOBMJUZʢ࡞ऀ͕ҙਤͨ͠ͱ͓ΓʹৼΔ෣͏͔ʁʣ ü $PNQMFYJUZʢͰ͖Δ͚ͩγϯϓϧʹͳ͍ͬͯΔ͔ʁʣ ü 5FTUTʢద੾ͳࣗಈςετ͕උΘ͍ͬͯΔ͔ʁʣ ü

    /BNJOHʢม਺΍Ϋϥεɺϝιουʹ໌֬ͳ໊લ͕෇͚ΒΕ͍ͯΔ͔ʁʣ ü $PNNFOUTʢίϝϯτ͸໌֬Ͱ෼͔Γ΍͍͔͢ʁʣ ü 4UZMFʢίʔυ͸ελΠϧΨΠυʹै͍ͬͯΔ͔ʁʣ ü %PDVNFOUBUJPOʢؔ࿈͢ΔυΩϡϝϯτ͸ߋ৽͞Ε͍ͯΔ͔ʁʣ ※日本語プロジェクト https://shuuji3.github.io/eng-practices/ https://www.publickey1.jp/blog/19/googlegoogle_engineering_practices_documentation.html
  5. 1ZUIPOͷϢχοτςετϑϨʔϜϫʔΫ VOJUUFTU OPTFςετ ࣍ϖʔδͰઆ໌ 1ZUIPOͷඪ४ϥΠϒ ϥϦͱͯ͠༻ҙ͞Εͯ ͍Δɻ +6OJUΛϕʔεʹͯ͠ ͍Δʢ5FTU$BTFΛܧ ঝ͢Δඞཁ͕͋Δʣɻ

    ଟ࠼ͳΦϓγϣϯͰॊ ೈͳςετ͕Ͱ͖ɺΧ όϨοδΛऔΔ͜ͱ΋ Ͱ͖Δɻ %4-ه๏ʹରԠ͍ͯ͠ Δɻ ಛఆͷΫϥεΛܧঝ͢ Δඞཁ͕ͳ͍
  6. QZUFTUͷಛ௃ ü ୯७ͳςετΛॻ͘ͷ͕؆୯Ͱ͋Δɻ ü ෳࡶͳςετΛॻ͘ͷ΋؆୯Ͱ͋Δɻ ü ςετ͕ಡΈ΍͍͢ɻ ü ςετ͕ಡΈ΍͍͢ɻʢॏཁͳͷͰ̎ճॻ͖·ͨ͠ʣ ü

    ΋ͷͷ਺ඵͰ࢖͍࢝ΊΔ͜ͱ͕Ͱ͖Δɻ ü ςετΛࣦഊͤ͞Δʹ͸BTTFUΛ࢖༻͢Δɻ TFMGBTTFSU&RVBM Ͱ΋TFMGBTTFSU-FTT5IBO Ͱ΋ͳ͘ɺͨͩͷBTTFSUͰ͋Δɻ ü VOJUUFTUɺOPTF༻ʹॻ͔Εͨςετ΋࣮ߦͰ͖Δɻ ʮςετۦಈ1ZUIPOʯ!ᠳӭࣾΑΓ
  7. ᶃςετύλʔϯͷ഑ྻ ʢҎԼͷͭΛνΣοΫΛ͢Δʣ        

     ᶆςετͷ࣮ࢪ ᶄςετύλʔϯΛ ࣮̍ͮͭࢪ ᶅςετσʔλͷՄࢹԽํ๏ Ճࢉͷςετ
  8. 74$PEFͱ͸ • ϚΠΫϩιϑτʹΑͬͯ։ൃ͞Ε͍ͯΔιʔείʔυΤσΟλɻ ʢ೥ϦϦʔεʣ • ιʔείʔυ͕ϋΠϥΠτදࣔ͞ΕΔɻ ʢ༷ʑͳϓϩάϥϛϯάݴޠʹରԠʣ • ϑΝΠϧ΍ϑΥϧμͷ؅ཧ͕؆୯ɻ •

    ศརͳ֦ுػೳ͕͋Δɻ • ̎ͭͷϑΝΠϧΛಉ࣌ʹ։͍ͯ ࡞ۀͰ͖Δɻ • ίʔυͷࣗಈิ׬ػೳɻ • ೔ຊޠઃఆɻ • 8JEPXT049-JOVYͰಈ࡞Մೳɻ
  9. 1Z$IBSNͱ͸ • ߴ඼࣭ͳ*%& • 8JEPXT049-JOVYͰಈ࡞Մೳɻ • 1SPGFTTJPOBM&EJUJPOʢ༗ঈ൛ʣͱ$PNNVOJUZ&EJUJPOʢແঈ൛ʣ͕͋Δɻ • 8FC։ൃʹ͸1SPGFTTJPOBM&EJUJPO͕͓קΊɻ +BWB4DSJQUɺ$PGGFF4DSJQUɺ5ZQF4DSJQUɺ)5.-$44αϙʔτ

    ϑϨʔϜϫʔΫɿ%KBOHPɺ'MBTLɺ(PPHMF"QQ&OHJOFɺ1ZSBNJEɺXFCQZͷαϙʔτ σʔλϕʔεͱ42-ͷαϙʔτ • ༗ঈ൛ʹ͸೔ؒͷ ϑϦʔτϥΠΞϧ͕͋ΔͷͰ·ͣ͸ମݧɻ • ೔ຊޠઃఆ΋Մೳ ʢ&1-ϥΠηϯεͰผஂମ͕ఏڙʣ IUUQTRJJUBDPNTVFDIBSPJUFNTECCGG • ςετϑϨʔϜϫʔΫʹରԠʢ༗ঈ൛ͷΈʣ
  10. $*$%ͱ͸ $* $% $POUJOVPVT*OUFHSBUJPO $POUJOVPVT%FMJWFSZ ܧଓతΠϯςάϨʔγϣϯ ܧଓతσϦόϦʔ ։ൃऀ޲͚ͷࣗಈԽϓϩηεɻ ৽͍͠ίʔυมߋ͕ఆظతʹϏϧυɺ ςετ͞Εɺ౷߹ϦϙδτϦʹ౷߹

    ͞ΕΔ͜ͱɻ όάͷࣗಈൃݟɺख࡞ۀͷഉআɺೲ ظ୹ॖͳͲͷ։ൃޮ཰Խ͕໨తɻ ։ൃऀʹΑΔมߋΛϦϙδτϦ͔Β ຊ൪؀ڥʹࣗಈతʹϦϦʔε͠ɺސ ٬͕࢖༻Ͱ͖ΔΑ͏ʹ͢Δ΋ͷɻ ৽نίʔυͷಋೖ࡞ۀͷෛ୲Λ࠷খ ݶʹ͢Δͷ΋໨తɻ
  11. $JSDMF$*ͷઃఆʢجຊఆٛɾ༻ޠʣ δϣϒͷதͰڞ௨͢Δॲཧ͸ɺ ίϚϯυͱͯ͠ఆٛͰ͖·͢ɻ TUFQʢεςοϓʣɿ ୯ҰͷίϚϯυɻ KPCʢδϣϒʣɿ ୯ҰͷFYFDVUPS্Ͱ࿈ଓ࣮ͯ͠ߦ͢Δεςοϓ ͷू߹ɻ XPSLGMPXʢϫʔΫϑϩʔʣɿ δϣϒͷू߹ɻ࣮ߦॱং͸೚ҙʹઃఆɻ

    PSCɿ طଘͷ$JSDMF$*ઃఆ͔Β࢖͍͍ͨͱ͚ͩ͜࢖͑Δ ศརͳ৽ػೳɻQZUIPOPSCT΋ެ։͞ΕͯΔͷͰ ࢖ͬͪΌ͓͏ɻ DPNNBOEɿ Ұ࿈ͷεςοϓͷఆٛΛ֎ͩͨ͠͠΋ͷɻ ύΠϓϥΠϯʢDPOGJHZNMϑΝΠϧͦͷ΋ͷʣɿ Ϗϧυ͕τϦΨʔ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔϫʔΫ ϑϩʔΛؚΉɺઃఆϑΝΠϧશମɻϫʔΫϑϩʔ Λแؚ͢Δɻ
  12. $JSDMF$*ͷઃఆʢδϣϒʣ TUFQʢεςοϓʣɿ ୯ҰͷίϚϯυɻ KPCʢδϣϒʣɿ ୯ҰͷFYFDVUPS্Ͱ࿈ଓ࣮ͯ͠ߦ͢Δεςοϓ ͷू߹ɻ XPSLGMPXʢϫʔΫϑϩʔʣɿ δϣϒͷू߹ɻ࣮ߦॱং͸೚ҙʹઃఆɻ PSCɿ طଘͷ$JSDMF$*ઃఆ͔Β࢖͍͍ͨͱ͚ͩ͜࢖͑Δ

    ศརͳ৽ػೳɻQZUIPOPSCT΋ެ։͞ΕͯΔͷͰ ࢖ͬͪΌ͓͏ɻ DPNNBOEɿ Ұ࿈ͷεςοϓͷఆٛΛ֎ͩͨ͠͠΋ͷɻ ύΠϓϥΠϯʢDPOGJHZNMϑΝΠϧͦͷ΋ͷʣɿ Ϗϧυ͕τϦΨʔ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔϫʔΫ ϑϩʔΛؚΉɺઃఆϑΝΠϧશମɻϫʔΫϑϩʔ Λแؚ͢Δɻ
  13. $JSDMF$*ͷઃఆʢϫʔΫϑϩʔʣ TUFQʢεςοϓʣɿ ୯ҰͷίϚϯυɻ KPCʢδϣϒʣɿ ୯ҰͷFYFDVUPS্Ͱ࿈ଓ࣮ͯ͠ߦ͢Δεςοϓ ͷू߹ɻ XPSLGMPXʢϫʔΫϑϩʔʣɿ δϣϒͷू߹ɻ࣮ߦॱং͸೚ҙʹઃఆɻ PSCɿ طଘͷ$JSDMF$*ઃఆ͔Β࢖͍͍ͨͱ͚ͩ͜࢖͑Δ

    ศརͳ৽ػೳɻQZUIPOPSCT΋ެ։͞ΕͯΔͷͰ ࢖ͬͪΌ͓͏ɻ DPNNBOEɿ Ұ࿈ͷεςοϓͷఆٛΛ֎ͩͨ͠͠΋ͷɻ ύΠϓϥΠϯʢDPOGJHZNMϑΝΠϧͦͷ΋ͷʣɿ Ϗϧυ͕τϦΨʔ͞Εͨͱ͖ʹ࣮ߦ͞ΕΔϫʔΫ ϑϩʔΛؚΉɺઃఆϑΝΠϧશମɻϫʔΫϑϩʔ Λแؚ͢Δɻ
  14. $%ͷ෦෼ʹ͍ͭͯ ࣌ؒͷ౎߹Ͱɺઆ໌Λলུ͠·͢ɻ  @@  $JSDMF$*͔Βෳ਺ͷ8FC ΞϓϦέʔγϣϯαʔό΁σϓϩΠɺ 'BB4 'VODUJPOBTB4FSWJDFʣʹ΋σϓϩΠͰ͖·͢ɻ ฒྻͰςετΛߦͬͯɺશͯͷςετ͕׬͔ྃͯ͠Β

    ҰׅͰσϓϩΠ͢ΔͳͲͷಉظΛߦ͏͜ͱ΋Ͱ͖·͢ɻ 'BB4"84 -BNCEB (PPHMF $MVEF 'VODUJPOT "[VSV 'VODUJPOT ࠓճ͸આ໌͖͠Ε·ͤΜͰ͕ͨ͠ɺ $JSDMF$*ʹ͸෼ࢄॲཧʢ1BSBMMFMJTNʣͳͲɺ ଞʹ΋ศརͳػೳ͕ͨ͘͞ΜඋΘ͍ͬͯ·ͨ͠ɻ
  15. ΤϯδχΞืूதͰ͢ʂ IUUQTJHMPCBMTPDJFUZDPNDBSFFST ۀ຿ৄࡉ 8FCΞϓϦέʔγϣϯ੍࡞ɾӡ༻ ΞϓϦέʔγϣϯɺαʔϏεվળͷϓϥϯχϯάࢀՃ Ԡืࢿ֨ Լهͷ஌ࣝɺεΩϧɺܦݧΛ͓࣋ͪͷํ •+BWB3VCZ1ZUIPO1)1$4DBMB(PͳͲͷϓϩάϥϛϯ άݴޠΛ࢖༻ͨ͠ɺαʔόʔαΠυϓϩάϥϜ։ൃͷܦݧ •8FCαʔϏεͷӡ༻ܦݧ

    •3%#.4ར༻ܦݧ •αʔόʔαΠυͷ஌ࣝ ׻ܴεΩϧ Լهͷ஌ࣝɺεΩϧɺܦݧΛ͓࣋ͪͷํ •$*πʔϧར༻ܦݧ •ΞδϟΠϧ։ൃͷܦݧ •"NB[PO8FC4FSWJDF &$ 3%4 4౳ •8FCΞϓϦέʔγϣϯϑϨʔϜϫʔΫͷར༻ܦݧ •+4ϑϨʔϜϫʔΫར༻ͷܦݧʢ7VFKT BOHVMBS3FBDUKT ͳͲ •+BWB4DSJQU $44 )5.- •(JU •ϓϩδΣΫτ؅ཧπʔϧʢ+JSB3FENJOF#BDLMPH౳ʣͷ஌ࣝ •/P42-ར༻ܦݧ •ϑϩϯτΤϯυͷ஌ࣝ •όϥϯεྑ͍Ϗδωε஌ࣝ