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
18k
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
Sidekiq vs Solid Queue
willnet
13
8.8k
どうしてこうなった?から理解するActive Recordの関連の裏側
willnet
5
930
Exceptional Rails
willnet
6
6.8k
Breaking the Flaky Test Cycle
willnet
2
2k
mrskで広がるインフラの選択肢
willnet
1
980
アプリケーションを長期にわたって無理なく運用するためのたったひとつの方法
willnet
2
2.1k
HotwireからDHHが考えるこれからのRailsとJSの付き合い方を知る
willnet
14
13k
Rails6.1で新しく入る機能について
willnet
12
15k
Concerns about Concerns
willnet
11
34k
Other Decks in Technology
See All in Technology
マルチモーダル / AI Agent / LLMOps 3つの技術トレンドで理解するLLMの今後の展望
hirosatogamo
37
12k
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
Platform Engineering for Software Developers and Architects
syntasso
1
510
Lexical Analysis
shigashiyama
1
150
Terraform Stacks入門 #HashiTalks
msato
0
350
New Relicを活用したSREの最初のステップ / NRUG OKINAWA VOL.3
isaoshimizu
2
580
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
社内で最大の技術的負債のリファクタリングに取り組んだお話し
kidooonn
1
550
Amazon CloudWatch Network Monitor のススメ
yuki_ink
1
200
第1回 国土交通省 データコンペ参加者向け勉強会③- Snowflake x estie編 -
estie
0
120
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
スクラム成熟度セルフチェックツールを作って得た学びとその活用法
coincheck_recruit
1
140
Featured
See All Featured
Unsuck your backbone
ammeep
668
57k
The Pragmatic Product Professional
lauravandoore
31
6.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
4 Signs Your Business is Dying
shpigford
180
21k
Embracing the Ebb and Flow
colly
84
4.5k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Music & Morning Musume
bryan
46
6.2k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Become a Pro
speakerdeck
PRO
25
5k
KATA
mclloyd
29
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
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