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
テストファーストな設計を求めて
Search
ippachi
October 11, 2019
Programming
1
56
テストファーストな設計を求めて
ippachi
October 11, 2019
Tweet
Share
More Decks by ippachi
See All by ippachi
4つの観点から比較するRubyの型システム
ippachi
0
500
お花見しようの話.pdf
ippachi
0
120
Other Decks in Programming
See All in Programming
What We Can Learn From OSS
inouehi
0
420
Goのエラースタックトレースの歴史と今後
sonatard
7
1.2k
Changed Rules: Architectures with Lightweight Stores
manfredsteyer
PRO
0
240
Netty Chicago Java User Group 2024-04-17
sullis
0
170
使ってみよう Azure AI Document Intelligence
kosmosebi
2
300
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
270
大規模UIKitベースアプリへのTCAの段階的導入/gradual-adoption-of-tca-in-a-large-scale-uikit-based-app
takehilo
1
100
コーンフレークから始める モデリング会話入門
ogurotakayuki
0
360
Java 22 Overview
kishida
1
180
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
5
900
Apache Hive 4 on Treasure Data
ryukobayashi
0
120
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
360
Featured
See All Featured
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
19
1.7k
No one is an island. Learnings from fostering a developers community.
thoeni
16
2.1k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
20
1.9k
GraphQLの誤解/rethinking-graphql
sonatard
50
9.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
Facilitating Awesome Meetings
lara
42
5.6k
Art, The Web, and Tiny UX
lynnandtonic
289
19k
GitHub's CSS Performance
jonrohan
1025
450k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
244
20k
StorybookのUI Testing Handbookを読んだ
zakiyama
13
4.6k
The World Runs on Bad Software
bkeepers
PRO
61
6.7k
Transcript
ςετϑΝʔετͳ ઃܭΛٻΊͯ @ippachi1218
ࣗݾհ • Rubyist • Web programmer • ৽ଔ̍ • Mockist
TDD • @ippachi1218
ςετͷ ʢςετΤϯδχΞͷਓͷςετʣ ͱ͔Ͱ͖ͳ͍Α…
–connpassΠϕϯτ֓ཁ “ ࠓճςετͱ͍ͬͯɺಛʹ੍ݶͳ͠Ͱϊϯ δϟϯϧͰ͓Λ͓ئ͍͍ͯ͠·͢ɻ”
ςετ ʢϓϩάϥϚ͕։ൃʹ༻͍Δํͷςετʣ ͷΛ͠·͢ʂ
ϢχοτςετدΓ͔
ςετϑΝʔετ ͳઃܭΛٻΊͯ
ςετॻ͘ͷਏ͍…
ςετϑΝʔετͳͷͬͯʁ ґଘ͕͍ͷ
ґଘʁ
None
–σδλϧେࣙઘ “ ଞͷͷʹͨΑཱͬͯɾଘࡏ͢Δ͜ͱɻ”
None
ґଘ = ͍ͬͯΔ͜ͱ
None
ΫϥεɺϝιουΛ ࢀর͢Δ ͦͷΫϥεɺϝιουΛ ͍ͬͯΔ ||
ྫ
େࣄͳϩδοΫ̍ def daiji1 େࣄͳॲཧ… daiji_na_data = PgManager.where(‘status = 10’) .order_by(‘rank’)
.limit_by(1) େࣄͳॲཧ… end
daiji1͕͍ؔͬͯΔ͜ͱ
• PgManagerϞδϡʔϧ͕͋Δ͜ͱ • PgManagerϞδϡʔϧ͕whereϝιουΛ͍࣋ͬͯΔ͜ͱ • whereϝιου͕order_byϝιουΛ࣋ͭΦϒδΣΫτΛฦ͢ ͜ͱ • order_byϝιου͕limit_byϝιουΛ࣋ͭΦϒδΣΫτΛฦ ͢͜ͱ
• ʢσʔλͷอଘઌ͕σʔλϕʔεͰ͋Δ͜ͱʣ • ʢσʔλϕʔε͕postgresqlͰ͋Δ͜ͱʣ
ґଘ = ͍ͬͯΔ͜ͱ
ͭ·Γ…
• PgManagerϞδϡʔϧ͕͋Δ͜ͱ • PgManagerϞδϡʔϧ͕whereϝιουΛ͍࣋ͬͯΔ͜ͱ • whereϝιου͕order_byϝιουΛ࣋ͭΦϒδΣΫτΛฦ͢ ͜ͱ • order_byϝιου͕limit_byϝιουΛ࣋ͭΦϒδΣΫτΛฦ ͢͜ͱ
• ʢσʔλͷอଘઌ͕σʔλϕʔεͰ͋Δ͜ͱʣ • ʢσʔλϕʔε͕postgresqlͰ͋Δ͜ͱʣ ͜Ε͚ͩͷͷʹґଘ͍ͯ͠Δ
͏Ұྫ Α͋͘Γͦ͏ͳ͜ͱ
େࣄͳϩδοΫ̎ def daiji2 େࣄͳॲཧ… daiji_na_data = Aws::S3.buckets[‘bucket’] .objects[‘key’] େࣄͳॲཧ… end
daiji2͕͍ؔͬͯΔ͜ͱ
• Aws::S3Ϟδϡʔϧ͕͋Δ͜ͱ • Aws::S3Ϟδϡʔϧ͕bucketsϝιουΛ͍࣋ͬͯΔ͜ͱ • bucketsϝιου͕objectsϝιουΛ࣋ͭΦϒδΣΫτΛฦ͢ ͜ͱ • ʢσʔλͷอଘઌ͕S3Ͱ͋Δ͜ͱʣ •
ʢΫϥυαʔϏε͕AwsͰ͋Δ͜ͱʣ
ґଘ = ͍ͬͯΔ͜ͱ
• Aws::S3Ϟδϡʔϧ͕͋Δ͜ͱ • Aws::S3Ϟδϡʔϧ͕bucketsϝιουΛ͍࣋ͬͯΔ͜ͱ • bucketsϝιου͕objectsϝιουΛ࣋ͭΦϒδΣΫτΛฦ͢ ͜ͱ • ʢσʔλͷอଘઌ͕S3Ͱ͋Δ͜ͱʣ •
ʢΫϥυαʔϏε͕AwsͰ͋Δ͜ͱʣ ͜Ε͚ͩͷͷʹґଘ͍ͯ͠Δ
େࣄͳͷͱ͖ʹ ଟ͘ͷ۩ʹґଘ͍ͯ͠Δ
ґଘ͢Δͱґଘઌͷ ӨڹΛड͚Δ͜ͱʹͳΔ
None
͜ΕͷϢχοτςετ Ͳ͏ͳΔ͔ʁ
Ϣχοτ = ଞͱͷґଘ͕ͳ͍
େࣄͳϩδοΫ̍ def daiji େࣄͳॲཧ… daiji_na_data = PgManager.where(‘status = 10’) .order_by(‘rank’)
.limit_by(1) େࣄͳॲཧ… end
• PgManagerσʔλϕʔεΞΫηε͔ͩΒελϒʹ ͠ͳ͖Ό… • ࿈తʹϝιουݺΜͰͯελϒʹ͢ΔͷΊΜͲ͘͞ ͦ͏ • ͦͦ͜͜Λελϒʹͨ͠Βσʔλऔಘͷਖ਼͠͞ ୭͕…
ͳΜͱ͔ Ϣχοτςετॻ͚ͨʂ
ߜΓࠐΈͷ݅Ճ
େࣄͳϩδοΫ̍ def daiji େࣄͳॲཧ… daiji_na_data = PgManager.where(‘status = 10’) .where(‘id
> 10’) .order_by(‘rank’) .limit_by(1) େࣄͳॲཧ… end
ຊ࣭Ͱͳ͍ͷʹ daijiؔͷςετམͪΔ
Fragile Test খ͞ͳมߋͰ͔ΜͨΜʹςετ͕མͪΔ ੬͍ςετ
None
Fragile Test͕ྔ࢈͞ΕΔͱ…
None
ςετ͕ෛ࠴ʹͳΓ ͳ͍΄͏͕Ϛγͳঢ়ଶʹ ؕΔ͜ͱ
ͦͯ͠୭ ϝϯςͰ͖ͳ͘ͳͬͨ
͡Ό͋Ͳ͏͢Ε͍͍ͷʁ
Clean Architecture
EBJKJؔ 1H.BOBHFS
ґଘͷํ େࣄͰͳ͍ͷ ↓ ͦͦ͜͜େࣄͳͷ ↓ େࣄͳͷ daijiؔ PgManager
େࣄͳϩδοΫ̍ def daiji(repository) େࣄͳॲཧ… daiji_na_data = repository.get_daiji_na_data େࣄͳॲཧ… end
ґଘͷํ େࣄͰͳ͍ͷ ↓ ͦͦ͜͜େࣄͳͷ ↓ େࣄͳͷ daijiؔ PgManager
• PgManagerϞδϡʔϧ͕͋Δ͜ͱ • PgManagerϞδϡʔϧ͕whereϝιουΛ͍࣋ͬͯΔ͜ͱ • whereϝιου͕order_byϝιουΛ࣋ͭΦϒδΣΫτΛฦ͢ ͜ͱ • order_byϝιου͕limit_byϝιουΛ࣋ͭΦϒδΣΫτΛฦ ͢͜ͱ
• ʢσʔλͷอଘઌ͕σʔλϕʔεͰ͋Δ͜ͱʣ • ʢσʔλϕʔε͕postgresqlͰ͋Δ͜ͱʣ ͜Ε͚ͩͷͷʹґଘ͍ͯ͠Δ ͜Ε͕
• repository͕get_daiji_na_dataϝιουΛ͍࣋ͬͯΔ͜ͱ ΊͪΌΊͪΌݮͬͨʂ ͜͏
• ςετget_daiji_na_dataΛελϒ ͢Δ͚ͩͰ͍͍ • σʔλऔಘͷਖ਼͠͞ get_daiji_na_dataΛςετ͢Εྑ͍
ຊ࣭ͷ෦ͷ ςετ͕ॻ͖͘͢ͳΔ
ผʹΫϦʔϯΞʔΩςΫνϟ ͱ͔ݴΘͳͯ͘Ͱ͖Δ
̍ਓͰͯ͠ҙຯ͕ͳ͍
໊લ͕͋Δ͜ͱ͕ॏཁ
Web͡Όͳͯ͘ େମద༻Ͱ͖ΔΑ
·ͱΊ • ςετϑΝʔετʹ͢Δʹ͍ͬͯΔ͜ͱΛ ੍ޚ͢Δ • Clean ArchitectureΛֶ͍ͬͯΔ͜ͱ ͷ੍ޚΛֶΔ
Clean ArchitectureͰ ςετϑΝʔετͳ ίʔυΛॻ͜͏ʂ