66
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

composerでPHPのバージョンを制限したい

Last updated at Posted at 2017-08-08

探せば良いドキュメントはたくさんありますが、ハマった上になかなか検索ワードにヒットする記事が見つからなかったので、スキマを埋めるためにあえて書きます!

なにがしたいか?

例えばこのようにした時、

composer require phpunit/phpunit

composerさんは自動的に「最新バージョン」のphpunitを取ってきてインストールしてくれますが、プロジェクトの本番環境がなんと今更PHP5.3.3だった、PHP5.3.3に対応したphpunitが欲しいんだ!というケース。

結論

config.platform を書く

composer.json に下記の通り書きます。
※便宜上コメントを入れていますが、JSONなので実際にはコメントは書けません

composer.json
{
    "require": {
        #依存パッケージ
    },
    "config": {
        "platform": {
            "php": "5.3.3" #開発・リリース環境のPHPバージョン
        }
    }
}

解説

composer は composer を実行した環境に入っているPHPのバージョンを見ている

最初の composer require phpunit/phpunit を実行したとき、プロジェクトの本番&テスト環境がPHP5.3.3なのに、 require:{"php":">=7.0"} というパッケージをインストールするので、[]が使えないよ!とか怒られてしまっていた。
composerが管理するパッケージには、ほとんど require:{"php":">=5.5.9"} と書かれていて、うまいこと管理をしてくれていると思っていたのに、これはどういうことだ!

それはね、composer を実行していた手元のPCに入っていたのがPHP7.1だったからだよ。だからcomposerは安心して、7.0以上で使える新しいパッケージを選択してくれたみたいです。

そうじゃなくて!
手元のPCはPHPの7.1だけど、実際にこのプロジェクトの本番環境はPHP5.3.3なんだ! だからPHP5.3.3までで動くパッケージを探してきてほしい。ということをcomposerに指示するのが、config:platformのようです。platformは実際の動作環境を指示する、結構大事な設定。むしろいつも必ず入れておいたほうがいい設定と言えます。

これを指定しておけば、phpunitって、PHP5.3.3で動くバージョンってなんだっけ?と調べなくても、composer require phpunit/phpunit とするだけで、Ver.4.8.x を見つけてインストールしてくれます。

余談

2019-04修正
@shouchiku さんありがとうございます。

コマンドラインで設定する場合はこのように!
やったー。(個人的に好きな)コマンドラインでできました!😆

composer config platform.php 5.3.3
66
51
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
51

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?