Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

2020/02/09 ~ 02/11の期間で開催された【PHPerKaigi2020】のルーキーズLTで発表した登壇資料です。

AkitoTsukahara

February 10, 2020
Tweet

More Decks by AkitoTsukahara

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  5. 数々の苦難が…

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. 出典:BLEACH 13巻

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  12. よし!テスト書く!

    View full-size slide

  13. テスト書く習慣を作る

    View full-size slide

  14. 機能追加に耐えられる

    View full-size slide

  15. きれいなコード書ける

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  19. この処理をテスト駆動開発でやってみる
    Google認証画面(←サンプル)

    ログイン

    メールアドレス取得

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  22. これで満足?

    View full-size slide

  23. 出典:BLEACH 13巻

    View full-size slide

  24. 打ち切り漫画っぽい

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  27. 問題の処理のテストコードを書いていく
    チケット申し込み

    予約状態を確認(←サンプル)

    チケット予約確定

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  32. 出典:SLAM DUNK15巻

    View full-size slide

  33. 打ち切り

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  36. @AkitoTsukahara

    View full-size slide