Help us understand the problem. What is going on with this article?

Composer の "scripts" 単位で Timeout の無効化が設定できるようになって便利

2019年8月3日に、Composer1.9がリリースされていて、その中で Composer\Config::disableProcessTimeout ヘルパが便利そうであった。

Composer のコマンドの実行タイムアウトは通常 300秒

Composer では、通常コマンドのタイムアウトが300秒に設定されている。
このため、scripts に、開発用サーバ起動コマンドなどを設定しようものなら、5分で強制終了されてしまう。

scripts によるスクリプトの定義は、以下などを参照されたし

composer.json
{
    "scripts": {
        "server": "php -S localhost:8080 -t public/"
    }
}
$ composer server
> php -S localhost:8080 -t public/

-> 5分後、サーバが勝手に止まります。悲しい。

タイムアウト無効化・変更する技 (1.8以前)

以下の設定を0秒にすることで、無効化できます。下に行くほど優先度が高い (設定が上書きされる) です。

  • composer 設定の、process-timeout を設定する。
    • composer config process-timeout 0 にとすることで、composer.json にタイムアウトが無効化される設定が書き出される。ただし、当該プロジェクト全体で適用されてしまうので、都合が悪い場合があるし、ドキュメント等でその方法を示す必要がある。
  • COMPOSER_PROCESS_TIMEOUT 環境変数を設定する。
    • COMPOSER_PROCESS_TIMEOUT=0 composer server で起動することで、当該コマンドに限りタイムアウト設定を無効化できる。ドキュメント等でその方法を示す必要がある。
  • run-script--timeout オプションを設定する。
    • composer run-script --timeout 0 server で起動することで、当該コマンドに限りタイムアウト設定を無効化することができる。ドキュメント等でその方法を示す必要がある。

と、すべてドキュメント等に記載しないとワークしない方法の数々です。スクリプトの共有を楽にするはずが、これではよくありません。

Composer\Config::disableProcessTimeout ヘルパによる無効化

そこで、登場したヘルパはスクリプトとして記載することで、そのスクリプトに限りタイムアウト設定を無効化することができるスグレモノです。
このヘルパは、上記の設定等中で最優先されます。

composer.json
{
    "scripts": {
        "server": [
            "Composer\\Config::disableProcessTimeout",
            "php -S localhost:8080 -t public/"
        ]
    }
}
$ composer server
> Composer\Config::disableProcessTimeout
> php -S localhost:8080 -t public/

→ タイムアウトしなーい。

もちろん、Composer1.8以前だと以下のようなエラーが出るので、このエラーが出る場合は compser self-update を忘れずに。 (1敗)

Method Composer\Config::disableProcessTimeout is not callable, can not call server script

参考資料

ooharabucyou
地球に住んでいます。
http://www.bucyou.net
codeal
即戦力複業ならコデアル。高収入×リモートワークの複業・フリーランス・転職求人多数
https://www.codeal.work
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした