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
Clean Test Code Revised
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Shinichi Maeshima
March 23, 2019
Technology
19k
34
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Clean Test Code Revised
Rails Developer Meetup 2019での発表資料です!可読性の高いテストコードを書くためのコツについて話しました
Shinichi Maeshima
March 23, 2019
More Decks by Shinichi Maeshima
See All by Shinichi Maeshima
メタプログラミングRuby問題集の活用
willnet
2
1.9k
rails g authenticationから学ぶRails8.0時代の認証
willnet
5
5.4k
What's a well-behaved Rails extension gem?
willnet
0
900
Sidekiq vs Solid Queue
willnet
15
15k
どうしてこうなった?から理解するActive Recordの関連の裏側
willnet
6
1.7k
Exceptional Rails
willnet
6
8.3k
Breaking the Flaky Test Cycle
willnet
2
2.5k
mrskで広がるインフラの選択肢
willnet
1
1.2k
アプリケーションを長期にわたって無理なく運用するためのたったひとつの方法
willnet
2
2.3k
Other Decks in Technology
See All in Technology
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
270
DatabricksにおけるMCPソリューション
taka_aki
1
260
“それは自分の仕事じゃない"を越えて行け
yuukiyo
1
430
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
350
CIで使うClaude
iwatatomoya
0
280
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
290
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
200
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
4
3.9k
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.6k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
Claude Code公式skillで 自分の仕事を少しずつ手放そう!(Claude Code開発ノウハウ大公開スペシャル by クラスメソッド)
kaym
1
440
そのドキュメント、自動化しませんか?
yuksew
1
230
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
220
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
580
Automating Front-end Workflow
addyosmani
1370
210k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
WCS-LA-2024
lcolladotor
0
710
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
350
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
510
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Transcript
Clean Test Code Revised @willnet
Έͳ͞Μ ςετॻ͍ͯ·͔͢ʁ
͜͜Ͱશһख্͕͕ Δ༧ఆ✋
ςετॻ͘ͷָ͍͠ ਓʁ
͜͜Ͱશһ͕Λ෬ ͤΔ༧ఆ
Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁ w ͨ·ʹ$*͚ͩͰίέΔςετ w ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυͷղ ಡ w ςετͷఆٛΛҰͭมߋͨ͠Βେྔͷ
Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁ w ͨ·ʹ$*͚ͩͰίέΔςετ w ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυͷղ ಡ w ςετͷఆٛΛҰͭมߋͨ͠Βେྔͷ طଘͷςετίʔυ मਖ਼͕ͭΒ͍
Ͳ͏͍͏ͱ͖ʹͭΒ͍ʁ w ͨ·ʹ$*͚ͩͰίέΔςετ w ͳʹΛͲ͏ςετͯ͠Δͷ͔Θ͔Βͳ͍ςετίʔυ w ఆٛΛҰͭมߋͨ͠Βେྔͷ A ࠓ͢͜ͱ
Մಡੑͷߴ͍ίʔυΛ मਖ਼͢ΔͳΒਏ͘ͳ͍ͣʜ
8F`SFOPUIJSJOH ҎલɺՄಡੑͷߴ͍ ςετίʔυͷॻ͖ํ ʹ͍ͭͯ͠·ͨ͠ https://speakerdeck.com/willnet/clean-test-code
3BJMT%FWFMPQFST .FFUVQ ӫ͑͋ΔୈҰճʂ
ൃද͔Βܦͪ ಄͕ཧ͞Ε͖ͯͨͷͰͬ ͱ͍͍ײ͡ͷઆ໌͕Ͱ͖ͦ͏
͔͜͜Βຊ
ࠓ$MFBO5FTU $PEF Մಡੑͷߴ͍ς ετίʔυ ʹ͍ͭͯ ͠·͢
Ͳ͏͍͏ঢ়ଶͩͱ ʮՄಡੑͷߴ͍ςετ ίʔυʯͱݴ͑Δͷ͔
ཧͷ͕࢟Θ͔Βͳ͍ ͱमਖ਼͠Α͏͕ͳ͍ʜ
ʹෛ୲Λ͔͚ͳ͍ ςετίʔυՄಡੑ ͕ߴ͍
ͨͪςετίʔυ ΛಡΉͱ͖ɺςετͷ ༰ΛϝϞϦʹల ։͍ͯ͠Δ
ϝϞϦʹల։͍ͯ͠Δ ཁૉ w ςετͷ֓ཁ w ςετͷࣄલ݅ w खଓ͖ w ظ͍ͯ͠Δ݁Ռ
αϯϓϧίʔυ
֓ཁ 6TFSGVMMOBNF͕ͱ໊Λ͋ΘͤͨͷΛ ฦ͢͜ͱΛςετ͍ͯ͠Δ
લఏ݅ pSTUOBNF͕`ਅҰ` MBTUOBNF͕`લౡ`ͷ 6TFSΦϒδΣΫτΛੜ͠ɺVTFSͰࢀরͰ͖ΔΑ͏ʹ͍ͯ͠Δ
खଓ͖ VTFSGVMMOBNFΛ࣮ߦ͢Δ
ظ͢Δ݁Ռ bલౡਅҰ`͕Γͱͯ͠ฦΔ
ςετίʔυ͔Β ͷϚοϐϯά
͜ΕΒΛ͢ΜͳΓల։͞ ͤͳ͍ཁૉ͕ଘࡏ͢Δ
ʹෛ୲Λ͔͚Δཁૉ Λഉআͨ͠ςετίʔ υՄಡੑ͕ߴ͍
ʹෛ୲Λ͔͚Δཁૉ ͱ
ʹෛ୲Λ͔͚Δཁૉ w આ໌ෆ w είʔϓʹϊΠζ͕͍ࠞͬͯ͟Δ w είʔϓͷඈͼ w ҉తͳґଘ͕͋Δ w
ఆٛΛ్தͰมߋ͢Δ
આ໌ෆ
આ໌ෆ w EFTDSJCF DPOUFYU JUͷઆ໌͕ࡶɺ͘͠આ໌͕ͳ͍ w ςετͷ֓ཁ͕͙͢ʹ͔ͭΊͣɺͷϦιʔεΛফඅ͢Δ
None
EFTDSJCFDPOUFYU͕୯ޠ͚ͩ JUͷઆ໌͕লུ ͳʹΛͲ͏ςετ͍ͯ͠Δͷ͔͙͢ʹΘ͔Βͳ͍
None
จষΛಡΉ͚ͩͰ ֓ཁ͕͙͢ʹΘ͔Δʂ
ཧEFTDSJCF DPOUFYU JUΛಡΊςε τͷྲྀΕΛཧղͰ͖Δ͜ͱ
ݱͷςετίʔυͰ JUͷઆ໌͕লུ͞Ε͕ͪ
ॻ͍ͨຊਓʹͱͬͯࣗ ໌͔͠Εͳ͍͚Ͳɺ ޙੈͷਓ͕ͭΒ͍ͷͰ ৄ͘͠ॻ͖·͠ΐ͏
JUͷઆ໌Λলུͯ͠Α͍ͷɺϫϯϥΠφʔܗ ࣜͰ͔ͭTVCKFDUͱϚονϟ͕୯७ͳͷ͚ͩ
·ͱΊ ςετઆ໌͗͢͠ ͘Β͍Ͱͪΐ͏ͲΑ͍
είʔϓʹϊΠζ͕ࠞ ͍ͬͯ͟Δ
͜͜Ͱ͍͏είʔϓͱ ֘͢Δςετʹؔ͢Δ ϒϩοΫͷ͜ͱͰ͢
ͷείʔϓ
ͷείʔϓ
ྫCͱDͰ͚ͩ͏ ఆ͕ٛ͋Δ
%3:ʹ͢ΔͨΊʹ Ұ্ͭʹҠಈ
%3:ʹ͢ΔͨΊʹ Ұ্ͭʹҠಈ (
%3:ʹ͢ΔͨΊʹ Ұ্ͭʹҠಈ ͜ͷఆٛࠓݟ͍ͯΔε ίʔϓͰΘΕ͍ͯΔͷ ͔ʁΘΕ͍ͯͳ͍ͷ ͔ʁͱ͍͏அ͕ඞཁʹ ͳΓͷϦιʔεΛফඅ ͢Δ
MFUΛMFUʹ͢ΔͱԆධՁͰ`B`ͷίϯς ΩετͰ࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰʁ
MFUΛMFUʹ͢ΔͱԆධՁͰ`B`ͷίϯς ΩετͰ࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰʁ (
MFUΛMFUʹ͢ΔͱԆධՁͰ`B`ͷίϯς ΩετͰ࣮ߦ͞Εͳ͍͔ΒΑ͍ͷͰʁ MFUͷԆ࣮ߦʹΑͬͯϚ γϯ্Ͱ࣮ߦ͞Εͳͯ͘ ͷϝϞϦফඅ͞Ε Δ
MFUͱMFUͲͪΒͰ ྑ͍߹MFU
·ͱΊ είʔϓʹ͏ͷ ͚ͩΛఆٛ͢Δ
είʔϓͷඈͼ
None
ΤσΟλΛεΫϩʔϧ ͍ͯ͠ΔؒʹϝϞ Ϧ͕شൃ͕ͪ͠
͜ͷྫ͏·͍ ղܾࡦ͕ͳ͍ʼʻ ͋Μ·ΓͭΒ͍Α͏ͳΒ ωετΛΊΔͷ͕Αͦ͞͏
None
ผϑΝΠϧͷఆٛΛߦͬͨΓ དྷͨΓ͍ͯ͠ΔؒʹϝϞ Ϧ͕شൃ͕ͪ͠
ϑΝΠϧதͰ͔͍ͬͯ͠ͳ͍ ϔϧύϝιουͳΒ͜͏͍ͨ͠
·ͱΊ είʔϓͷඈͼΛͰ͖Δݶ ΓݮΒ͢ɻΉΛಘͳ͍ͱ͖ ͳΔۙ͘͘ʹஔ͢Δ
҉తͳґଘ
TUBUVTSFBEZEPJOHEPOFͷҰํ͔͠ભҠͰ͖ͳ͍ ͦΕҎ֎ͷભҠΛ͠Α͏ͱͨ͠ΒΤϥʔͱ͍͏༷
None
TUBUVTͷσϑΥϧτ͕SFBEZͰ͋Δ͜ͱʹґଘ͍ͯ͠Δ͕ɺ ςετίʔυ୯ମΛΈ͚ͨͩͰؾ͚ͮͳ͍
TUBUVTͷσϑΥϧτ͕SFBEZͰ͋Δ͜ͱʹґଘ͍ͯ͠Δ͕ɺ ςετίʔυ୯ମΛΈ͚ͨͩͰؾ͚ͮͳ͍ ͪΖΜςετέʔε͕Γͳ͍ ͱ͍͏ͷ͋Δ͚ͲͦΕஔ͍͓͍͍ͯͯͩ͘͞
ςετίʔυதʹॻ͔Ε ͍ͯͳ͍҉తͳ݅ FYGBDUPSZ@CPUͷσ ϑΥϧτ ʹґଘͨ͠ ίʔυΛॻ͘ͱɺࣄલ ݅ͷѲ͕͘͠ͳΔ
ࣄલ݅Λਖ਼͘͠ѲͰ͖ ͳ͍ঢ়ଶͰςετίʔυΛ ॻ͘ͱɺಡΈͮΒ͍ෆ҆ఆ ͳςετίʔυʹͳΔ
ͪΖΜσϑΥϧτΛ มߋͨ͠Βͱ͍͏ͷ͋Δ
ඞཁͷͳ͍ϊΠζ
͋Δ͖࢟
͖ͬ͞ݴ͚ͬͨͲ େࣄͳ͜ͱͳͷͰ ͏Ұ
ςετʹ͍ؔͯ͠Δ Λɺςετίʔυ֎ ʹॻ͘ͱͭΒ͍
ͭΒ͍
ςετʹ͍ؔͯ͠Δ Λɺςετίʔυ্ Ͱաෆͳ͘໌ࣔతʹ ࢦఆ͢ΔͱಡΈ͍͢
͜ͷதʹͯ͢Λॻ͍͍ͯͩ͘͞ʂ
ͱ͍͑ɺ 'BDUPSZ#PUͷσϑΥ ϧτʹґଘͨ͠ίʔ υॻ͍ͯ͠·͍͕ͪ
ਪϓϥΫςΟε ʮσϑΥϧτΛϥϯ μϜʹ͢Δʯ
ඞཁͳͷઃఆʹෆ͕͋Δͱ ͱ͖Ͳ͖ςετ͕ίέΔΑ͏ʹͳΔ
2ϥϯμϜʹ͢Δͱ ςετ͕ίέͨͱ͖ʹ ࠶ݱͰ͖ͳ͘ͳ͍ʁ
"ςετ͕ίέͨͱ͖ ASTQFDTFFE AͷΑ͏ʹTFFE Λࢦఆ͢Δͱ࠶ݱͰ ͖Δ
·ͱΊ ςετʹؔ࿈͍ͯ͠Δ ΛͳΔ͘ςετίʔυ ʹدͤͯදݱ͢Δɻա ෆ͕ͳ͍Α͏ʹ͢Δ
ఆٛΛ్தͰมߋ͢Δ
None
҉ͷґଘ
͜Εʹґଘͨ͠ςετίʔυ͕͢Ͱʹଘࡏ͢Δͱ ͜ͷఆٛΛมߋ͠ʹ͘͘ͳΔ
ґଘΛͦͷ··ͬͯ ແཧΓςετΛॻ͍ͨྫ
σϑΥϧτ͕໌ࣔతͰͳ͍ ͷͰɺGBDUPSZͷϑΝΠϧͱ ςετͷϑΝΠϧΛߦͬͨΓདྷͨΓ ͢Δඞཁ͕͋Δ
ಈతʹσϑΥϧτΛ ม͑Δͱ࠷ऴతͳ͕ ͔ΓͮΒ͘ͳΔ
USBJUΛ͍ɺσϑΥϧτͰ QPTU͕࡞ΒΕͳ͍Α͏ʹมߋ
ґଘ͍ͯ͠ΔͷΛ໌ࣔతʹͯ͠ ςετίʔυຊମʹॻ͘͜ͱ͕Ͱ͖ͨ
ྫΛ͏গ͠
None
֎ଆͷείʔϓͰఆٛͨ͠QPTUΛVQEBUF͍ͯ͠ΔͷͰɺ NFSHF͕ඞཁ
ͦΕͧΕͷείʔϓͰ໌ࣔతʹQPTUΛఆٛͨ͠΄͏͕ Θ͔Γ͍͢
None
֎ଆͷMFUͰఆٛͨ͠QVCMJTI@BUΛ্ॻ͖ͨ͠Γ ͍ͯ͠ͳ͔ͬͨΓ͢ΔͷͰɺϑΟϧλϦϯά͕ඞཁ
σϑΥϧτͷMFUΛΊͯ ͦΕͧΕͷDPOUFYUͰ໌ࣔతʹఆٛ͢Δͱ ϑΟϧλϦϯά͕ෆཁʹͳΔ
֎ଆͷείʔϓͰఆٛ ͨ͠ͷΛଆͷε ίʔϓͰߋ৽͢Δͱ ʹෛ୲͕͔͔Δ
·ͱΊ ςετͷલఏ݅Λ্ ॻ͖ͨ͠Γमਖ਼ͨ͠Γ ͠ͳ͍
ʹෛ୲Λ͔͚Δཁૉ ʹ͍ͭͯҰ௨Γͨ͠
ʹෛ୲Λ͔͚Δཁૉ ࠶ܝ w આ໌ෆ w είʔϓʹϊΠζ͕͍ࠞͬͯ͟Δ w είʔϓͷඈͼ w ҉తͳґଘ͕͋Δ
w ఆٛΛ్தͰมߋ͢Δ
ʹෛ୲Λ͔͚Δཁૉ ΛෳؚΈ͕ͪͳͷ ͕͋Δ
ͦΕʜ
TIBSFE@DPOUFYU TIBSFE@FYBNQMFT
͜ΕͰۤ͠ΜͩPS ۤ͠ΜͰ͍Δਓ✋
%3:ʹ͍ͨ͠ཉٻ͕ TIBSFEΛঌש͢Δ
TIBSFEΛ͏ͳ Βɺ͜Ε·Ͱͨ͠ϓ ϥΫςΟεΛͰ͖Δ͔ ͗ΓΓࠐΈ·͠ΐ͏
None
આ໌͕Γͳ͍
Ṗͷґଘؔ
TIBSFE@FYBNQMFTͷఆٛͱ ςετίʔυΛߦͬͨΓདྷͨ Γͯ͠ɺͰ ʮTIBSFE@FYBNQMFTΛΘ ͳ͔ͬͨͱ͖ͷίʔυʯʹม ͠ͳ͍ͱͳʹΘ͔Βͳ͍
मਖ਼Ҋ
આ໌Λৄͯ͘͠͠ ςετίʔυ͚ͩͰ֓ཁΛ͔ͭΊΔΑ͏ʹͨ͠
͔͠͠Ҿʹظ͢Δ݁ՌΛͯ͠ಈతʹJUͷ༰Λมߋ͢Δ ͱ͍͏͜ͱࣗମ͕ՄಡੑΛଛͶ͍ͯΔ ݁ہఆٛΛಡΜͰϚʔδͷඞཁ͕͋Δ
ͨॻ͖ʹͯ͠Έͨ
ݟ͘͢ͳ͕ͬͨ ιʔείʔυߦ૿͑ͨ
όϥϯεΛ ߟ͑·͠ΐ͏
Լखʹ͚Δ͘Β͍ͳ ΒίϐϖͰͨॻ͖ͷ ΄͏͕ίετ͍Ͱ͢
શମͷ·ͱΊ w Մಡੑͷߴ͍ςετͷॻ͖ํʹ͍ͭͯઆ໌͠·ͨ͠ w ςετίʔυΞϓϦέʔγϣϯίʔυͱͪΐͬͱ͚͓ͩ ࡞๏͕ҧ͏ w ΞϓϦέʔγϣϯίʔυ΄ͲՄಡੑ͕ߟྀ͞Ε͍ͯͳ͍ง ғؾ w
ςετίʔυΞϓϦέʔγϣϯΛߏ͢ΔίʔυͷҰ෦ ͳͷͰɺಡΈ͍͢ίʔυʹ͍͖ͯ͠·͠ΐ͏Ͷ
͕࣌ؒ༨ͬͨΒ ࣗݾհ
Shinichi Maeshima ! " # @netwillnet @willnet http://blog.willnet.in Willnet Inc.
3BJMT%. ͨ͘͞Μొஃ͍ͯ͠·͢ • Rails Developers Meetup #1 • Rails Developers
Meetup 2017 • Rails Developers Meetup 2018 Day2 • Rails Developers Meetup 2018 Day3 Extreme • Rails Developers Meetup 2019 ← New!
ٕज़ސۀΛ͍ͯ͠·͢
͓ࣄ4/4తͳͷΛ։ൃ ͍ͯ͠·͢
8F`SFOPUIJSJOH
ސઌ ืू͍ͯ͠·ͤΜ
ͰԥΔ༻ҙͷ͋Δ ձࣾ͞Μྫ֎ͳͷͰ ͓͕͚͍ͩ͘͞
)BQQZ5FTUJOH