phpenvが動かなかったためDockerを使ってPHPの特定のバージョンでComposerを動かしました。
結論
{
"config": {
"platform": {
"php": "MAJOR.MINOR.PATCH", # ここにバージョンを書く
"ext-something": "MAJOR.MINOR.PATCH"
}
}
}
docker run --rm -v $(pwd):/app composer/composer update
経緯
少し古い Larave(Laravel8)が入っているリポジトリを引っ張りだして動かそうとしたところ、依存関係のライブラリがPHP 7.3 でしか動かなくなっていました。
2024年2月現在では手元の環境(MacOS)には PHP8.3 が brew で入っていました。
これまでは古いバージョンのPHPを使う場合、 brew install php@7.3 && brew link php@7.3
などとして切り替えていたのですが、現行のbrewでは見つかりませんでした。
他のbrewをtapすれば入りそうではあったのですが、せっかくなのでこれまであまり使ってこなかった phpenv
を使ってみました。
特定のリポジトリだけ古いバージョンのPHPが必要でしたし、そのほうが便利かなと思いました。
ですが指定バージョンのPHPのインストールに失敗してしまい困ってしまいました。
Docker
Dockerで試すことにしました。
今回の対象はLaravelで、かつローカル環境に sail
を使っていたため、そちらをインストールすれば環境が出来上がるのですが、独立して入れてみました。
ポイント
今回のポイントは、ホストOS側で作成されているcomposer.json
を含むコードに対してcomposerを実行したい、というものでした。
コンテナ内部でPHPの環境を構築してそこで composer install
などをするのではなく、使い捨てのDockerコンテナを使ってホストOS用に実行する、というものです。
結論
冒頭にもありますが, composer.json の config.platform.php
の項目にPHPのバージョンを追記します。
必要に応じて ext-json
などもここに記述するようです。
今回は 7.3
で動かしたいので下記のように追記します。
{
"config": {
"platform": {
"php": "7.3.33"
}
}
}
その上でホストOS上で実行します。
docker run --rm -v $(pwd):/app composer/composer update
docker run --rm -v $(pwd):/app composer/composer
までワンセットでその後の引数はcomposerの引数になります。 このコマンドが composer
コマンドのように動くのでとても便利です。
実行結果です。
phpenvが動かなかったのは残念ですがやはりDocker便利ですね。