PHPerKaigi 2023 Day1 アンカンファレンス
Larastan に自作 OSS ライブラリのテストをぶっ壊された話PHPerKaigi 2023 Day1 アンカンファレンス@mpyw
View Slide
ある日,突然自作ライブラリのテストが壊れました
発端PDO のエミュレーションを切り替えるテスト
発端PDO のエミュレーションを切り替えるテストRefreshDatabase はコネクションを解決してしまうが使っていない
CI だけ何故か落ちるようになってしまった…
ローカルと CI の微妙な違い● ローカルでは…?○ vendor/bin/phpunit● CI では…?○ vendor/bin/phpstan○ vendor/bin/phpunit
ローカルと CI の微妙な違い● ローカルでは…?○ vendor/bin/phpunit● CI では…?○ vendor/bin/phpstan○ vendor/bin/phpunitPHPStan を走らせるとその後のテストは何回実行しても落ちる
PHPStan の実行で何が起こったのか?
PHPStan の実行で何が起こったのか?orchestra/testbench はライブラリのテスト用に laravel/laravel をいい感じに用意してくれるテストフレームワーク
Larastan くん勝手に vendor 配下触るの!?
差分を探す
差分を探す新規作成された vendor 自体は怪しくなかった↓既存ファイルが書き換えられているのでは…?
差分を探すパッケージディスカバリが走ってそう
Larastan がどこかのバージョンからパッケージディスカバリを orchestra/testbench 内の laravel/laravel に対して行うようになった…
差分を探すorchestra/testbench が spatie/laravel-ray に依存している
サービスプロバイダから呼ばれる処理で…立ち上げ時に DB::connection() を解決している
というか Larastan がお節介すぎるやろ…
nunomaduro/larastan/issues/1588 に立てました
laravel-ray 側で直すんかい!w
遅延評価されるように修正された(1日前)
まとめ● Larastan は勝手に orchestra/testbench 上の依存関係でパッケージディスカバリを実行してくる● DB::connection() が解決される副作用に限っては spatie/laravel-ray 側で修正されたが,本質的な問題に対する違和感は拭えない