LoginSignup
0
0

phpenvが動かなかったためDockerを使ってPHPの特定のバージョンでComposerを動かす

Last updated at Posted at 2024-02-21

phpenvが動かなかったためDockerを使ってPHPの特定のバージョンでComposerを動かしました。

結論

composer.json
{
  "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 で動かしたいので下記のように追記します。

composer.json
{
  "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 コマンドのように動くのでとても便利です。

実行結果です。

image.png

phpenvが動かなかったのは残念ですがやはりDocker便利ですね。

0
0
0

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
0
0