Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
840
C++ 製グラフィックライブラリ Skia の紹介 / Introduction to the graphics library Skia written by C++
pine
0
1.8k
asyncio + aiohttp で作るウェブサービス / How to develop a web service with asyncio and aiohttp
pine
0
680
Lerna による明示的疎結合アーキテクチャ
pine
1
650
CircleCI 2.0 x JavaScript
pine
3
560
Perl 卒業式
pine
0
340
Android Studio の気になる warnings を抑制する方法まとめ
pine
0
510
Emoji Generator meets Browser Extensions
pine
1
3k
yarn VS. npm@2 VS. npm@3
pine
3
1.1k
Other Decks in Programming
See All in Programming
CSC305 Lecture 17
javiergs
PRO
0
300
チームをチームにするEM
hitode909
0
260
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
STYLE
koic
0
100
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
120
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
780
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
37
23k
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
320
WebRTC と Rust と8K 60fps
tnoho
2
1.9k
CloudNative Days Winter 2025: 一週間で作る低レイヤコンテナランタイム
ternbusty
7
2k
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
200
20 years of Symfony, what's next?
fabpot
2
330
Featured
See All Featured
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Scaling GitHub
holman
464
140k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Why Our Code Smells
bkeepers
PRO
340
57k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Automating Front-end Workflow
addyosmani
1371
200k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Navigating Team Friction
lara
191
16k
Music & Morning Musume
bryan
46
7k
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