✍️
composer のスクリプトで phpstan を実行する時のタイムアウト定義について
私が関わっているプロジェクトでは、 laravel と phpstan を利用しています。
この phpstan の level を max にした時に軽くハマったので、同じような目に遭っている人の助けになればと思い、短いですが tips 的な記事を書きました。
なぜか phpstan.neon に定義している時間よりも早くタイムアウトする
今開発しているプロジェクトでは、 composer.json
に以下のように設定しています
"phpstan": [
"phpstan analyze --memory-limit 2G -c phpstan.neon"
],
そして、 phpstan.neon
は以下のようにしています
parallel:
processTimeout: 3600.0
このような状態なのですが、以下のようなエラーが出てしまいました
(300秒でタイムアウト???🤔)
The following exception is caused by a process timeout
Check https://getcomposer.org/doc/06-config.md#process-timeout for details
In Process.php line 1205:
The process "phpstan analyze --memory-limit 2G -c phpstan.neon" exceeded the timeout of 300 seconds.
結論
composer は composer でタイムアウトの時間が定義されているので、 composer コマンドで phpstan を利用するなら process-timeout
を記述すべき。
(今振り返るとログの Check https~
の箇所をよく読めば分かった事だった...)
どういうこと?
最初調査した時、 AI に聞いたら以下のような対応を紹介されました
サーバやローカル環境で php.ini が編集できるのであれば、以下のような設定を検討してください。
```
; PHPの実行時間上限を 600 秒にする
max_execution_time = 600
; 使用メモリ上限を 2GB にする
memory_limit = 2G
```
ただ、これでも結果が変わらず、どういうことなのかさっぱり分からず自分でググってみると以下の issue を見つけました
どうやら composer コマンドでスクリプトを実行する時のタイムアウトの定義は、 composer.json
でおこなうべきのようですね👀
なので上記 issue を参考に composer.json
に記述したところ、無事タイムアウトせずに phpstan を実行できました!
"config": {
"process-timeout": 3600
},
まとめ
- エラーはちゃんと読もう
- タイムアウトの定義箇所が色々あるのはややこしい
Discussion