Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
近年の OSS 開発における CI 選択のベストプラクティス
Search
Pine Mizune
December 10, 2016
Programming
3
4.5k
近年の OSS 開発における CI 選択のベストプラクティス
YAPC::Hokkaido 2016 SAPPORO で発表した資料です。
http://yapcjapan.org/2016hokkaido/
Pine Mizune
December 10, 2016
Tweet
Share
More Decks by Pine Mizune
See All by Pine Mizune
多言語対応と絵文字ジェネレーター / i18n of Emoji Generator
pine
0
730
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
1.5k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
630
Lerna による明示的疎結合アーキテクチャ
pine
1
610
CircleCI 2.0 x JavaScript
pine
3
520
Perl 卒業式
pine
0
310
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
470
Emoji Generator meets Browser Extensions
pine
1
2.9k
yarn VS. npm@2 VS. npm@3
pine
3
1.1k
Other Decks in Programming
See All in Programming
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
talk-with-local-llm-with-web-streams-api
kbaba1001
0
180
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
210
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
140
快速入門可觀測性
blueswen
0
340
fs2-io を試してたらバグを見つけて直した話
chencmd
0
230
KubeCon + CloudNativeCon NA 2024 Overviewat Kubernetes Meetup Tokyo #68 / amsy810_k8sjp68
masayaaoyama
0
250
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
770
range over funcの使い道と非同期N+1リゾルバーの夢 / about a range over func
mackee
0
110
The Efficiency Paradox and How to Save Yourself and the World
hollycummins
1
440
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
290
create_tableをしただけなのに〜囚われのuuid編〜
daisukeshinoku
0
240
Featured
See All Featured
A better future with KSS
kneath
238
17k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Making Projects Easy
brettharned
116
5.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Code Review Best Practice
trishagee
65
17k
Navigating Team Friction
lara
183
15k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Building an army of robots
kneath
302
44k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Thoughts on Productivity
jonyablonski
67
4.4k
YesSQL, Process and Tooling at Scale
rocio
169
14k
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