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

PHPUnit 高速化テクニック / PHPUnit Speedup Techniques

PHPUnit 高速化テクニック / PHPUnit Speedup Techniques

「PHPUnit高速化テクニック」というテーマでお話しました。

----

PHPerKaigi 2025
- https://phperkaigi.jp/2025/
- https://fortee.jp/phperkaigi-2025/proposal/5e50648e-3041-4f1b-ac64-320a3fdc5d45

PHPカンファレンス新潟 2025
- https://phpcon.niigata.jp/
- https://fortee.jp/phpconniigata-2025/proposal/fba6c289-1166-4b5f-858f-2bb22e382f69

Avatar for pinkumohikan

pinkumohikan

March 22, 2025
Tweet

More Decks by pinkumohikan

Other Decks in Programming

Transcript

  1. ©tete marche CO., LTD. 3 ✔ テテマーチ株式会社 SINIS for X

    テックリード 篠田 北斗 ( @pinkumohikan ) ✔ バックエンド寄りの技術が好き ISUCON毎年参戦中🔥 自己紹介
  2. ©tete marche CO., LTD. Index 目次 6 1. テスト戦略の見直しで速くする 2.

    テスト実行方法の見直しで速くする 3. テスト環境の見直しで速くする
  3. ©tete marche CO., LTD. テストピラミッド 9 Unit Tests >> Service

    Tests > UI Testsのバランスを目指す 出典: The Practical Test Pyramid - martinfowler.com
  4. ©tete marche CO., LTD. テストピラミッド 10 考え方 • 決定性が高く、高速なUTをメインに •

    漏れた部分をST, UITでカバー テストの重複が減り、 信頼性を担保したままテスト時間を短縮 できる 出典: The Practical Test Pyramid - martinfowler.com
  5. ©tete marche CO., LTD. 11 Google提唱のテスト分類法 テストを - Small (Unit

    Test相当) - Medium (Service Test相当) - Large (UI Test相当) の3種類に分類 Test Sizes 出典: Test Sizes - Google Testing Blog
  6. ©tete marche CO., LTD. 12 • テストピラミッド ◦ UTをメインで書き、漏れた部分をST,UITでカバー ◦

    信頼性を担保したままテスト時間を短縮できる • Test Sizes ◦ 「どこまでがユニットテスト?」って揉めたらS/M/Lって表現する手もある ◦ ちゃんと従っていれば、Smallテストは並列実行しやすいメリットも テスト量のバランス調整: まとめ
  7. ©tete marche CO., LTD. 差分テスト 関連するクラスを見つけることが肝であり鬼門👹 いい方法知っていたら教えて欲しい こんな感じで出来るのでは説 1⃣ 変更されたクラスをリストアップ

    - git diff --name-only 2⃣ 変更クラスへの依存クラスを再帰的にリストアップ - nikic/PHP-Parser等を使い、AST (抽象構文木) から 3⃣ 各クラスの名前に Test suffixをつけてテストファイルをgrep 4⃣ ↑で見つかったテストファイルをPHPUnitで実行 30
  8. ©tete marche CO., LTD. テストの並列化 (ParaTest) 34 ParaTest • PHPUnitテストを複数プロセスで並列実行できるツール

    • 並列度を上げるとDB I/O部分でデッドロックしやすい☠ (Smallと相性◎)
  9. ©tete marche CO., LTD. テストの並列化 (Makefile) 37 Makefile • 伝統的なタスクランナー

    • `make -j` で並列実行できる • ParaTestが使えない場合や一部だけ並列化したい場合などに便利
  10. ©tete marche CO., LTD. XDebug無効化 ⚠ GitHub ActionsのUbuntuでは標準でXDebugが有効 PHPer御用達 shivammathur/setup-php

    ActionのREADMEにも、 使ってないなら高速化のために停めたほうが良い旨の記載がある 48 出典: shivammathur/setup-php
  11. ©tete marche CO., LTD. GHAのキャッシュウォームアップ GitHub Actionsのキャッシュの注意点 • 別ブランチのキャッシュは参照できない ◦

    デフォルトブランチは例外 • 7日間未アクセスで自動削除 このせいで意図せずcache missしていることが案外多い😭 対策: Workflowをmain向けて週次実行して、キャッシュを作っておく 55
  12. ©tete marche CO., LTD. 61 • Googleのソフトウェアエンジニアリング ◦ 書籍, O’Reilly

    Japan, 初版第一刷. • Test Sizes - Google Testing Blog ◦ https://testing.googleblog.com/2010/12/test-sizes.html, Google, 2025/3/16 最終閲覧. • The Practical Test Pyramid ◦ https://martinfowler.com/articles/practical-test-pyramid.html, martinfowler.com, 2025/03/22 最終閲覧. • GitHub Actions でテストを並列化して CI 時間を短縮する ◦ https://tech.gunosy.io/entry/actions_parallel, グノシー, 2025/03/22 最終閲覧. • 問題解決に必要な能力 〜CodeBuildとOPCacheに振り回された話〜 ◦ https://speakerdeck.com/matsukaz/ability-to-solve-problems, matsukaz, 2025/03/22 最終閲覧. 参考文献