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.4k
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
dotNET_vulnclicker_intro.pdf
deka_morita
0
130
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
950
The Rails Doctrine Decade
koic
2
540
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
450
20260914 AIエージェント時代のPlatform Engineering LLM基盤とプロダクトの責務境界線
kanfab1
7
2.4k
Embedded Swiftで作る自作USBデバイス によるiOSデバイスの自動テスト / iOSDC Japan 2026 glassfiber
glassfiber
0
310
Domain-Driven Transformation
hschwentner
2
2.3k
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
100
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
350
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
570
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
160
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.3k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
780
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
440
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
300
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
540
The Pragmatic Product Professional
lauravandoore
37
7.5k
Facilitating Awesome Meetings
lara
57
7.2k
The Language of Interfaces
destraynor
162
27k
Test your architecture with Archunit
thirion
2
2.4k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Prompt Engineering for Job Search
mfonobong
0
500
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