$30 off During Our Annual Pro Sale. View Details »

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

Pine Mizune
December 10, 2016

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

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

Pine Mizune

December 10, 2016
Tweet

More Decks by Pine Mizune

Other Decks in Programming

Transcript

  1. 1JOF.J[VOF !QJOF

    :"1$)PLLBJEP
    ۙ೥ͷ044։ൃʹ͓͚Δ
    $*બ୒ͷϕετϓϥΫςΟε

    View Slide

  2. .Z1SPpMFશൠ
    q  )/1JOF.J[VOF ͽͶ

    o  (JU)VC!QJOF
    o  5XJUUFS!QJOF
    q ॴଐ ג
    ϞόΠϧϑΝΫτϦʔ
    o  ৽ଔ೥໨ ֶ෦ଔ

    o  ιʔγϟϧΞϓϦαʔόʔαΠυ 1FSM

    .Z1SPpMF

    View Slide

  3. q  OQNQJOF
    q  .BWFOQJOFN[
    .Z1SPpMFr044׆ಈ
    q  $1"/1*/&
    o  %FWFM$PWFS3FQPSU$PEFDPW
    o  )BTI6UJM1JDL
    શϞδϡʔϧ
    શϞδϡʔϧ
    શύοέʔδ
    ࣳΛછΊΔͷ͕ੜ͖ߕ൹ͳλΠϓʜ
    .Z1SPpMF

    View Slide

  4. .Z1SPpMFrίϛϡχςΟ׆ಈ
    .Z1SPpMF

    ஍ҬܥษڧձͷӡӦ ౦ژ

    o  (PUBOEBKTd
    o  (PUBOEBNPCJMF
    o  $SZTUBM+1d
    ֤छษڧձ΁ͷࢀՃɾൃද
    o  +BWB4DSJQU 1FSM FUD
    o  :"1$͸ॳొஃ ࢀՃ͸ճ໨

    View Slide

  5. ࠓ೔͸ɺ
    1FSMͱ044ͱ$*
    ͷ࿩Λ͠·͢ɻ
    *OUSPEVDUJPO

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. ໨࣍ લ൒

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

    View Slide

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

    5BCMFPG$POUFOUT

    View Slide

  12. ໨࣍ લ൒

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

    View Slide

  13. ໨࣍ લ൒

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

    View Slide

  14. $*ͱ͸Կ͔
    $*$POUJOVPVT*OUFHSBUJPO
    –  ೔ຊޠܧଓతΠϯςάϨʔγϣϯ
    ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞੒࣌ͷ඼࣭վળ
    ΍ೲظͷ୹ॖͷͨΊͷश׳ͷ͜ͱ

    ڱٛʹ͸Ϗϧυ΍ςετɺΠϯεϖΫγϣϯ
    ͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ

    ࢀর8JLJQFEJBʰܧଓతΠϯςάϨʔγϣϯʱ

    View Slide

  15. $*ͱ͸Կ͔
    $*$POUJOVPVT*OUFHSBUJPO
    –  ೔ຊޠܧଓతΠϯςάϨʔγϣϯ
    ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞੒࣌ͷ඼࣭վળ
    ΍ೲظͷ୹ॖͷͨΊͷश׳ͷ͜ͱ

    ڱٛʹ͸Ϗϧυ΍ςετɺΠϯεϖΫγϣϯ
    ͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ

    ࢀর8JLJQFEJBʰܧଓతΠϯςάϨʔγϣϯʱ
    広義の CI ≠ テスト
    品質改善が見込まれる習慣、全般を指す

    View Slide

  16. $*ͱ͸Կ͔
    $*$POUJOVPVT*OUFHSBUJPO
    –  ೔ຊޠܧଓతΠϯςάϨʔγϣϯ
    ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞੒࣌ͷ඼࣭վળ
    ΍ೲظͷ୹ॖͷͨΊͷश׳ͷ͜ͱ

    ڱٛʹ͸Ϗϧυ΍ςετɺΠϯεϖΫγϣϯ
    ͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ

    ࢀর8JLJQFEJBʰܧଓతΠϯςάϨʔγϣϯʱ
    ソフトウェア開発で一般的に使われる定義
    自動化することで、繰り返し適応できる

    View Slide

  17. ໨࣍ લ൒

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

    View Slide

  18. $*ͷ෼ྨ
    ࣗಈϏϧυɾςετ
    q  هड़͞ΕͨࣗಈςετΛ࣮ߦ
    q  ܧଓతʹςετΛ࣮ߦ͢Δ͜ͱͰɺ޻਺࡟ݮͱ඼࣭ͷ୲อΛ໨ࢦ͢
    ෼ੳɾϨϏϡʔ
    q  ίʔυΛنଇʹैͬͯ੩తղੳ
    q  ίʔυϨϏϡʔͷखؒΛݮΒ͠ɺ޻਺࡟ݮͱ඼࣭޲্Λ໨ࢦ͢

    View Slide

  19. ໨࣍ લ൒

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

    View Slide

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



    ϗ
    ε
    τ

    View Slide

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



    ϗ
    ε
    τ

    取り上げるのはクラウド型の CI
    (小規模 OSS で自前でサーバー持つ必要ない…)

    View Slide

  22. ໨࣍ લ൒

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

    View Slide

  23. 044Ͱ$*αʔϏεΛར༻͢Δར఺
    جຊແྉͰ࢖͑Δ
    q  044Ͱͷར༻͸جຊແྉͰ࢖͑Δ
    q  ར༻Ͱ͖Δػೳ͕ɺ༗ྉ൛ͱ΄΅มΘΒͳ͍৔߹΋ଟ͍
    (JU)VCͱͷ࿈ܞ͕ॆ࣮͍ͯ͠Δ
    q  044ͷίʔυ͸(JU)VC͕࢖ΘΕΔ͜ͱ͕ଟ͍
    q  3&"%.&ͷόοδ͕Ұഋʹͳָ͍ͬͯ͠

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. 1FSMͷςετख๏
    use strict;
    use warnings;
    use Test::More;

    subtest basic => sub {
    ok 1;
    };

    done_testing;
    UϑΝΠϧʹςετΛهड़
    ςετΛ࣮ߦ
    $ prove -lv t/basic.t
    ͓޷ΈͷϥΠϒϥϦͰ

    View Slide

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

    View Slide

  29. $1"/5FTUFST

    View Slide

  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%

    ૊Έ߹Θͤ

    View Slide

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

    View Slide

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

    View Slide

  33. $1"/5FTUFST
    $1"/5FTUFSTͷϝϦοτ
    q  $1"/ʹΞοϓϩʔυ͢Δ͚ͩͰউखʹςετ͞ΕΔ
    q  ௝͍͠؀ڥͰͷςετ΋࣮ߦ͞ΕΔ
    $1"/5FTUFSTͷσϝϦοτ
    q  ௚͙ʹ݁Ռ͕෼͔Βͳ͍
    q  كʹཧෆਚͳ'"*-͕͋Δ
    テストした環境が、管理下にないために発生…

    View Slide

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

    View Slide

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

    View Slide

  36. 1FSMΛ$*Ͱςετ͢Δ
    1FSMͷ$*͸5SBWJT$*͕Φεεϝ
    q  1FSMΛެࣜʹαϙʔτ
    q  ෳ਺1FSMόʔδϣϯͰͷςετ͕Մೳ
    ະରԠͳ$*αʔϏε΋ଟ͍
    q  ৽͠ΊͷαʔϏεͰ͸αϙʔτ͞Ε͍ͯͳ͍
    q  ެࣜʹαϙʔτ͍ͯ͠ͳ͍͚ͩͰɺར༻͸Մೳ
    参考程度に対応状況の一覧を調べてみました

    View Slide

  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 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓
    ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ

    View Slide

  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 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓
    ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ
    世知辛い世の中ですね…

    View Slide

  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 でした

    View Slide

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

    5BCMFPG$POUFOUT

    View Slide

  41. 5SBWJT$*

    View Slide

  42. 5SBWJT$*
    q  044ͷςετͰΑ͘࢖ΘΕΔ࿝ฮ$*
    o  5SBWJT$*͕ແ͚Ε͹ɺࠓͷ8FC͸ແ͍Ϩϕϧ
    q  ୅දతͳϓϩδΣΫτ
    o  K2VFSZ 3VCZPO3BJMT "NPO FUD
    5SBWJT$*ͱ͸
    q  -JOVY.BD049྆ରԠ
    q  #VJME.BUSJY͕૊ΊΔ
    ͦͷଞͷಛ௃
    ޙ΄Ͳղઆ

    View Slide

  43. 5SBWJT$*ͷ࢖͍ํ
    5SBWJT$*ͰςετΛ࣮ߦ͢Δ·Ͱ
      (JU)VCΞΧ΢ϯτͰϩάΠϯ͠࿈ܞ
      ςετର৅ͷϨϙδτϦΛ௥Ճ
      ϨϙδτϦʹઃఆϑΝΠϧΛ௥Ճ
      HJUQVTIʹରͯ͠ςετ͕࣮ߦ
    ࿈ܞ

    View Slide

  44. 5SBWJT$*ͷ࢖͍ํ
    ઃఆϑΝΠϧ USBWJTZNM

    language: perl
    sudo: false
    perl:
    - "5.12”
    - "5.16”
    - "5.20”
    - "5.24”

    notifications:
    slack:
    - secure: ”XXXX"

    View Slide

  45. 5SBWJT$*ͷ࢖͍ํ
    ઃఆϑΝΠϧ USBWJTZNM

    language: perl
    sudo: false
    perl:
    - "5.12”
    - "5.16”
    - "5.20”
    - "5.24”

    notifications:
    slack:
    - secure: ”XXXX"
    複数 Perl バージョンをまとめてテストできる

    View Slide

  46. 5SBWJT$*ͷ࢖͍ํ
    ઃఆϑΝΠϧ USBWJTZNM

    language: perl
    sudo: false
    perl:
    - "5.12”
    - "5.16”
    - "5.20”
    - "5.24”

    notifications:
    slack:
    - secure: ”XXXX"
    ビルド結果を Slack に投稿するように連携できる

    View Slide

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

    View Slide

  48. $PEFDPW

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  52. $PEFDPW
    q  ΧόϨοδͷՄࢹԽΛߦ͑ΔαʔϏε
    q  (JU)VC࿈ܞ͕େมศར
    o  (JU)VCͷιʔείʔυ্ʹ௚઀දࣔͰ͖Δ
    $PEFDPWͱ͸
    LBSVQBOFSVSB"OJLJ"OJLJQNΑΓ
    GitHub の Web 上から直接結果が見れて、非常に便利

    View Slide

  53. $PEFDPWͷ࢖͍ํ
    ΧόϨοδΛܭଌ͢Δ
    $ cpanm Devel::Cover
    $ perl Build.PL && ./Build build
    $ cover -test

    q  %FWFM$PWFSϞδϡʔϧΛ࢖͏
    q  ΧόϨοδΛଌఆ͢Δͱςετ͕஗͘ͳΔͷ͕೉఺
    ଌఆ࣌ʹ࣮ߦ͢ΔίϚϯυ

    View Slide

  54. $PEFDPWͷ࢖͍ํ
    ΧόϨοδΛ$PEFDPW΁ૹ৴͢Δ
    $ cpanm Devel::Cover::Report::Codecov
    $ cover -report codecov
    q  Devel::Cover::Report::CodecovϞδϡʔϧΛ࢖͏
    q  5SBWJT$*ͳͲͰΧόϨοδଌఆޙʹૹ৴͢Δ
    ૹ৴࣌ʹ࣮ߦ͢ΔίϚϯυ

    View Slide

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

    View Slide

  56. 8JOEPXTNBD04Ͱͷ$*
    -JOVYҎ֎ͷ؀ڥͰͷςετ͸ඞཁ
    q  ඇରԠ؀ڥͱͯ͠໌͍ࣔͯ͠ͳ͚Ε͹ɺςετ͢΂͖
    o  ಈ͔ͳ͍ͷ͸؀ڥґଘͷίʔυ͕͋Δ͔Β
    o  'JMF4QFDͳͲɺґଘΛٵऩ͢ΔϥΠϒϥϦΛ࢖͓͏
    8JOEPXT͔Β࢖͏Ϣʔβʔ͸ډΔͷ͔
    ࢀߟIUUQTHJUIVCDPN[LBUUBMLTCMPCNBTUFSOPEFGFTUTMJEFTNECFUUFSXJOEPXTTVQQPSU
    q  OQNͷ৔߹ɺμ΢ϯϩʔυͷ͸8JOEPXT͔Β
    o  $1"/ͷ৔߹ɺײ֮஋ͱͯ͠͸΋ͬͱগͳ͍ͱࢥ͏͕

    View Slide

  57. "QQ7FZPS

    View Slide

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

    q  044։ൃ͸ແྉͰར༻Մೳ
    q  ࣗલͰ1FSMΛΠϯετʔϧͯ͠ར༻

    View Slide

  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

    View Slide

  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 をダウンロード

    View Slide

  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) を無人インストール

    View Slide

  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

    依存モジュールをインストール

    View Slide

  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 でテストを実行

    View Slide

  64. "QQ7FZPSͰͷςετ࣮ߦΠϝʔδ

    View Slide

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

    View Slide

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

    View Slide

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

    q  #JUSJTF
    o  J04"OESPJEΞϓϦͷϏϧυΛ໨తͱͨ͠αʔϏε

    View Slide

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

    q  #JUSJTF
    o  J04"OESPJEΞϓϦͷϏϧυΛ໨తͱͨ͠αʔϏε
    併用ができるこちらをオススメ

    View Slide

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

    q  #JUSJTF
    o  J04"OESPJEΞϓϦͷϏϧυΛ໨తͱͨ͠αʔϏε
    詳しい使い方は割愛

    View Slide

  70. 1FSMͷ$*·ͱΊ
    Ұൠతͳ1FSMͷ044ͷ$*
    q  5SBWJT$*Ͱෳ਺όʔδϣϯΛςετ
    q  $1"/5FTUFSTͷ݁ՌΛஞҰ֬ೝ
    ΋ͬͱ࢖͍͜ͳ͢ʹ͸
    q  $PEFDPWͰΧόϨοδΛՄࢹԽ
    q  8JOEPXTNBD04؀ڥͰ΋ςετΛఆظ࣮ߦ

    View Slide

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

    View Slide

  72. ͝ਗ਼ௌ
    ͋Γ͕ͱ͏͍͟͝·ͨ͠
    5IBOLT

    View Slide