探せば良いドキュメントはたくさんありますが、ハマった上になかなか検索ワードにヒットする記事が見つからなかったので、スキマを埋めるためにあえて書きます!
なにがしたいか?
例えばこのようにした時、
composer require phpunit/phpunit
composerさんは自動的に「最新バージョン」のphpunitを取ってきてインストールしてくれますが、プロジェクトの本番環境がなんと今更PHP5.3.3だった、PHP5.3.3に対応したphpunitが欲しいんだ!というケース。
結論
config.platform を書く
composer.json に下記の通り書きます。
※便宜上コメントを入れていますが、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