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
Shinichi Maeshima
March 23, 2019
Technology
34
19k
Clean Test Code Revised
Rails Developer Meetup 2019での発表資料です!可読性の高いテストコードを書くためのコツについて話しました
Shinichi Maeshima
March 23, 2019
Tweet
Share
More Decks by Shinichi Maeshima
See All by Shinichi Maeshima
メタプログラミングRuby問題集の活用
willnet
2
1.4k
rails g authenticationから学ぶRails8.0時代の認証
willnet
5
4.3k
What's a well-behaved Rails extension gem?
willnet
0
730
Sidekiq vs Solid Queue
willnet
14
13k
どうしてこうなった?から理解するActive Recordの関連の裏側
willnet
6
1.6k
Exceptional Rails
willnet
6
8k
Breaking the Flaky Test Cycle
willnet
2
2.3k
mrskで広がるインフラの選択肢
willnet
1
1.1k
アプリケーションを長期にわたって無理なく運用するためのたったひとつの方法
willnet
2
2.3k
Other Decks in Technology
See All in Technology
「違う現場で格闘する二人」——社内コミュニティがつないだトヨタ流アジャイルの実践とその先
shinichitakeuchi
0
320
チームで安全にClaude Codeを利用するためのプラクティス / team-claude-code-practices
tomoki10
7
3.2k
AI に「学ばせ、調べさせ、作らせる」。Auth0 開発を加速させる7つの実践的アプローチ
scova0731
0
230
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
150
旬のブリと旬の技術で楽しむ AI エージェント設計開発レシピ
chack411
1
230
困ったCSVファイルの話
mottyzzz
0
190
Models vs Bounded Contexts for Domain Modularizati...
ewolff
0
140
迷わない!AI×MCP連携のリファレンスアーキテクチャ完全ガイド
cdataj
0
460
I tried making a solo advent calendar!
zzzzico
0
150
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
17k
[PR] はじめてのデジタルアイデンティティという本を書きました
ritou
1
800
Featured
See All Featured
A Soul's Torment
seathinner
4
2.1k
Designing for Timeless Needs
cassininazir
0
110
ラッコキーワード サービス紹介資料
rakko
0
2M
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
0
3.4k
The Spectacular Lies of Maps
axbom
PRO
1
430
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
230
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
Skip the Path - Find Your Career Trail
mkilby
0
42
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
120
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
270
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