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
630
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
1.3k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
580
Lerna による明示的疎結合アーキテクチャ
pine
1
580
CircleCI 2.0 x JavaScript
pine
3
500
Perl 卒業式
pine
0
290
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
450
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
スキーマ駆動開発による品質とスピードの両立 - 私達は何故、スキーマを書くのか
kentaroutakeda
0
170
AWS CDKコントリビュートTIPS / aws-cdk-contribution-tips
gotok365
2
110
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
VSCodeでのDatabricks開発もお勧めしたい/I would also recommend Databricks development with VSCode.
kazumain
0
250
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
8
4k
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
910
Elm 0.19.0 Changes
bkuhlmann
0
490
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
670
冗長なエラーログを削減し、スタックトレースを手に入れる / Reducing Verbose Error Logs and Obtaining Stack Traces
upamune
0
460
雑に思考を整理する技術と効能
konifar
58
29k
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
820
Designing for tomorrow's programming workflows
honnibal
PRO
2
130
Featured
See All Featured
Facilitating Awesome Meetings
lara
42
5.6k
Being A Developer After 40
akosma
57
580k
Reflections from 52 weeks, 52 projects
jeffersonlam
345
19k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
1k
Six Lessons from altMBA
skipperchong
21
3k
KATA
mclloyd
15
12k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Music & Morning Musume
bryan
41
5.6k
GraphQLとの向き合い方2022年版
quramy
32
12k
Building Flexible Design Systems
yeseniaperezcruz
319
37k
Writing Fast Ruby
sferik
621
60k
Designing for humans not robots
tammielis
248
25k
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