Slide 1

Slide 1 text

Laravelから始める テスト駆動開発 PHPerKaigi2020

Slide 2

Slide 2 text

塚原 彰仁 PHPer歴 3年 Laravel,CakePHP, WordPress

Slide 3

Slide 3 text

トークの概要 ・テスト書く習慣ゼロの状態から テスト駆動開発を始めた話

Slide 4

Slide 4 text

ある案件の話(失敗談) ▼イベント管理システム ・チケット申し込み ・当日来場受付

Slide 5

Slide 5 text

数々の苦難が…

Slide 6

Slide 6 text

機能を追加すると 既存機能が動かない…

Slide 7

Slide 7 text

増え続けるテストケース ・会員種別 ・申込み手順 ・開催中のイベント ・例外処理 →400件以上をリリースの度に

Slide 8

Slide 8 text

申し込んだデータが 消えたみたいで…

Slide 9

Slide 9 text

出典:BLEACH 13巻

Slide 10

Slide 10 text

何が起きていたのか? 1時間以内に購入 1時間以上経過する

Slide 11

Slide 11 text

何が起きていたのか? 1時間以内に購入 1時間以上経過する

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

よし!テスト書く!

Slide 14

Slide 14 text

テスト書く習慣を作る

Slide 15

Slide 15 text

機能追加に耐えられる

Slide 16

Slide 16 text

きれいなコード書ける

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

レベル1 社内案件から始める

Slide 19

Slide 19 text

Laravelで始めてみる ・ヘルパーメソッドが便利 ・ドキュメント豊富

Slide 20

Slide 20 text

仕様の概要 ▼個人の売上貢献度を教えてくれる システム ・Googleログイン認証 ・Google Sheets API連携

Slide 21

Slide 21 text

この処理をテスト駆動開発でやってみる Google認証画面(←サンプル) ↓ ログイン ↓ メールアドレス取得

Slide 22

Slide 22 text

色々参考にしながら こんな感じに

Slide 23

Slide 23 text

何とかできそう! ・参考サイトたくさんある ・テスト前提なら書きやすい

Slide 24

Slide 24 text

これで満足?

Slide 25

Slide 25 text

出典:BLEACH 13巻

Slide 26

Slide 26 text

打ち切り漫画っぽい

Slide 27

Slide 27 text

出典:シャーマンキング 32巻

Slide 28

Slide 28 text

レベル2 因縁のイベントシステム

Slide 29

Slide 29 text

問題の処理のテストコードを書いていく チケット申し込み ↓ 予約状態を確認(←サンプル) ↓ チケット予約確定

Slide 30

Slide 30 text

まずはFatControllerの リファクタリング 1.予約状況の確認処理をまるごとService レイヤーに切り出す 2.テスト用に処理を分解する

Slide 31

Slide 31 text

泥臭くテストを書いていく こんな感じに

Slide 32

Slide 32 text

それでも書けないところは E2Eテスト、手動テストでカバー 問題のテストケースは E2Eテストにできました! (1時間の待ち時間解消!!)

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

会社のみんなからは 複雑な案件に対して、エンジニアも非エンジニアも 安心感を持って取り組めます! 機能追加の心理ハードルが下がりますー

Slide 35

Slide 35 text

出典:SLAM DUNK15巻

Slide 36

Slide 36 text

打ち切り

Slide 37

Slide 37 text

・やってみる価値はあるよ! ・実務で苦戦したことが 逆にモチベーションに! ・小さく始めていこう!

Slide 38

Slide 38 text

よかったら テストどうでしょうか?

Slide 39

Slide 39 text

@AkitoTsukahara