Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
近年の OSS 開発における CI 選択のベストプラクティス
Search
Pine Mizune
December 10, 2016
Programming
4.5k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
近年の OSS 開発における CI 選択のベストプラクティス
YAPC::Hokkaido 2016 SAPPORO で発表した資料です。
http://yapcjapan.org/2016hokkaido/
Pine Mizune
December 10, 2016
More Decks by Pine Mizune
See All by Pine Mizune
多言語対応と絵文字ジェネレーター / i18n of Emoji Generator
pine
0
900
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
2k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
710
Lerna による明示的疎結合アーキテクチャ
pine
1
690
CircleCI 2.0 x JavaScript
pine
3
590
Perl 卒業式
pine
0
380
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
540
Emoji Generator meets Browser Extensions
pine
1
3k
yarn VS. npm@2 VS. npm@3
pine
3
1.2k
Other Decks in Programming
See All in Programming
Vue Fes Japan の “作る側”に関わってみて
naokihaba
0
140
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
370
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
34
16k
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
480
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
140
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
150
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
190
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
8
5.7k
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
550
AWSに止められる覚悟してますか?
morizo_1984
2
530
Featured
See All Featured
Claude Code のすすめ
schroneko
67
230k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5.2k
New Earth Scene 8
popppiees
4
2.7k
Paper Plane
katiecoart
PRO
4
54k
Producing Creativity
orderedlist
PRO
348
41k
We Have a Design System, Now What?
morganepeng
55
8.4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
560
エンジニアに許された特別な時間の終わり
watany
109
250k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
The browser strikes back
jonoalderson
0
1.8k
WCS-LA-2024
lcolladotor
0
870
Exploring anti-patterns in Rails
aemeredith
4
530
Transcript
1JOF.J[VOF !QJOF :"1$)PLLBJEP ۙͷ044։ൃʹ͓͚Δ $*બͷϕετϓϥΫςΟε
.Z1SPpMFશൠ q )/1JOF.J[VOF ͽͶ o (JU)VC!QJOF o 5XJUUFS!QJOF q ॴଐ
ג ϞόΠϧϑΝΫτϦʔ o ৽ଔ ֶ෦ଔ o ιʔγϟϧΞϓϦαʔόʔαΠυ 1FSM .Z1SPpMF
q OQNQJOF q .BWFOQJOFN[ .Z1SPpMFr044׆ಈ q $1"/1*/& o %FWFM$PWFS3FQPSU$PEFDPW o
)BTI6UJM1JDL શϞδϡʔϧ શϞδϡʔϧ શύοέʔδ ࣳΛછΊΔͷ͕ੜ͖ߕ൹ͳλΠϓʜ .Z1SPpMF
.Z1SPpMFrίϛϡχςΟ׆ಈ .Z1SPpMF ҬܥษڧձͷӡӦ ౦ژ o (PUBOEBKTd o
(PUBOEBNPCJMF o $SZTUBM+1d ֤छษڧձͷࢀՃɾൃද o +BWB4DSJQU 1FSM FUD o :"1$ॳొஃ ࢀՃճ
ࠓɺ 1FSMͱ044ͱ$* ͷΛ͠·͢ɻ *OUSPEVDUJPO
େنαʔϏεͰͷ +FOLJOTͷӡ༻ํ๏ ͱ͔ͷ͠·ͤΜɻ ˞͝ҙ͍ͩ͘͞ *OUSPEVDUJPO
औΓ্͛ΔɾऔΓ্͛ͳ͍ q $*Ͱ044։ൃΛָ͘͢͠Δʹ q 1FSMͰ$*ճ͢߹ͷϋϚΓॴ औΓ্͛Δ औΓ্͛ͳ͍ q ࣾͷ$*αʔόʔͷӡ༻ํ๏ q
ςετΛߴԽ͢Δ5JQT *OUSPEVDUJPO
ظ͢Δλʔήοτ q 1FSMͰ044Λ։ൃ͍ͯ͠Δਓ q ଞݴޠͰ044։ൃΛ͍ͯ͠Δਓ 044։ൃΛ͍ͯ͠Δਓ q 044։ൃʹڵຯ͕͋Δਓ q 4BB4ϕʔεͷ$*ΛۀʹऔΓೖΕ͍ͨਓ
044։ൃΛ͍ͯ͠ͳ͍ਓ *OUSPEVDUJPO
ຊτʔΫͷΰʔϧ q ۙͷ$*αʔϏεʹ͍ͭͯجૅ͕ࣝͭ͘ q ϓϩμΫτʹԠͯ͡దͳ$*͕બͰ͖Δ q ָ͘͠044։ൃ͕Ͱ͖ΔΑ͏ʹͳΔ *OUSPEVDUJPO
࣍ લ 近年の OSS 開発における CI について q $*ͱԿ͔ q $*ͷྨ
q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར 5BCMFPG$POUFOUT
Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়
q ෳ1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ࣍ ޙ 5BCMFPG$POUFOUT
࣍ લ 近年の OSS 開発における CI について q $*ͱԿ͔ q $*ͷྨ
q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར
࣍ લ 近年の OSS 開発における CI について q $*ͱԿ͔ q $*ͷྨ
q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར
$*ͱԿ͔ $*$POUJOVPVT*OUFHSBUJPO – ຊޠܧଓతΠϯςάϨʔγϣϯ ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞࣌ͷ࣭վળ ೲظͷॖͷͨΊͷश׳ͷ͜ͱ ڱٛʹϏϧυςετɺΠϯεϖΫγϣϯ ͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ
ࢀর8JLJQFEJBʰܧଓతΠϯςάϨʔγϣϯʱ
$*ͱԿ͔ $*$POUJOVPVT*OUFHSBUJPO – ຊޠܧଓతΠϯςάϨʔγϣϯ ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞࣌ͷ࣭վળ ೲظͷॖͷͨΊͷश׳ͷ͜ͱ ڱٛʹϏϧυςετɺΠϯεϖΫγϣϯ ͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ
ࢀর8JLJQFEJBʰܧଓతΠϯςάϨʔγϣϯʱ 広義の CI ≠ テスト 品質改善が見込まれる習慣、全般を指す
$*ͱԿ͔ $*$POUJOVPVT*OUFHSBUJPO – ຊޠܧଓతΠϯςάϨʔγϣϯ ओʹϓϩάϥϚʔͷΞϓϦέʔγϣϯ࡞࣌ͷ࣭վળ ೲظͷॖͷͨΊͷश׳ͷ͜ͱ ڱٛʹϏϧυςετɺΠϯεϖΫγϣϯ ͳͲΛܧଓతʹ࣮ߦ͍ͯ͘͜͠ͱΛҙຯ͢Δ
ࢀর8JLJQFEJBʰܧଓతΠϯςάϨʔγϣϯʱ ソフトウェア開発で一般的に使われる定義 自動化することで、繰り返し適応できる
࣍ લ 近年の OSS 開発における CI について q $*ͱԿ͔ q $*ͷྨ
q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར
$*ͷྨ ࣗಈϏϧυɾςετ q هड़͞ΕͨࣗಈςετΛ࣮ߦ q ܧଓతʹςετΛ࣮ߦ͢Δ͜ͱͰɺݮͱ࣭ͷ୲อΛࢦ͢ ੳɾϨϏϡʔ q ίʔυΛنଇʹैͬͯ੩తղੳ q
ίʔυϨϏϡʔͷखؒΛݮΒ͠ɺݮͱ্࣭Λࢦ͢
࣍ લ 近年の OSS 開発における CI について q $*ͱԿ͔ q $*ͷྨ
q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར
$*πʔϧɾαʔϏεͷ۩ମྫ ࣗಈϏϧυɾςετ ੳɾϨϏϡʔ Ϋ ϥ υ ࣗ લ
ϗ ε τ
$*πʔϧɾαʔϏεͷ۩ମྫ ࣗಈϏϧυɾςετ ੳɾϨϏϡʔ Ϋ ϥ υ ࣗ લ
ϗ ε τ 取り上げるのはクラウド型の CI (小規模 OSS で自前でサーバー持つ必要ない…)
࣍ લ 近年の OSS 開発における CI について q $*ͱԿ͔ q $*ͷྨ
q $*πʔϧɾαʔϏεͷ۩ମྫ q 044։ൃͰ$*αʔϏεΛར༻͢Δར
044Ͱ$*αʔϏεΛར༻͢Δར جຊແྉͰ͑Δ q 044Ͱͷར༻جຊແྉͰ͑Δ q ར༻Ͱ͖Δػೳ͕ɺ༗ྉ൛ͱ΄΅มΘΒͳ͍߹ଟ͍ (JU)VCͱͷ࿈ܞ͕ॆ࣮͍ͯ͠Δ q 044ͷίʔυ(JU)VC͕ΘΕΔ͜ͱ͕ଟ͍ q
3&"%.&ͷόοδ͕Ұഋʹͳָ͍ͬͯ͠
·ͱΊ ։ൃΛศརʹ͢Δͷ͕$* q ςετΛఆظతʹΒͤ044ͷ࣭Λ্ q $*ͷόοδΛషͬͯ։ൃϞνϕʔγϣϯΛҡ࣋ 044ͱ$*αʔϏε૬ੑ͕ྑ͍ q ແྉͰศརͳαʔϏεΛड͚Α͏
Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়
q ෳ1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ࣍ ޙ
Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়
q ෳ1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ࣍ ޙ
1FSMͷςετख๏ use strict; use warnings; use Test::More; subtest basic =>
sub { ok 1; }; done_testing; UϑΝΠϧʹςετΛهड़ ςετΛ࣮ߦ $ prove -lv t/basic.t ͓ΈͷϥΠϒϥϦͰ
Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়
q ෳ1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ࣍ ޙ
$1"/5FTUFST
$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% Έ߹Θͤ
$1"/5FTUFST $1"/5FTUFSTͷϝϦοτ q $1"/ʹΞοϓϩʔυ͢Δ͚ͩͰউखʹςετ͞ΕΔ q ͍͠ڥͰͷςετ࣮ߦ͞ΕΔ $1"/5FTUFSTͷσϝϦοτ q ͙ʹ݁Ռ͕͔Βͳ͍ q
كʹཧෆਚͳ'"*-͕͋Δ
$1"/5FTUFST $1"/5FTUFSTͷϝϦοτ q $1"/ʹΞοϓϩʔυ͢Δ͚ͩͰউखʹςετ͞ΕΔ q ͍͠ڥͰͷςετ࣮ߦ͞ΕΔ $1"/5FTUFSTͷσϝϦοτ q ͙ʹ݁Ռ͕͔Βͳ͍ q
كʹཧෆਚͳ'"*-͕͋Δ Cygwin 環境とか用意したくないし… わざわざ CI で回すほどでもないし…
$1"/5FTUFST $1"/5FTUFSTͷϝϦοτ q $1"/ʹΞοϓϩʔυ͢Δ͚ͩͰউखʹςετ͞ΕΔ q ͍͠ڥͰͷςετ࣮ߦ͞ΕΔ $1"/5FTUFSTͷσϝϦοτ q ͙ʹ݁Ռ͕͔Βͳ͍ q
كʹཧෆਚͳ'"*-͕͋Δ テストした環境が、管理下にないために発生…
Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়
q ෳ1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ࣍ ޙ
1FSMΛ$*Ͱςετ͢Δ 1FSMͷ$*5SBWJT$*͕Φεεϝ q 1FSMΛެࣜʹαϙʔτ q ෳ1FSMόʔδϣϯͰͷςετ͕Մೳ ະରԠͳ$*αʔϏεଟ͍ q ৽͠ΊͷαʔϏεͰαϙʔτ͞Ε͍ͯͳ͍ q
ެࣜʹαϙʔτ͍ͯ͠ͳ͍͚ͩͰɺར༻Մೳ
1FSMΛ$*Ͱςετ͢Δ 1FSMͷ$*5SBWJT$*͕Φεεϝ q 1FSMΛެࣜʹαϙʔτ q ෳ1FSMόʔδϣϯͰͷςετ͕Մೳ ະରԠͳ$*αʔϏεଟ͍ q ৽͠ΊͷαʔϏεͰαϙʔτ͞Ε͍ͯͳ͍ q
ެࣜʹαϙʔτ͍ͯ͠ͳ͍͚ͩͰɺར༻Մೳ 参考程度に対応状況の一覧を調べてみました
ࢀߟ$*ͷ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 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ
ࢀߟ$*ͷ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 ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˓ ˞αʔϏεͰެࣜʹαϙʔτ͍ͯ͠Δͱ໌ݴ͕͋ΔՕॴʹ˓Λهࡌ 世知辛い世の中ですね…
ࢀߟ$*ͷ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 でした
Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়
q ෳ1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ࣍ ޙ 5BCMFPG$POUFOUT
5SBWJT$*
5SBWJT$* q 044ͷςετͰΑ͘ΘΕΔฮ$* o 5SBWJT$*͕ແ͚Εɺࠓͷ8FCແ͍Ϩϕϧ q දతͳϓϩδΣΫτ o K2VFSZ 3VCZPO3BJMT
"NPO FUD 5SBWJT$*ͱ q -JOVY.BD049྆ରԠ q #VJME.BUSJY͕ΊΔ ͦͷଞͷಛ ޙ΄Ͳղઆ
5SBWJT$*ͷ͍ํ 5SBWJT$*ͰςετΛ࣮ߦ͢Δ·Ͱ (JU)VCΞΧϯτͰϩάΠϯ͠࿈ܞ ςετରͷϨϙδτϦΛՃ ϨϙδτϦʹઃఆϑΝΠϧΛՃ HJUQVTIʹରͯ͠ςετ͕࣮ߦ
࿈ܞ
5SBWJT$*ͷ͍ํ ઃఆϑΝΠϧ USBWJTZNM language: perl sudo: false perl: -
"5.12” - "5.16” - "5.20” - "5.24” notifications: slack: - secure: ”XXXX"
5SBWJT$*ͷ͍ํ ઃఆϑΝΠϧ USBWJTZNM language: perl sudo: false perl: -
"5.12” - "5.16” - "5.20” - "5.24” notifications: slack: - secure: ”XXXX" 複数 Perl バージョンをまとめてテストできる
5SBWJT$*ͷ͍ํ ઃఆϑΝΠϧ USBWJTZNM language: perl sudo: false perl: -
"5.12” - "5.16” - "5.20” - "5.24” notifications: slack: - secure: ”XXXX" ビルド結果を Slack に投稿するように連携できる
Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়
q ෳ1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ࣍ ޙ
$PEFDPW
$PEFDPW q ΧόϨοδͷՄࢹԽΛߦ͑ΔαʔϏε q (JU)VC࿈ܞ͕େมศར o (JU)VCͷιʔείʔυ্ʹදࣔͰ͖Δ $PEFDPWͱ LBSVQBOFSVSB"OJLJ"OJLJQNΑΓ
$PEFDPW q ΧόϨοδͷՄࢹԽΛߦ͑ΔαʔϏε q (JU)VC࿈ܞ͕େมศར o (JU)VCͷιʔείʔυ্ʹදࣔͰ͖Δ $PEFDPWͱ LBSVQBOFSVSB"OJLJ"OJLJQNΑΓ
カバレッジ (網羅率) = テスト対象のコードがテストでどれだけ実行されたか
$PEFDPW q ΧόϨοδͷՄࢹԽΛߦ͑ΔαʔϏε q (JU)VC࿈ܞ͕େมศར o (JU)VCͷιʔείʔυ্ʹදࣔͰ͖Δ $PEFDPWͱ LBSVQBOFSVSB"OJLJ"OJLJQNΑΓ
類似サービスの Coveralls には無い機能
$PEFDPW q ΧόϨοδͷՄࢹԽΛߦ͑ΔαʔϏε q (JU)VC࿈ܞ͕େมศར o (JU)VCͷιʔείʔυ্ʹදࣔͰ͖Δ $PEFDPWͱ LBSVQBOFSVSB"OJLJ"OJLJQNΑΓ
GitHub の Web 上から直接結果が見れて、非常に便利
$PEFDPWͷ͍ํ ΧόϨοδΛܭଌ͢Δ $ cpanm Devel::Cover $ perl Build.PL && ./Build
build $ cover -test q %FWFM$PWFSϞδϡʔϧΛ͏ q ΧόϨοδΛଌఆ͢Δͱςετ͕͘ͳΔͷ͕ ଌఆ࣌ʹ࣮ߦ͢ΔίϚϯυ
$PEFDPWͷ͍ํ ΧόϨοδΛ$PEFDPWૹ৴͢Δ $ cpanm Devel::Cover::Report::Codecov $ cover -report codecov q
Devel::Cover::Report::CodecovϞδϡʔϧΛ͏ q 5SBWJT$*ͳͲͰΧόϨοδଌఆޙʹૹ৴͢Δ ૹ৴࣌ʹ࣮ߦ͢ΔίϚϯυ
Perl の OSS 開発における CI について q 1FSMͷςετख๏ q CPAN Testers q 1FSMͷ$*αϙʔτͷݱঢ়
q ෳ1FSMόʔδϣϯͰͷ$* q ΧόϨοδͷՄࢹԽ q 8JOEPXTNBD04Ͱͷ$* ࣍ ޙ
8JOEPXTNBD04Ͱͷ$* -JOVYҎ֎ͷڥͰͷςετඞཁ q ඇରԠڥͱͯ͠໌͍ࣔͯ͠ͳ͚Εɺςετ͖͢ o ಈ͔ͳ͍ͷڥґଘͷίʔυ͕͋Δ͔Β o 'JMF4QFDͳͲɺґଘΛٵऩ͢ΔϥΠϒϥϦΛ͓͏ 8JOEPXT͔Β͏ϢʔβʔډΔͷ͔
ࢀߟIUUQTHJUIVCDPN[LBUUBMLTCMPCNBTUFSOPEFGFTUTMJEFTNECFUUFSXJOEPXTTVQQPSU q OQNͷ߹ɺμϯϩʔυͷ8JOEPXT͔Β o $1"/ͷ߹ɺײ֮ͱͯͬ͠ͱগͳ͍ͱࢥ͏͕
"QQ7FZPS
"QQ7FZPS "QQ7FZPSͱ q 8JOEPXTͰςετՄೳͳ$*αʔϏε o ࣮ଶ8JOEPXT4FSWFS 8JOEPXT૬ q
044։ൃແྉͰར༻Մೳ q ࣗલͰ1FSMΛΠϯετʔϧͯ͠ར༻
"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
"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 をダウンロード
"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) を無人インストール
"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 依存モジュールをインストール
"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 でテストを実行
"QQ7FZPSͰͷςετ࣮ߦΠϝʔδ
"QQ7FZPSͰͷςετ࣮ߦΠϝʔδ 前回インストールした依存 `local` をキャッシュ 差分がなければ、追加で `carton install` が走らない
"QQ7FZPSͰͷςετ࣮ߦΠϝʔδ XS のビルドも実行できている! (Strawberry Perl に gcc が含まれている)
NBD04Ͱͷ$* NBD04Ͱ$*Λఏڙ͢Δʹน͕͋Δ q ϥΠηϯε্ɺ.BDͷϚγϯ্Ͱ͔͠ಈ͔ͤͳ͍ o -JOVY্ͷ7.Ͱಈ࡞ͤ͞Δ͜ͱͰ͖ͳ͍ NBD04ʹରԠͨ͠$*গͳ͍͕ଘࡏ͢Δ q 5SBWJT$* o
-JOVYϏϧυͱͷಉ࣌ར༻ɺجຊతʹͰ͖ͳ͍ ڐՄ੍ q #JUSJTF o J04"OESPJEΞϓϦͷϏϧυΛతͱͨ͠αʔϏε
NBD04Ͱͷ$* NBD04Ͱ$*Λఏڙ͢Δʹน͕͋Δ q ϥΠηϯε্ɺ.BDͷϚγϯ্Ͱ͔͠ಈ͔ͤͳ͍ o -JOVY্ͷ7.Ͱಈ࡞ͤ͞Δ͜ͱͰ͖ͳ͍ NBD04ʹରԠͨ͠$*গͳ͍͕ଘࡏ͢Δ q 5SBWJT$* o
-JOVYϏϧυͱͷಉ࣌ར༻ɺجຊతʹͰ͖ͳ͍ ڐՄ੍ q #JUSJTF o J04"OESPJEΞϓϦͷϏϧυΛతͱͨ͠αʔϏε 併用ができるこちらをオススメ
NBD04Ͱͷ$* NBD04Ͱ$*Λఏڙ͢Δʹน͕͋Δ q ϥΠηϯε্ɺ.BDͷϚγϯ্Ͱ͔͠ಈ͔ͤͳ͍ o -JOVY্ͷ7.Ͱಈ࡞ͤ͞Δ͜ͱͰ͖ͳ͍ NBD04ʹରԠͨ͠$*গͳ͍͕ଘࡏ͢Δ q 5SBWJT$* o
-JOVYϏϧυͱͷಉ࣌ར༻ɺجຊతʹͰ͖ͳ͍ ڐՄ੍ q #JUSJTF o J04"OESPJEΞϓϦͷϏϧυΛతͱͨ͠αʔϏε 詳しい使い方は割愛
1FSMͷ$*·ͱΊ Ұൠతͳ1FSMͷ044ͷ$* q 5SBWJT$*ͰෳόʔδϣϯΛςετ q $1"/5FTUFSTͷ݁ՌΛஞҰ֬ೝ ͬͱ͍͜ͳ͢ʹ q $PEFDPWͰΧόϨοδΛՄࢹԽ q
8JOEPXTNBD04ڥͰςετΛఆظ࣮ߦ
͓ΘΓʹ $*Ͱָ͍͠044։ൃΛ q ϓϩδΣΫτ͝ͱʹ࠷దͳબΛ q ։ൃΛࢧԉ͢Δͷʹۤ͠ΊΒΕΔͳ ࣍ୈͰ·ͩ·ͩ1FSM͑Δ q ެࣜʹαϙʔτ͞Ε͍ͳ͍͜ͱ͋Δ͕͝Ѫᇷ q
ָ͍͠1FSMϥΠϑΛ
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠ 5IBOLT