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
RSpec概論
Search
shiraki hirotomo
September 14, 2018
Programming
0
700
RSpec概論
RSpecを触る前に僕が知っておきたかったこと
shiraki hirotomo
September 14, 2018
Tweet
Share
Other Decks in Programming
See All in Programming
20241217 競争力強化とビジネス価値創出への挑戦:モノタロウのシステムモダナイズ、開発組織の進化と今後の展望
monotaro
PRO
0
230
Jaspr Dart Web Framework 박제창 @Devfest 2024
itsmedreamwalker
0
140
Итераторы в Go 1.23: зачем они нужны, как использовать, и насколько они быстрые?
lamodatech
0
1.3k
バグを見つけた?それAppleに直してもらおう!
uetyo
0
210
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
1.1k
見えないメモリを観測する: PHP 8.4 `pg_result_memory_size()` とSQL結果のメモリ管理
kentaroutakeda
0
900
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
720
20年もののレガシープロダクトに 0からPHPStanを入れるまで / phpcon2024
hirobe1999
0
980
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
410
Fibonacci Function Gallery - Part 1
philipschwarz
PRO
0
270
CQRS+ES の力を使って効果を感じる / Feel the effects of using the power of CQRS+ES
seike460
PRO
0
230
今年一番支援させていただいたのは認証系サービスでした
satoshi256kbyte
1
280
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Practical Orchestrator
shlominoach
186
10k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
97
17k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Into the Great Unknown - MozCon
thekraken
34
1.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
550
Optimizing for Happiness
mojombo
376
70k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Transcript
34QFD֓ कΓ͍͢ςετίʔυͷϧʔϧ5*14
ΞδΣϯμ ࣗݾհ 34QFD֓ཁ جຊػೳ ޙʑࠔΓ͕ͪͳΞϯνϚφʔ
ςετ࣌ؒΛ͘͢Δ ·ͱΊʙ͜ͷ͚̎ͭͩकΕ͖ͬͱʙ
͡Ίʹ ʮςετॻ͍ͨ͜ͱͳ͍ʂʯ ʮςετௐ͚ͨͲɺͬͨ͜ͱͳ͍ʂʯ ʮςετॻ͍ͯΈ͚ͨͲͬ͘͠Γ͖ͯͳ͍ʂʯ Λ͛ͨͷͰɺίʔυΑΓ͕ଟΊͰ͢ɻ
ࣗݾհ ໊લɿന๎ ձࣾɿגࣜձࣾϕʔγοΫʢ৽ଔ̏ʣ ͞ΘͬͯΔ͜ͱɿ3BJMT "84 RJJUBͱ͔UXJUUFSͱ͔ͷ*%ɿOBNJUPQ झຯɿϑΥʔτφΠτ
ࣗݾհ ࣗͷࣝͷཧͱ 34QFDʹ͍ͭͯΒͳ͍ൃݟ͕͋Εͱࢥ͍ ࠓճͷษڧձͷ༰ʹ͠·ͨ͠ɻ
͜Ε͔Βઆ໌͢Δ͜ͱɺ ͜Μͳײ͡ͷڥͷਓ͕͖ͬͯͨ3TQFDͳͷͰ ͔ͨ͠͠Βઌೖ؍͕͋Δ͔͠Εͳ͍ͷͰɺ ͲΜͳαʔϏεʹؔΘ͖͔ͬͯͨͷઆ໌
ձࣾͰ͖ͬͯͨ͜ͱ &$αΠτͷཧαΠτʢ෦ʣ࡞Γม͑ ϝσΟΞαΠτอकӡ༻ ࢿྉٻαΠτ৽ن ӳձڭࣨݕࡧαΠτ৽ن ࢿྉٻαΠτอकӡ༻
ձࣾͰ͖ͬͯͨ͜ͱ ͲΕ
ձࣾͰ͖ͬͯͨ͜ͱ ̍ඵͰམͪͨΒαʔϏε͕Γཱͨͳ͍ɾɾɾ
ձࣾͰ͖ͬͯͨ͜ͱ ͱ͔Ͱͳ͍ɻ
ձࣾͰ͖ͬͯͨ͜ͱ ͲΜͲΜػೳͷՃɾमਖ਼ͱ͔͍͢͠ڥ
ձࣾͰ͖ͬͯͨ͜ͱ ͦΜͳڥͰςετίʔυΛॻ͍͖ͯ·ͨ͠
ҙ ԿΛςετ͢Ε͍͍ͷ͔ ͲΕ͘Β͍ςετ͢Ε͍͍ͷ͔ͱ͔ʹ ʮઈର͜ΕʯΈ͍ͨͳͷ͕ͳ͍
ҙ 34QFDͷϧʔϧʹ͍ͭͯߟ͑ͨ͜ͱΛ આ໌͍͖ͯ͠·͕͢ Ұ൪ྑ͍ϧʔϧ نͱ͔αʔϏεՔಇͱ͔Λ౿·͑ͯ νʔϜϝϯόʔͱ૬ஊܾͯ͠ΊΔͷ͕ϕετ
34QFD֓ཁ " lςετzͷछྨ # ̎େςετϑϨʔϜϫʔΫ
"lςετzͷछྨ 2"ςετ σΟϨΫλʔςετ ։ൃςετ
ͦΕͧΕׂ͕ҧ͏
ʮͲΕ͙Β͍ςετ͢Ε͍͍ͷʁʯ
͜ΕΛߟ͑ΔͨΊʹ͓͓͑ͯ͘͞
2"ςετ 2VBMJUZ"TTVSBODFʢ࣭อূʣ αʔϏε࣭Λอূʢόάɺૢ࡞ײʣ ˎ࡞ۀޮԽͷͨΊɺ͜͜Ͱ34QFDͬͯΔձࣾ ͋ΔΒ͍͠
σΟϨΫλʔςετ JTTVF௨Γʹ࣮͞Ε͍ͯΔ͔νΣοΫ ˎόάΛཏతʹνΣοΫ͢ΔΑ͏ͳׂͰͳ͍
։ൃςετ ։ൃऀ͕։ൃ͍ͨ͢͠Ίʹߦ͏ςετ ˎࣗ͜ͷύʔτͰΑ͘34QFD͖ͬͯ·ͨ͠
̏ͭͷςετ ͜ΕΒ̏ͭͷςετͷॅΈ͚͕େࣄ ԿΛ34QFDͰ୲อ͢Δͷ͔
։ൃςετʹ͓͚Δ34QFD ୲อ͢Δͷ શϖʔδɺਖ਼ৗʹΞΫηεͰ͖Δ͔ શϝιουɺશΞΫγϣϯʹςετΛߦ͏ ى͜Γ͑ͳ͍ೖྗΛ༧ͯ͠ςετ
։ൃςετʹ͓͚Δ34QFD ୲อ͢Δͷ શϖʔδɺਖ਼ৗʹΞΫηεͰ͖Δ͔ શϝιουɺશΞΫγϣϯʹςετΛߦ͏ ى͜Γ͑ͳ͍ೖྗΛ༧ͯ͠ςετ ͠·ͤΜ
։ൃςετʹ͓͚Δ34QFD ओʹҎԼೋͭΛ୲อ͢Δ ϛε͕ى͜Γ͕ͪͳϩδοΫ ϏδωεతʹಛʹॏཁͳϩδοΫ
։ൃςετʹ͓͚Δ34QFD ϛε͕ى͜Γ͕ͪͳϩδοΫ ෳࡶͳϩδοΫ αʔϏεͷ͍ൣғͰΘΕ͍ͯΔϩδοΫ
։ൃςετʹ͓͚Δ34QFD ϏδωεతʹಛʹॏཁͳϩδοΫ ٻؔ $7ϑϩʔ
։ൃςετʹ͓͚Δ34QFD 5*14୲อ͢ΔͷΛߜΔ
#̎େςετϑϨʔϜϫʔΫ NJOJUFTU 34QFD
γϯϓϧ ϐϡΞ3VCZ ଟػೳ υΩϡϝϯτ෩ NJOJUFTU 3TQFD
NJOJUFTU 3TQFD
NJOJUFTUͱ34QFD NJOJUFTUγϯϓϧ͕͞ਓؾ 34QFDߴػೳͳͷͰਓؾ ϑϨʔϜϫʔΫʹΑΔͷҧ͍ߟ͑ͳ͍͍ͯ͘ 3TQFDͷ΄͏͕ຊޠͷهࣄ͕ଟ͍ͷͰ͓͢͢Ί
جຊػೳ ̏ͭͷTQFDͷׂʢNPEFM DPOUSPMMFS SFRVFTUʣ JUͱFYQFDU EFTDSJCFͱDPOUFYU GBDUPSZ USBJU TUVC
ͪͳΈʹ υΩϡϝϯτ͜͜ IUUQSTQFDJOGPEPDVNFOUBUJPOSTQFDSBJMT
"̏ͭͷTQFDͷׂ NPEFMTQFD Ϟσϧͷϝιου୯ҐͰͷςετ ϞσϧͷόϦσʔγϣϯςετ DPOUSPMMFSTQFD ඇਪ BDUJPOͷΠϯελϯεมͷΛςετ ࢦఆͷVSMɺҙਤ͢ΔSFTQPOTFʹͳ͍ͬͯΔ͔ςετ SFRVFTUTQFD
ࢦఆͷVSMɺҙਤ͢ΔSFTQPOTFʹͳ͍ͬͯΔ͔ςετ
DPOUSPMMFSTQFDඇਪ IUUQSTQFDJOGPCMPHSTQFDIBTCFFOSFMFBTFE SBJMTTVQQPSUGPSSBJMT SFRVFTUTQFDͰɺίϯτϩʔϥͷͭͷΞΫγϣϯʹूதͰ͖· ͕͢ɺίϯτϩʔϥςετͱҟͳΓɺϧʔλɺϛυϧΣΞελο ΫɺϥοΫͷϦΫΤετͱϨεϙϯεͷ྆ํ͕ඞཁͰ͢ɻ͜Εɺ ͋ͳ͕ͨॻ͍͍ͯΔςετʹݱ࣮ײΛ༩͑ɺDPOUSPMMFSTQFDʹڞ ௨͢Δଟ͘ͷΛճආ͢Δͷʹཱͪ·͢ɻ ެࣜ༁
NPEFMTQFDͱSFRVFTUTQFD ͍͚ NPEFMTQFDσʔλΛςετ͢Δ SFRVFTUTQFDݟͨΛςετ͢Δ
FYZBNBEBͰදࣔͯ͠Δ͔ςετ
NPEFMTQFDσʔλΛ ਖ਼͍͠ͰΦϒδΣΫτੜͰ͖Δ͔ IFMMPϝιου͕ػೳ͍ͯ͠Δ͔ʁ ͳͲ
SFRVFTUTQFDݟͨΛ ZBNBEBʹΞΫηεͰ͖Δ͔ ϖʔδཁૉʹzZBNBEBͰ͢ɻzͱ͍͏ ςΩετ͕ଘࡏ͢Δ͔ ͳͲ
TQFDΛॻ͘લͷԼ४උ ςετ͍͢͠.7$ʹ͢Δ ϝιουͷҾฦΓͷܕΛἧ͑Δ WJFXͰมͷఆٛͨ͠Γ࠶ೖͨ͠Γ͠ͳ͍ ΊͬͪΌWJFXʹذ͕ॻ͍ͯ͋ΔͷΛΊΔ
"̏ͭͷTQFDͷׂ 5*14DPOUSPMMFSTQFDΘͳ͍ 5*14NPEFMTQFDͰσʔλͷऔಘɾܗΛςετ 5*14SFRVFTUTQFDͰσʔλͷදࣔΛςετ
#JUͱFYQFDU
None
None
None
None
$DPOUFYUͱEFTDSJCF
None
None
None
None
EFTDSJCF DPOUFYU JU EFTDSJCFɿϝιου୯ҐͳͲͷ·ͱ·ΓͰғΉ DPOUFYUɿ߹͚ͰғΉ JUɿ࠷খ୯ҐͰғΉ
EFTDSJCF DPOUFYU JU 5*14 EFTDSJCF DPOUFYU JUΛͬͯυΩϡϝϯτ෩ʹॻ͘
ͪͳΈʹ
ͲͬͪͰPL ˎ͜ͷ߹DPOUFYUͷ΄͏͕͍͍͚ͲΤϥʔͱ͔ʹͳΒͳ͍
ߦࢦఆ࣮ͯ͠ߦ ASTQFDϑΝΠϧ໊ߦ൪߸AͰ࣮ߦ
%CFGPSFͱMFU
None
JUΛ؆ܿʹ͢ΔͨΊʹ
None
None
MFUͱMFU
MFUͱMFU w MFUԆධՁɻʢJUͰݺͳ͍ͱ࣮ߦ͞Εͳ͍ʣ w MFU֤JU͝ͱͷ࣮ߦલʹධՁɻCFGPSFͱҰॹ
None
None
MFUͱCFGPSFͷ͍͚ JUͰࢀর͢Δ͔Ͳ͏͔ MFUͷ߹ɺJUͰࢀর͢Δ CFGPSFͷ߹ɺJUͰࢀর͠ͳ͍
%CFGPSFͱMFU 5*14CFGPSF MFUͰJUΛγϯϓϧʹ 5*14CFGPSFͰࢀর͠ͳ͍Ϩίʔυͱ͔Λࣄલ४උ 5*14MFUͰJUͰࢀর͢ΔΛࣄલ४උ
%GBDUPSZ
%GBDUPSZ 6TFS OBNFඞਢ CJSUIQMBDFඞਢ CJSUIEBZඞਢ UFMඞਢ KPCඞਢ
None
σϑΥϧτͷΛ༻ҙ͢Δ
None
JUͰҙࣝ͢Δ͜ͱΛߜΕΔ 6TFSΦϒδΣΫτ࡞͢Δ 6TFSIFMMP͕ਖ਼͘͠ಈ࡞͍ͯ͠Δ͔
%GBDUPSZ 5*14ΦϒδΣΫτΛ࡞ΔͨΊͷهड़ΛݮΒ͢
%TUVC ϞσϧͷϝιουΛ্ॻ͖͠ɺฦΓΛݻఆͰ͖Δ
%TUVC
ྫ Ϋϥεɿ1SFG ϝιουɿEJTUBODF QSFG QSFG "1*ɿ(PPHMF.BQ"1*
None
͜ͷςετͷԿ͕ʁ
̎ͭͷϝιουΛςετͯ͠Δ ͜ͷςετͰ ʮݝͷڑΛࢉग़͢Δʯ ʮ(PPHMF.BQ"1*͕ݝͷҐஔใΛࢉग़͢Δʯ
ͭ·Γɾɾɾ ʮ(PPHMF.BQ"1*ʯ͕͚͜Δͱ 1SFGEJTUBODFͷܭࢉ͕ਖ਼͚ͯ͘͜͠Δ
ςετରͷϝιου͚ͩͰ ⭕ʮݝͷڑΛࢉग़͢Δʯ ❌ʮ(PPHMF.BQ"1*͕ݝͷҐஔใΛࢉग़͢Δʯ
͜͏ͩͱ͢Δͱɾɾɾ (PPHMF.BQ"1*TFBSDI ҾͷݝͷҐஔใΛऔಘ͢Δ
BMMPX PCK UPSFDFJWF NFUIPE XJUI BSH BOE@SFUVSO WBMVF BMMPX
PCK UPSFDFJWF NFUIPE BOE@SFUVSO WBMVF
ରͷΈͷςετʹͳΔ 1SFGEJTUBODFͷΈͷςετ ͠(PPHMF.BQ"1*ଆͰ͚ͯͯ͜ςετ͕௨Δ ͳ͚͔ͥͨ͜ͷௐࠪͷ͕࣌ؒল͚Δ
%TUVC 5*14ςετରʹͳΔϝιουΛߜΔ
TUVCͱNPDL εΩοϓ ࢀߟɿ IUUQKBOHBKBODPNCMPHFYQFDU BOEBMMPXJOSTQFD
ΞϯνϚφʔ " EFTDSJCFɺDPOUFYUɺJUͷ͍ํ # MFU CFGPSFͷҐஔʢEFTDSJCFͷ֎ʹग़͞ͳ͍ʣ $ ్தͰVQEBUF % ฒͼॱܥϝιουͰΓ͕ͪͳςετ
"EFTDSJCFɾDPOUFYUɾJU Ͳ͏͍͏෩ʹͰॻ͚Δ
None
͜ΕͰΤϥʔ͕ى͖Δͱ AFYQFDU UPFRAʹͯ͠ΈΔ
None
w AAҎ͕߱FYQFDUͰ͖͍ͯͳ͍
"EFTDSJCFɾDPOUFYUɾJU JUͰԿݸFYQFDU͠ͳ͍ ్தͰ͚͜Δͱςετ͕தஅͯ͠͠·͏ FYQFDU͕ଟ͍ͱԿ͕ਖ਼ৗ͔͔ΓͮΒ͍
࠷খ୯ҐΛJUͰғΉ
None
ͬͱ͔Γ͘͢
l·ͱ·ΓzΛEFTDSJCFͰ l߹͚zΛDPOUFYUͰ
None
Կ͕͍͍ͷʁ Τϥʔى͖ͨ࣌ͷείʔϓΛখ͘͞Ͱ͖Δ ྫ͑ɺAAʹͳΓ͚ͨ͜ͱ͖ ෦తʹࣺ͍ͯ͢ ྫ͑ɺՃ๏ϝιουΛશআͨ͠ͱ͖
"EFTDSJCFɾDPOUFYUɾJU 5*14EFTDSJCFͰz·ͱ·ΓzΛғΉ 5*14DPOUFYUͰz߹͚zΛғΉ 5*14JUͰz࠷খ୯ҐzΛғΉ
#MFU CFGPSFͷҐஔ
None
l࢛ଇԋࢉzԼʹMFU ՃݮআͦΕͧΕͷςετ͕େ͖͘ͳΔͱ
None
ͭΒ͍
EFTDSJCFͷ֎ʹMFUΛग़͢ͱ ୯७ʹίʔυ͕ಡΈͮΒ͍ είʔϓ͕͕ͬͯ͠·͏ ͪͳΈʹɺաͳڞ௨ԽΛͨ࣌͠ʹى͖͍͢ɻ
#MFU CFGPSFͷҐஔ 5*14EFTDSJCFͷ֎ʹMFUΛग़͞ͳ͍
$్தͰVQEBUF
None
ྫ͑ɺԿΒ͔ͷมߋ͕͋Γ MFU OVNCFS \^ʹ͢Δ͜ͱʹͳΓ·ͨ͠
None
lQPJOUz͚͚ͩͯ͘͜Εͳ͍ ଞͱҰ༷ʹมߋ͞Εͳ͍ͷͰݟམͱͯ͠͠·͏
$్தͰVQEBUF 5*14JUͱ͔ͰVQEBUF͠ͳ͍
%ฒͼॱܥϝιουͷςετ ͜Εʹ͍ͭͯRJJUB IUUQTRJJUBDPNOBNJUPQJUFNT CGG⒎FEG
ςετ࣌ؒΛ͘ " ςετͷΛݮΒ͢ # ແବͳϨίʔυΛ࡞Βͳ͍ $ DSFBUFΑΓCVJME % UFTURVFVFΛ͏
"ςετͷΛݮΒ͢ ΧόϨοδΛ͏ඞཁ͕͋Δ͔ʁ SFRVFTUTQFDΛNPEFMTQFDʹஔ͖͑Εͳ͍ ͔
#ແବͳΠϯελϯε MFUɺCFGPSFͳͲͰ࡞͍ͬͯͳ͍͔ GBDUPSZͰඥ͚͕ଟ͘ͳͬͯͳ͍͔
$DSFBUFΑΓCVJME DSFBUFϞσϧΦϒδΣΫτ͕ੜͯ͠อଘ͢Δ CVJMEϞσϧΦϒδΣΫτΛੜ͢Δ
% UFTURVFVF HFNIUUQTHJUIVCDPNUNNUFTURVFVF ςετΛฒྻ࣮ߦͰ͖Δ σϑΥϧτͷಉ࣮࣌ߦ$16ͷίΞ
·ͱΊ
34QFDશવΒͳͯ͘
αʔϏε͝ͱʹ34QFDͷϧʔϧ͕ಛʹͳͯ͘
؆୯ʹ࣮ݱՄೳͳ ࠷ݶͷ
ϝϯςφϯε͍͢͠ ςετίʔυʹ͢ΔͨΊͷ৺͕͚
ͨͬͨ̎ͭ
EFTDSJCF DPOUFYU JUΛਖ਼͘͠͏ EFTDSJCFͷ֎ʹMFUΛग़͞ͳ͍
͜ͷೋ͕ͭ࠷༏ઌ
͜ΕΛϕʔεʹ
։ൃςετͱͯ͠Ͳ͜·Ͱςετ͢Δ͔ NPEFMTQFDͱSFRVFTUTQFDͷॅΈ͚ JUͰԿݸFYQFDU͠ͳ͍ ్தͰVQEBUF͠ͳ͍
جૅ͔Β34QFDΛΓ͍ͨ 3TQFDʹΑΔ3BJMTςετೖ ిࢠॻ੶ͷΈ ҏ౻३Ұ͞ΜͷRJJUB #FUUFS4QFDT ͜ΕಡΈͳ͕Β͕͍͍͔ʮαϤφϥ#FUUFS4QFDT ʯ ެࣜυΩϡϝϯτ
ͬͱϝϯςφϯε͘͢͠ Մಡੑͷߴ͍ςετίʔυΛॻͨ͘Ίͷ͓࡞๏ू IUUQTHJUIVCDPNXJMMOFUSTQFDTUZMFHVJEF