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

Larastan に自作 OSS ライブラリのテストをぶっ壊された話

mpyw
March 24, 2023

Larastan に自作 OSS ライブラリのテストをぶっ壊された話

PHPerKaigi 2023 Day1 アンカンファレンス

mpyw

March 24, 2023
Tweet

More Decks by mpyw

Other Decks in Programming

Transcript

  1. Larastan に自作 OSS ライブラリ
    のテストをぶっ壊された話
    PHPerKaigi 2023 Day1 アンカンファレンス
    @mpyw

    View Slide

  2. ある日,突然自作ライブラリのテストが壊れました

    View Slide

  3. 発端
    PDO のエミュレーションを切り替えるテスト

    View Slide

  4. 発端
    PDO のエミュレーションを切り替えるテスト
    RefreshDatabase はコネクションを解決してしまうが
    使っていない

    View Slide

  5. CI だけ何故か落ちるようになってしまった…

    View Slide

  6. ローカルと CI の微妙な違い
    ● ローカルでは…?
    ○ vendor/bin/phpunit
    ● CI では…?
    ○ vendor/bin/phpstan
    ○ vendor/bin/phpunit

    View Slide

  7. ローカルと CI の微妙な違い
    ● ローカルでは…?
    ○ vendor/bin/phpunit
    ● CI では…?
    ○ vendor/bin/phpstan
    ○ vendor/bin/phpunit
    PHPStan を走らせると
    その後のテストは何回実行しても落ちる

    View Slide

  8. PHPStan の実行で何が起こったのか?

    View Slide

  9. PHPStan の実行で何が起こったのか?
    orchestra/testbench はライブラリの
    テスト用に laravel/laravel をいい感じに
    用意してくれるテストフレームワーク

    View Slide

  10. Larastan くん勝手に vendor 配下触るの!?

    View Slide

  11. 差分を探す

    View Slide

  12. 差分を探す
    新規作成された vendor 自体は怪しくなかった

    既存ファイルが書き換えられているのでは…?

    View Slide

  13. 差分を探す

    View Slide

  14. 差分を探す
    パッケージディスカバリが走ってそう

    View Slide

  15. Larastan がどこかのバージョンから
    パッケージディスカバリを orchestra/testbench 内
    の laravel/laravel に対して行うようになった…

    View Slide

  16. 差分を探す
    orchestra/testbench が spatie/laravel-ray に依存している

    View Slide

  17. サービスプロバイダから呼ばれる処理で…
    立ち上げ時に DB::connection() を解決している

    View Slide

  18. View Slide

  19. View Slide

  20. というか Larastan がお節介すぎるやろ…

    View Slide

  21. nunomaduro/larastan/issues/1588 に立てました

    View Slide

  22. nunomaduro/larastan/issues/1588 に立てました

    View Slide

  23. laravel-ray 側で直すんかい!w

    View Slide

  24. 遅延評価されるように修正された(1日前)

    View Slide

  25. まとめ
    ● Larastan は勝手に orchestra/testbench 上の依存関係で
    パッケージディスカバリを実行してくる
    ● DB::connection() が解決される副作用に限っては spatie/laravel-ray 側で
    修正されたが,本質的な問題に対する違和感は拭えない

    View Slide