Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not be...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
プッシュ
February 22, 2025
Programming
1.3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
プッシュ
February 22, 2025
Other Decks in Programming
See All in Programming
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
490
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
180
すこし踏み込む CancellationToken
htkym
2
610
Heart of Swift Concurrency
koher
0
920
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
550
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
710
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
200
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
320
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
120
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
300
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
230
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
200
Featured
See All Featured
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
GraphQLとの向き合い方2022年版
quramy
50
15k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
How STYLIGHT went responsive
nonsquared
100
6.3k
Navigating Weather and Climate Data
rabernat
0
520
Balancing Empowerment & Direction
lara
6
1.3k
Transcript
1年目の私に伝えたい! テストコードを怖がらなくなるための ヒント💡 2025/02/22 PHPカンファレンス名古屋2025 #phpcon_nagoya #q
自己紹介 名前 プッシュ(@push_gawa) 所属 株式会社カオナビ 職種 バックエンドエンジニア #phpcon_nagoya #q
挫折 #phpcon_nagoya #q
😱 1年目の私 一つのAPIのテスト作成に 1週間かけたが大失敗 #phpcon_nagoya #q
原因 • なぜテストを書くのかわからない • どんなテストケースを書けばいいのか わからない • テストの書き方もわからない #phpcon_nagoya #q
😱 1年目の私 テストを書くことさえ、できなかった #phpcon_nagoya #q
📝 今日話すこと • なぜテストを書くのか • 私なりのテストの書き方 • テストコードを書いたことでの変化 • 一年目の私へのメッセージ
#phpcon_nagoya #q
なぜテストを書くのか #phpcon_nagoya #q
変更を加えた際に問題がないと 自信を持つために書く テストは #phpcon_nagoya #q
修正箇所は意図した 動作をしていますか? #phpcon_nagoya #q
修正箇所は意図した 動作をしていますか? 既存の動作は 壊れていないですか? #phpcon_nagoya #q
YES 修正箇所は意図した 動作をしていますか? 既存の動作は 壊れていないですか? #phpcon_nagoya #q
テストコードが問題を事前に発見! - 組織分析機能の開発事例 - 具体例 #phpcon_nagoya #q
組織分析機能イメージ #phpcon_nagoya #q
具体的なレスポンスのイメージ #phpcon_nagoya #q [ { 'department' => '営業部', 'member_count' =>
30, }, … … { 'department' => '経理部', 'member_count' => 5, }, ];
• 営業部メンバー:30人 • 田中さん ◦ 所属1:営業部 ◦ 所属2:営業第1グループ • 他メンバー:29人
具体的なデータ例 #phpcon_nagoya #q
具体的なデータ例(図) 営業部 [30人] ├── 👔 田中さん ├── 👤 ├── 👤
└── 営業第1グループ ├── 👔 田中さん(兼務) ├── 👤 #phpcon_nagoya #q
- 期待する結果:30人 結果 #phpcon_nagoya #q
- 期待する結果:30人 - 実際の結果:31人 結果 #phpcon_nagoya #q
差分の原因 営業部 : 👔 田中さん └── 営業第1グループ: 👔 田中さん(兼務) ※同じ人なのに2回カウント
#phpcon_nagoya #q
✓ 兼務者の重複カウント問題を発見 ✓ 本番環境に出す前に問題を発見 ✓ 早期に修正対応が可能 テストコードを書いていてよかったこと #phpcon_nagoya #q
テストは 変更を加えた際に問題がないと 自信を持つために書く 🔑 ヒント #phpcon_nagoya #q
どうやってテストを書くのか #phpcon_nagoya #q
テストケース名は test_前提条件_期待する結果 で書く #phpcon_nagoya #q
具体的なコード例 public function test_兼務社員が存在する場合_重複なしで人数がカウントされるべき(): void { } #phpcon_nagoya #q
テストコード 1. AAAパターンを使う #phpcon_nagoya #q
具体的なコード例 public function test_兼務社員が存在する場合_重複なしで人数がカウントされるべき(): void { /** Arrange(準備) */ /**
Act(実行) */ /** Assert(確認) */ } #phpcon_nagoya #q
テストコード 1. AAAパターンを使う 2. 期待値を先に書く #phpcon_nagoya #q
具体的なコード例 public function test_兼務社員が存在する場合_重複なしで人数がカウントされるべき(): void { /** Arrange(準備) */ /**
Act(実行) */ /** Assert(確認) */ $expected = [ 'department' => '営業部', 'member_count' => 30, ]; $response->assertExactJson($expected) ->assertOk(); } #phpcon_nagoya #q
テストコード 1. AAAパターンを使う 2. 期待値を先に書く 3. コメント駆動で実現したいことを書く #phpcon_nagoya #q
具体的なコード例 /** Assert(確認) */ $expected = [ 'department' => '営業部',
'member_count' => 30, ]; $response ->assertExactJson($expected) ->assertOk(); } public function test_兼務社員が存在する場合_重複な しで人数がカウントされるべき(): void { /** Arrange(準備) */ // 田中さんを営業部で登録 // 田中さんを営業第一グループで登録 /** Act(実行) */ // API叩く #phpcon_nagoya #q
テストコード 1. AAAパターンを使う 2. 期待値を先に書く 3. コメント駆動で実現したいことを書く 4. 実際にコードを書いていく #phpcon_nagoya
#q
具体的なコード例 public function test_兼務社員が存在する場合_重複なし で人数がカウントされるべき(): void { /** Arrange(準備) */
Department::query()->insert([ // 田中さんを営業部で登録 [ 'id' => 1, 'name' => '営業部', 'member' => '田中', ], // 田中さんを営業第一で登録 [ 'id' => 2, 'name' => '営業第一', 'member' => '田中', ], ]); /** Act(実行) */ // API叩く $response = $this->getAjax(self::URI); /** Assert(確認) */ $expected = [ 'department' => '営業部', 'member_count' => 30, ]; $response ->assertExactJson($expected) ->assertOk(); } #phpcon_nagoya #q
テストを書くときは 段階的に書いて、やることを明確にしよう 🔑 ヒント #phpcon_nagoya #q
私の中での変化 #phpcon_nagoya #q
• テストを書くことが「怖い」=>「楽しい」になった • レビューでの質問などがしやすくなった • とりあえず動くものが作れるようになった 変化 #phpcon_nagoya #q
✨ 1年目の私へ #phpcon_nagoya #q テストコードは僕たちの未来を守ってくれる道具さ 失敗を恐れないで小さく始めよう
ご清聴ありがとうございました #phpcon_nagoya #q