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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ippachi
October 11, 2019
Programming
1
67
テストファーストな設計を求めて
ippachi
October 11, 2019
Tweet
Share
More Decks by ippachi
See All by ippachi
4つの観点から比較するRubyの型システム
ippachi
0
650
お花見しようの話.pdf
ippachi
0
210
Other Decks in Programming
See All in Programming
コードレビューをしない選択 #でぃーぷらすトウキョウ
kajitack
3
1.1k
Angular-Apps smarter machen mit Gen AI: Lokal und offlinefähig - Hands-on Workshop!
christianliebel
PRO
0
130
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
220
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
130
ロボットのための工場に灯りは要らない
watany
12
3.2k
Codex の「自走力」を高める
yorifuji
0
1.3k
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.7k
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
150
Feature Toggle は捨てやすく使おう
gennei
0
330
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
240
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.5k
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
380
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
150
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.4k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.2k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
[SF Ruby Conf 2025] Rails X
palkan
2
850
Claude Code のすすめ
schroneko
67
220k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Git: the NoSQL Database
bkeepers
PRO
432
67k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
250
Designing Experiences People Love
moore
143
24k
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Ͱ ςετϑΝʔετͳ ίʔυΛॻ͜͏ʂ