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
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
2k
rails g authenticationから学ぶRails8.0時代の認証
willnet
5
5.7k
What's a well-behaved Rails extension gem?
willnet
0
930
Sidekiq vs Solid Queue
willnet
15
15k
どうしてこうなった?から理解するActive Recordの関連の裏側
willnet
6
1.7k
Exceptional Rails
willnet
6
8.4k
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
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
1
350
エンタープライズInnerSourceと開発者ポータル
nogikazuma
1
110
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
240
omasushiというライブラリを作った
polidog
PRO
0
100
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
2
240
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
2
600
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
600
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
280
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
0
270
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
150
データエンジニアリングワークショップ:Auto LoaderとSparkで学ぶデータパイプライン構築
databricksjapan
PRO
0
210
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
The Invisible Side of Design
smashingmag
301
52k
How to build a perfect <img>
jonoalderson
1
6k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Code Reviewing Like a Champion
maltzj
528
40k
Building an army of robots
kneath
306
46k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Facilitating Awesome Meetings
lara
57
7.1k
Six Lessons from altMBA
skipperchong
29
4.5k
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