$30 off During Our Annual Pro Sale. View Details »
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
650
お花見しようの話.pdf
ippachi
0
200
Other Decks in Programming
See All in Programming
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
170
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
150
tparseでgo testの出力を見やすくする
utgwkk
2
280
GoLab2025 Recap
kuro_kurorrr
0
780
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
140
Graviton と Nitro と私
maroon1st
0
130
GISエンジニアから見たLINKSデータ
nokonoko1203
0
180
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
130
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
250
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
150
TestingOsaka6_Ozono
o3
0
170
クラウドに依存しないS3を使った開発術
simesaba80
0
160
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
0
1.9k
Marketing to machines
jonoalderson
1
4.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Heart Work Chapter 1 - Part 1
lfama
PRO
3
35k
How to Ace a Technical Interview
jacobian
281
24k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Skip the Path - Find Your Career Trail
mkilby
0
27
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
230
Joys of Absence: A Defence of Solitary Play
codingconduct
1
260
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
92
Information Architects: The Missing Link in Design Systems
soysaucechin
0
710
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
37
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Ͱ ςετϑΝʔετͳ ίʔυΛॻ͜͏ʂ