🐘

composer install する際の PHP バージョンを指定する

2022/01/13に公開

概要

Composer が提供している Docker イメージ を使用する場合など composer を実行する環境(例えば PHP 8.1)と実際に動かす環境(例えば PHP 7.4)の PHP バージョンが異なるケースでそのままだと composer install でライブラリのインストールができないことがあります。
そういった場合は ドキュメント にあるように composer.json の platform で PHP バージョンを指定することができます。

composer.json

composer.json を直接編集することもできますがコマンドを使うと確実です。

php composer.phar config platform.php 7.4.27

composer.json に config が追加されます。

composer.json
{
	"config": {
		"platform": {
			"php": "7.4.27"
		}
	}
}

composer.lock

composer install は composer.lock をベースに実行されるので composer.lock に反映する必要があります。
composer update でライブラリを含め全体をアップデートしても良いのですが config だけを反映したい場合は引数で指定します。

php composer.phar update platform.php

content-hash が変更され platform-overridesplugin-api-version が追加されます。

composer.lock
{
    "content-hash": "e2df4b33e353da716f5f60fe148820a2",
    "platform": [],
    "platform-dev": [],
    "platform-overrides": {
        "php": "7.4.27"
    },
    "plugin-api-version": "2.2.0"
}

composer install

変更された composer.lock を基にライブラリをインストールします。

php composer.phar install

composer check-platform-reqs

ただしドキュメントの注意書きにあるように PHP のバージョンを指定した場合は依存関係が正しくチェックされないのでどこかで check-platform-reqs を実行しておく方が安全です。[1]

PHP 7.4.27 環境で
php composer.phar check-platform-reqs
脚注
  1. そもそもバージョンが異なる環境で composer を実行しない方がいいのかもしれませんが… ↩︎

Discussion