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

近年の OSS 開発における CI 選択のベストプラクティス

842aaadff6e13fbf372c9b17b49b031c?s=47 Pine Mizune
December 10, 2016

近年の OSS 開発における CI 選択のベストプラクティス

YAPC::Hokkaido 2016 SAPPORO で発表した資料です。
http://yapcjapan.org/2016hokkaido/

842aaadff6e13fbf372c9b17b49b031c?s=128

Pine Mizune

December 10, 2016
Tweet

Transcript

  1. 1JOF.J[VOF !QJOF  :"1$)PLLBJEP ۙ೥ͷ044։ൃʹ͓͚Δ $*બ୒ͷϕετϓϥΫςΟε

  2. .Z1SPpMFશൠ q  )/1JOF.J[VOF ͽͶ  o  (JU)VC!QJOF o  5XJUUFS!QJOF q ॴଐ

    ג ϞόΠϧϑΝΫτϦʔ o  ৽ଔ೥໨ ֶ෦ଔ  o  ιʔγϟϧΞϓϦαʔόʔαΠυ 1FSM  .Z1SPpMF  
  3. q  OQNQJOF q  .BWFOQJOFN[ .Z1SPpMFr044׆ಈ q  $1"/1*/& o  %FWFM$PWFS3FQPSU$PEFDPW o 

    )BTI6UJM1JDL શϞδϡʔϧ શϞδϡʔϧ શύοέʔδ ࣳΛછΊΔͷ͕ੜ͖ߕ൹ͳλΠϓʜ .Z1SPpMF  
  4. .Z1SPpMFrίϛϡχςΟ׆ಈ .Z1SPpMF   ஍ҬܥษڧձͷӡӦ ౦ژ  o  (PUBOEBKTd o 

    (PUBOEBNPCJMF o  $SZTUBM+1d ֤छษڧձ΁ͷࢀՃɾൃද o  +BWB4DSJQU 1FSM FUD o  :"1$͸ॳొஃ ࢀՃ͸ճ໨ 
  5. ࠓ೔͸ɺ 1FSMͱ044ͱ$* ͷ࿩Λ͠·͢ɻ *OUSPEVDUJPO  

  6. େن໛αʔϏεͰͷ +FOLJOTͷӡ༻ํ๏ ͱ͔ͷ࿩͸͠·ͤΜɻ ˞͝஫ҙ͍ͩ͘͞ *OUSPEVDUJPO  

  7. औΓ্͛Δ࿩ɾऔΓ্͛ͳ͍࿩ q  $*Ͱ044։ൃΛָ͘͢͠Δʹ͸ q  1FSMͰ$*ճ͢৔߹ͷϋϚΓॴ औΓ্͛Δ࿩ औΓ্͛ͳ͍࿩ q  ࣾ಺ͷ$*αʔόʔͷӡ༻ํ๏ q 

    ςετΛߴ଎Խ͢Δ5JQT *OUSPEVDUJPO  
  8. ظ଴͢Δλʔήοτ૚ q  1FSMͰ044Λ։ൃ͍ͯ͠Δਓ q  ଞݴޠͰ044։ൃΛ͍ͯ͠Δਓ 044։ൃΛ͍ͯ͠Δਓ q  044։ൃʹڵຯ͕͋Δਓ q  4BB4ϕʔεͷ$*Λۀ຿ʹऔΓೖΕ͍ͨਓ

    044։ൃΛ͍ͯ͠ͳ͍ਓ *OUSPEVDUJPO  
  9. ຊτʔΫͷΰʔϧ q ۙ೥ͷ$*αʔϏεʹ͍ͭͯجૅ஌͕ࣝͭ͘ q ϓϩμΫτʹԠͯ͡ద੾ͳ$*͕બ୒Ͱ͖Δ q ָ͘͠044։ൃ͕Ͱ͖ΔΑ͏ʹͳΔ *OUSPEVDUJPO  

  10. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺ 5BCMFPG$POUFOUT  
  11. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒  5BCMFPG$POUFOUT  
  12. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  13. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  14. $*ͱ͸Կ͔  $*$POUJOVPVT*OUFHSBUJPO –  ೔ຊޠܧଓతΠϯςάϨʔγϣϯ ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞੒࣌ͷ඼࣭վળ ΍ೲظͷ୹ॖͷͨΊͷश׳ͷ͜ͱ  ڱٛʹ͸Ϗϧυ΍ςετɺΠϯεϖΫγϣϯ ͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ

     ࢀর8JLJQFEJBʰܧଓతΠϯςάϨʔγϣϯʱ
  15. $*ͱ͸Կ͔  $*$POUJOVPVT*OUFHSBUJPO –  ೔ຊޠܧଓతΠϯςάϨʔγϣϯ ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞੒࣌ͷ඼࣭վળ ΍ೲظͷ୹ॖͷͨΊͷश׳ͷ͜ͱ  ڱٛʹ͸Ϗϧυ΍ςετɺΠϯεϖΫγϣϯ ͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ

     ࢀর8JLJQFEJBʰܧଓతΠϯςάϨʔγϣϯʱ 広義の CI ≠ テスト 品質改善が見込まれる習慣、全般を指す
  16. $*ͱ͸Կ͔  $*$POUJOVPVT*OUFHSBUJPO –  ೔ຊޠܧଓతΠϯςάϨʔγϣϯ ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞੒࣌ͷ඼࣭վળ ΍ೲظͷ୹ॖͷͨΊͷश׳ͷ͜ͱ  ڱٛʹ͸Ϗϧυ΍ςετɺΠϯεϖΫγϣϯ ͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ

     ࢀর8JLJQFEJBʰܧଓతΠϯςάϨʔγϣϯʱ ソフトウェア開発で一般的に使われる定義 自動化することで、繰り返し適応できる
  17. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  18. $*ͷ෼ྨ ࣗಈϏϧυɾςετ q  هड़͞ΕͨࣗಈςετΛ࣮ߦ q  ܧଓతʹςετΛ࣮ߦ͢Δ͜ͱͰɺ޻਺࡟ݮͱ඼࣭ͷ୲อΛ໨ࢦ͢ ෼ੳɾϨϏϡʔ q  ίʔυΛنଇʹैͬͯ੩తղੳ q 

    ίʔυϨϏϡʔͷखؒΛݮΒ͠ɺ޻਺࡟ݮͱ඼࣭޲্Λ໨ࢦ͢
  19. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  20. $*πʔϧɾαʔϏεͷ۩ମྫ ࣗಈϏϧυɾςετ ෼ੳɾϨϏϡʔ Ϋ ϥ ΢ υ  ࣗ લ

    ϗ ε τ 
  21. $*πʔϧɾαʔϏεͷ۩ମྫ ࣗಈϏϧυɾςετ ෼ੳɾϨϏϡʔ Ϋ ϥ ΢ υ  ࣗ લ

    ϗ ε τ  取り上げるのはクラウド型の CI (小規模 OSS で自前でサーバー持つ必要ない…)
  22. ໨࣍ લ൒  近年の OSS 開発における CI について q $*ͱ͸Կ͔ q $*ͷ෼ྨ

    q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར఺
  23. 044Ͱ$*αʔϏεΛར༻͢Δར఺ جຊແྉͰ࢖͑Δ q  044Ͱͷར༻͸جຊແྉͰ࢖͑Δ q  ར༻Ͱ͖Δػೳ͕ɺ༗ྉ൛ͱ΄΅มΘΒͳ͍৔߹΋ଟ͍ (JU)VCͱͷ࿈ܞ͕ॆ࣮͍ͯ͠Δ q  044ͷίʔυ͸(JU)VC͕࢖ΘΕΔ͜ͱ͕ଟ͍ q 

    3&"%.&ͷόοδ͕Ұഋʹͳָ͍ͬͯ͠
  24. ·ͱΊ ։ൃΛศརʹ͢Δͷ͕$* q  ςετΛఆظతʹ૸Βͤ044ͷ඼࣭Λ޲্ q  $*ͷόοδΛషͬͯ։ൃϞνϕʔγϣϯΛҡ࣋ 044ͱ$*αʔϏε͸૬ੑ͕ྑ͍ q  ແྉͰศརͳαʔϏεΛड͚Α͏

  25. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  26. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  27. 1FSMͷςετख๏ use strict; use warnings; use Test::More; subtest basic =>

    sub { ok 1; }; done_testing; UϑΝΠϧʹςετΛهड़ ςετΛ࣮ߦ $ prove -lv t/basic.t ͓޷ΈͷϥΠϒϥϦͰ
  28. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  29. $1"/5FTUFST

  30. $1"/5FTUFST $1"/5FTUFSTͱ͸  q  ༗ࢤͷςελʔ͕$1"/ϞδϡʔϧΛςετ q  ෳ਺όʔδϣϯYෳ਺؀ڥͰͷςετ݁Ռ͕·ͱ·͍ͬͯΔ o  1FSMW o 

    1FSMW o  1FSMW o  1FSMW  o  -JOVY o  8JOEPXT o  NBD04 o  'SFF#4%  ૊Έ߹Θͤ
  31. $1"/5FTUFST $1"/5FTUFSTͷϝϦοτ q  $1"/ʹΞοϓϩʔυ͢Δ͚ͩͰউखʹςετ͞ΕΔ q  ௝͍͠؀ڥͰͷςετ΋࣮ߦ͞ΕΔ $1"/5FTUFSTͷσϝϦοτ q  ௚͙ʹ݁Ռ͕෼͔Βͳ͍ q 

    كʹཧෆਚͳ'"*-͕͋Δ
  32. $1"/5FTUFST $1"/5FTUFSTͷϝϦοτ q  $1"/ʹΞοϓϩʔυ͢Δ͚ͩͰউखʹςετ͞ΕΔ q  ௝͍͠؀ڥͰͷςετ΋࣮ߦ͞ΕΔ $1"/5FTUFSTͷσϝϦοτ q  ௚͙ʹ݁Ռ͕෼͔Βͳ͍ q 

    كʹཧෆਚͳ'"*-͕͋Δ Cygwin 環境とか用意したくないし… わざわざ CI で回すほどでもないし…
  33. $1"/5FTUFST $1"/5FTUFSTͷϝϦοτ q  $1"/ʹΞοϓϩʔυ͢Δ͚ͩͰউखʹςετ͞ΕΔ q  ௝͍͠؀ڥͰͷςετ΋࣮ߦ͞ΕΔ $1"/5FTUFSTͷσϝϦοτ q  ௚͙ʹ݁Ռ͕෼͔Βͳ͍ q 

    كʹཧෆਚͳ'"*-͕͋Δ テストした環境が、管理下にないために発生…
  34. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  35. 1FSMΛ$*Ͱςετ͢Δ 1FSMͷ$*͸5SBWJT$*͕Φεεϝ q  1FSMΛެࣜʹαϙʔτ q  ෳ਺1FSMόʔδϣϯͰͷςετ͕Մೳ ະରԠͳ$*αʔϏε΋ଟ͍ q  ৽͠ΊͷαʔϏεͰ͸αϙʔτ͞Ε͍ͯͳ͍ q 

    ެࣜʹαϙʔτ͍ͯ͠ͳ͍͚ͩͰɺར༻͸Մೳ
  36. 1FSMΛ$*Ͱςετ͢Δ 1FSMͷ$*͸5SBWJT$*͕Φεεϝ q  1FSMΛެࣜʹαϙʔτ q  ෳ਺1FSMόʔδϣϯͰͷςετ͕Մೳ ະରԠͳ$*αʔϏε΋ଟ͍ q  ৽͠ΊͷαʔϏεͰ͸αϙʔτ͞Ε͍ͯͳ͍ q 

    ެࣜʹαϙʔτ͍ͯ͠ͳ͍͚ͩͰɺར༻͸Մೳ 参考程度に対応状況の一覧を調べてみました
  37. ࢀߟ$*ͷ1FSMαϙʔτͷݱঢ় 5SBWJT $* $JSDMF $* "QQ 7FZPS 8FSDLFS 4IJQ QBCMF

    $PEF TIJQ 4FNB QIPSF %SPOF .BHOVN $* 4OBQ$* 7FYPS 1FSM ˓ ˓ 3VCZ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1ZUIPO ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1)1 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ /PEF ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ +BWB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 4DBMB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ (P ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ
  38. ࢀߟ$*ͷ1FSMαϙʔτͷݱঢ় 5SBWJT $* $JSDMF $* "QQ 7FZPS 8FSDLFS 4IJQ QBCMF

    $PEF TIJQ 4FNB QIPSF %SPOF .BHOVN $* 4OBQ$* 7FYPS 1FSM ˓ ˓ 3VCZ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1ZUIPO ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1)1 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ /PEF ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ +BWB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 4DBMB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ (P ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ 世知辛い世の中ですね…
  39. ࢀߟ$*ͷ1FSMαϙʔτͷݱঢ় 5SBWJT $* $JSDMF $* "QQ 7FZPS 8FSDLFS 4IJQ QBCMF

    $PEF TIJQ 4FNB QIPSF %SPOF .BHOVN $* 4OBQ$* 7FYPS 1FSM ˓ ˓ 3VCZ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1ZUIPO ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 1)1 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ /PEF ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ +BWB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ 4DBMB ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ (P ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ 最もサポートされているのは Ruby でした
  40. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒  5BCMFPG$POUFOUT  
  41. 5SBWJT$*

  42. 5SBWJT$* q  044ͷςετͰΑ͘࢖ΘΕΔ࿝ฮ$* o  5SBWJT$*͕ແ͚Ε͹ɺࠓͷ8FC͸ແ͍Ϩϕϧ q  ୅දతͳϓϩδΣΫτ o  K2VFSZ 3VCZPO3BJMT

    "NPO FUD 5SBWJT$*ͱ͸  q  -JOVY.BD049྆ରԠ q  #VJME.BUSJY͕૊ΊΔ ͦͷଞͷಛ௃ ޙ΄Ͳղઆ
  43. 5SBWJT$*ͷ࢖͍ํ 5SBWJT$*ͰςετΛ࣮ߦ͢Δ·Ͱ   (JU)VCΞΧ΢ϯτͰϩάΠϯ͠࿈ܞ   ςετର৅ͷϨϙδτϦΛ௥Ճ   ϨϙδτϦʹઃఆϑΝΠϧΛ௥Ճ   HJUQVTIʹରͯ͠ςετ͕࣮ߦ

    ࿈ܞ
  44. 5SBWJT$*ͷ࢖͍ํ ઃఆϑΝΠϧ USBWJTZNM  language: perl sudo: false perl: -

    "5.12” - "5.16” - "5.20” - "5.24” notifications: slack: - secure: ”XXXX"
  45. 5SBWJT$*ͷ࢖͍ํ ઃఆϑΝΠϧ USBWJTZNM  language: perl sudo: false perl: -

    "5.12” - "5.16” - "5.20” - "5.24” notifications: slack: - secure: ”XXXX" 複数 Perl バージョンをまとめてテストできる
  46. 5SBWJT$*ͷ࢖͍ํ ઃఆϑΝΠϧ USBWJTZNM  language: perl sudo: false perl: -

    "5.12” - "5.16” - "5.20” - "5.24” notifications: slack: - secure: ”XXXX" ビルド結果を Slack に投稿するように連携できる
  47. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  48. $PEFDPW

  49. $PEFDPW q  ΧόϨοδͷՄࢹԽΛߦ͑ΔαʔϏε q  (JU)VC࿈ܞ͕େมศར o  (JU)VCͷιʔείʔυ্ʹ௚઀දࣔͰ͖Δ $PEFDPWͱ͸  LBSVQBOFSVSB"OJLJ"OJLJQNΑΓ

  50. $PEFDPW q  ΧόϨοδͷՄࢹԽΛߦ͑ΔαʔϏε q  (JU)VC࿈ܞ͕େมศར o  (JU)VCͷιʔείʔυ্ʹ௚઀දࣔͰ͖Δ $PEFDPWͱ͸  LBSVQBOFSVSB"OJLJ"OJLJQNΑΓ

    カバレッジ (網羅率) = テスト対象のコードがテストでどれだけ実行されたか
  51. $PEFDPW q  ΧόϨοδͷՄࢹԽΛߦ͑ΔαʔϏε q  (JU)VC࿈ܞ͕େมศར o  (JU)VCͷιʔείʔυ্ʹ௚઀දࣔͰ͖Δ $PEFDPWͱ͸  LBSVQBOFSVSB"OJLJ"OJLJQNΑΓ

    類似サービスの Coveralls には無い機能
  52. $PEFDPW q  ΧόϨοδͷՄࢹԽΛߦ͑ΔαʔϏε q  (JU)VC࿈ܞ͕େมศར o  (JU)VCͷιʔείʔυ্ʹ௚઀දࣔͰ͖Δ $PEFDPWͱ͸  LBSVQBOFSVSB"OJLJ"OJLJQNΑΓ

    GitHub の Web 上から直接結果が見れて、非常に便利
  53. $PEFDPWͷ࢖͍ํ ΧόϨοδΛܭଌ͢Δ $ cpanm Devel::Cover $ perl Build.PL && ./Build

    build $ cover -test  q  %FWFM$PWFSϞδϡʔϧΛ࢖͏ q  ΧόϨοδΛଌఆ͢Δͱςετ͕஗͘ͳΔͷ͕೉఺ ଌఆ࣌ʹ࣮ߦ͢ΔίϚϯυ
  54. $PEFDPWͷ࢖͍ํ ΧόϨοδΛ$PEFDPW΁ૹ৴͢Δ $ cpanm Devel::Cover::Report::Codecov $ cover -report codecov q 

    Devel::Cover::Report::CodecovϞδϡʔϧΛ࢖͏ q  5SBWJT$*ͳͲͰΧόϨοδଌఆޙʹૹ৴͢Δ ૹ৴࣌ʹ࣮ߦ͢ΔίϚϯυ
  55. Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়

    q ෳ਺1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ໨࣍ ޙ൒ 
  56. 8JOEPXTNBD04Ͱͷ$* -JOVYҎ֎ͷ؀ڥͰͷςετ͸ඞཁ  q  ඇରԠ؀ڥͱͯ͠໌͍ࣔͯ͠ͳ͚Ε͹ɺςετ͢΂͖ o  ಈ͔ͳ͍ͷ͸؀ڥґଘͷίʔυ͕͋Δ͔Β o  'JMF4QFDͳͲɺґଘΛٵऩ͢ΔϥΠϒϥϦΛ࢖͓͏ 8JOEPXT͔Β࢖͏Ϣʔβʔ͸ډΔͷ͔

     ࢀߟIUUQTHJUIVCDPN[LBUUBMLTCMPCNBTUFSOPEFGFTUTMJEFTNECFUUFSXJOEPXTTVQQPSU q  OQNͷ৔߹ɺμ΢ϯϩʔυͷ͸8JOEPXT͔Β o  $1"/ͷ৔߹ɺײ֮஋ͱͯ͠͸΋ͬͱগͳ͍ͱࢥ͏͕
  57. "QQ7FZPS

  58. "QQ7FZPS "QQ7FZPSͱ͸  q  8JOEPXTͰςετՄೳͳ$*αʔϏε o  ࣮ଶ͸8JOEPXT4FSWFS 8JOEPXT૬౰  q 

    044։ൃ͸ແྉͰར༻Մೳ q  ࣗલͰ1FSMΛΠϯετʔϧͯ͠ར༻
  59. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM 
  60. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM  PowerShell のコマンドで StrawberryPerl をダウンロード
  61. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM  インストーラー (.msi) を無人インストール
  62. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM  依存モジュールをインストール
  63. "QQ7FZPSͷ࢖͍ํ install: - ps: Invoke-WebRequest -Uri http://strawberryperl.com/download/5.24.0.1/strawberry-perl-5.24.0.1-64bit .msi -OutFile strawberry-perl-5.24.0.1-64bit.msi

    - ps: Start-Process msiexec.exe -ArgumentList @("/package", "strawberry- perl-5.24.0.1-64bit.msi", "/qn", "INSTALLDIR=C:\strawberry") –Wait - SET PATH=C:¥strawberry¥c¥bin;C:¥strawberry¥perl¥site¥bin;C:¥strawberry ¥perl¥bin;%PATH% - cpanm --notest --quiet Carton - carton install --without develop test_script: - SET PATH=%CD%¥local¥bin;%PATH% - SET PERL5LIB=%CD%¥local¥lib¥perl5;%PERL5LIB% - perl Build.PL - Build - Build test ઃఆϑΝΠϧ BQQWFZPSZNM  インストールした Perl でテストを実行
  64. "QQ7FZPSͰͷςετ࣮ߦΠϝʔδ

  65. "QQ7FZPSͰͷςετ࣮ߦΠϝʔδ 前回インストールした依存 `local` をキャッシュ 差分がなければ、追加で `carton install` が走らない

  66. "QQ7FZPSͰͷςετ࣮ߦΠϝʔδ XS のビルドも実行できている! (Strawberry Perl に gcc が含まれている)

  67. NBD04Ͱͷ$* NBD04Ͱ$*Λఏڙ͢Δʹ͸น͕͋Δ q  ϥΠηϯε্ɺ.BDͷϚγϯ্Ͱ͔͠ಈ͔ͤͳ͍ o  -JOVY্ͷ7.Ͱಈ࡞ͤ͞Δ͜ͱ͸Ͱ͖ͳ͍ NBD04ʹରԠͨ͠$*͸গͳ͍͕ଘࡏ͢Δ q  5SBWJT$* o 

    -JOVYϏϧυͱͷಉ࣌ར༻͸ɺجຊతʹ͸Ͱ͖ͳ͍ ڐՄ੍  q  #JUSJTF o  J04"OESPJEΞϓϦͷϏϧυΛ໨తͱͨ͠αʔϏε
  68. NBD04Ͱͷ$* NBD04Ͱ$*Λఏڙ͢Δʹ͸น͕͋Δ q  ϥΠηϯε্ɺ.BDͷϚγϯ্Ͱ͔͠ಈ͔ͤͳ͍ o  -JOVY্ͷ7.Ͱಈ࡞ͤ͞Δ͜ͱ͸Ͱ͖ͳ͍ NBD04ʹରԠͨ͠$*͸গͳ͍͕ଘࡏ͢Δ q  5SBWJT$* o 

    -JOVYϏϧυͱͷಉ࣌ར༻͸ɺجຊతʹ͸Ͱ͖ͳ͍ ڐՄ੍  q  #JUSJTF o  J04"OESPJEΞϓϦͷϏϧυΛ໨తͱͨ͠αʔϏε 併用ができるこちらをオススメ
  69. NBD04Ͱͷ$* NBD04Ͱ$*Λఏڙ͢Δʹ͸น͕͋Δ q  ϥΠηϯε্ɺ.BDͷϚγϯ্Ͱ͔͠ಈ͔ͤͳ͍ o  -JOVY্ͷ7.Ͱಈ࡞ͤ͞Δ͜ͱ͸Ͱ͖ͳ͍ NBD04ʹରԠͨ͠$*͸গͳ͍͕ଘࡏ͢Δ q  5SBWJT$* o 

    -JOVYϏϧυͱͷಉ࣌ར༻͸ɺجຊతʹ͸Ͱ͖ͳ͍ ڐՄ੍  q  #JUSJTF o  J04"OESPJEΞϓϦͷϏϧυΛ໨తͱͨ͠αʔϏε 詳しい使い方は割愛
  70. 1FSMͷ$*·ͱΊ Ұൠతͳ1FSMͷ044ͷ$* q  5SBWJT$*Ͱෳ਺όʔδϣϯΛςετ q  $1"/5FTUFSTͷ݁ՌΛஞҰ֬ೝ ΋ͬͱ࢖͍͜ͳ͢ʹ͸ q  $PEFDPWͰΧόϨοδΛՄࢹԽ q 

    8JOEPXTNBD04؀ڥͰ΋ςετΛఆظ࣮ߦ
  71. ͓ΘΓʹ $*Ͱָ͍͠044։ൃΛ q  ϓϩδΣΫτ͝ͱʹ࠷దͳબ୒Λ q  ։ൃΛࢧԉ͢Δ΋ͷʹۤ͠ΊΒΕΔͳ ޻෉࣍ୈͰ·ͩ·ͩ1FSM΋࢖͑Δ q  ެࣜʹαϙʔτ͞Ε͍ͳ͍͜ͱ΋͋Δ͕͝Ѫᇷ q 

    ָ͍͠1FSMϥΠϑΛ
  72. ͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ 5IBOLT