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
810
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RSpec概論
RSpecを触る前に僕が知っておきたかったこと
shiraki hirotomo
September 14, 2018
Other Decks in Programming
See All in Programming
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.4k
継続モナドとリアクティブプログラミング
yukikurage
3
670
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
200
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
210
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
420
その節約、円になってますか?
isamumumu
1
640
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
360
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
130
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
1
260
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
370
React本体のコードリーディング
high_g_engineer
1
120
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
800
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
500
Paper Plane
katiecoart
PRO
2
52k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
119
120k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
340
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
450
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
430
Test your architecture with Archunit
thirion
1
2.3k
How GitHub (no longer) Works
holman
316
150k
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