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
58
テストファーストな設計を求めて
ippachi
October 11, 2019
Tweet
Share
More Decks by ippachi
See All by ippachi
4つの観点から比較するRubyの型システム
ippachi
0
610
お花見しようの話.pdf
ippachi
0
150
Other Decks in Programming
See All in Programming
Spring gRPC について / About Spring gRPC
mackey0225
0
180
ファインディの テックブログ爆誕までの軌跡
starfish719
1
790
Compose でデザインと実装の差異を減らすための取り組み
oidy
1
240
動作確認やテストで漏れがちな観点3選
starfish719
5
880
asdf-ecspresso作って 友達が増えた話 / Fujiwara Tech Conference 2025
koluku
0
1.6k
Immutable ActiveRecord
megane42
0
120
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
3
310
非ブラウザランタイムとWeb標準 / Non-Browser Runtimes and Web Standards
petamoriken
0
450
ATDDで素早く安定した デリバリを実現しよう!
tonnsama
1
2.4k
AWSマネコンに複数のアカウントで入れるようになりました
yuhta28
2
150
PicoRubyと暮らす、シェアハウスハック
ryosk7
0
250
Moscow Python Meetup №97. Константин Крестников (Техлид команды GigaChain (SberDevices)). GigaChain: Новые инструменты для разработки агентов на примере агента техподдержки
moscowdjango
PRO
0
100
Featured
See All Featured
Statistics for Hackers
jakevdp
797
220k
How GitHub (no longer) Works
holman
312
140k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
19k
Designing Experiences People Love
moore
139
23k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Adopting Sorbet at Scale
ufuk
74
9.2k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
220
KATA
mclloyd
29
14k
Scaling GitHub
holman
459
140k
Unsuck your backbone
ammeep
669
57k
Being A Developer After 40
akosma
89
590k
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Ͱ ςετϑΝʔετͳ ίʔυΛॻ͜͏ʂ