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
63
テストファーストな設計を求めて
ippachi
October 11, 2019
Tweet
Share
More Decks by ippachi
See All by ippachi
4つの観点から比較するRubyの型システム
ippachi
0
640
お花見しようの話.pdf
ippachi
0
180
Other Decks in Programming
See All in Programming
Amazon Q CLI開発で学んだAIコーディングツールの使い方
licux
3
120
オホーツクでコミュニティを立ち上げた理由―地方出身プログラマの挑戦 / TechRAMEN 2025 Conference
lemonade_37
1
120
構造化・自動化・ガードレール - Vibe Coding実践記 -
tonegawa07
0
150
MySQL9でベクトルカラム登場!PHP×AWSでのAI/類似検索はこう変わる
suguruooki
1
260
[Codecon - 2025] Como não odiar seus testes
camilacampos
0
100
Prompt Engineeringの再定義「Context Engineering」とは
htsuruo
0
110
The Modern View Layer Rails Deserves: A Vision For 2025 And Beyond @ RailsConf 2025, Philadelphia, PA
marcoroth
2
830
Claude Code で Astro blog を Pages から Workers へ移行してみた
codehex
0
170
The Niche of CDK Grant オブジェクトって何者?/the-niche-of-cdk-what-isgrant-object
hassaku63
1
720
GPUを計算資源として使おう!
primenumber
1
290
React は次の10年を生き残れるか:3つのトレンドから考える
oukayuka
40
15k
Gemini CLIの"強み"を知る! Gemini CLIとClaude Codeを比較してみた!
kotahisafuru
2
210
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
329
21k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Thoughts on Productivity
jonyablonski
69
4.8k
Embracing the Ebb and Flow
colly
86
4.8k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
390
Designing for Performance
lara
610
69k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
5.9k
Making Projects Easy
brettharned
117
6.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Gamification - CAS2011
davidbonilla
81
5.4k
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Ͱ ςετϑΝʔετͳ ίʔυΛॻ͜͏ʂ