はじめに
Laravelで実行されたDBクエリの確認ができるライブラリ"Laqu"にLarastanを適用したのとphp8.0対応をしました。
– Release Apply Larastan. · shimabox/laqu https://t.co/ju4cvARp1V
– Release Compatible to php8.0 · shimabox/laqu https://t.co/aerDLq7wvq— しまぶ (@shimabox) January 23, 2022
というわけで、以前に書いたLaquというライブラリのアップデートをしました。
対応したのは以下項目です。
- PHP8.0の対応
- Larastanの適用
どんな対応をしたのか
PHP8.0の対応
これは単純に、GitHub ActionsのymlファイルにPHP8.0を対象として加えただけです。
コミットはこんな感じ。
- shimabox/laqu/pull/34/commits/5554f5be2d632b212ee195f305f442f8999fb8b9
- 同時に、
PHP7.2
とLaravel5.8.x
の対応をやめています
ふつうに動いてよかった。
Larastanの適用
これはけっこう苦労して、Larastanが依存しているライブラリのバージョンも指定しないと、このバージョンのこのパターンだとエラーみたいになってしまいました。
こういうときは、phpstan analyse --debug
のようにphpstanのコマンドに--debug
をつけて実行すると、どこでエラーとなっているのかが分かるので解決の糸が見えやすいです。
以下は、PHP8 x Laravel 6.* x prefer-lowest(低いバージョンの依存テスト)の組み合わせで発生したエラーのログです。
> phpstan analyse --memory-limit=2G --debug Note: Using configuration file /home/runner/work/laqu/laqu/phpstan.neon.dist. /home/runner/work/laqu/laqu/src/Analyzer/QueryAnalyzer.php Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: syntax error, unexpected token "\" in /home/runner/work/laqu/laqu/vendor/mockery/mockery/library/Mockery/Loader/EvalLoader.php(34) : eval()'d code:894 #0 /home/runner/work/laqu/laqu/vendor/mockery/mockery/library/Mockery/Container.php(223): Mockery\Loader\EvalLoader->load() #1 /home/runner/work/laqu/laqu/vendor/mockery/mockery/library/Mockery.php(82): Mockery\Container->mock() 〜
こう見てみると、mockery
でエラーになっていることがわかります。
※ このときmockery
のバージョンは1.0
を指していました
そして、mockeryを見てみると、php7.3以上に対応しているのは1.4系と1.5系であることがわかりました。
そのため、mockeryは別途、"mockery/mockery": "^1.4|^1.5",
のように指定を入れて対応をしました。
そもそもどうやって使うの?
そもそもどうやって使うのかですが、これは昔Qiitaに書いてあるのでこちらを参考にしていただけるとありがたいです。
おわりに
PHP8.0で書いている実案件でも絶賛稼働中で、興味のある方がいらっしゃれば触っていただけるとうれしいです。
※ クエリの確認とかテストが楽になるので個人的には気に入っています