Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

差分を探す

Slide 12

Slide 12 text

差分を探す 新規作成された vendor 自体は怪しくなかった ↓ 既存ファイルが書き換えられているのでは…?

Slide 13

Slide 13 text

差分を探す

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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