MUGIJIRU.JP

Webエンジニアの雑談ブログ

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

しょうもない話なのですが・・・

開発端末A: PHP 7.0.1
開発端末B: PHP 7.0.11
開発端末C: PHP 7.1.8

で共通のブランチに対して同時にプロジェクトの開発作業をしている状況で、
開発端末BのPHP 7.0.11でcomposer updateを実施し、composer.lockを更新しました。
すると、一部のライブラリにPHP 7.0.8以上を前提とするアップデートが入ってしまい、
下記のように開発端末AのPHP7.0.1でcomposer installが不能になるという事態になってしまいました。

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for symfony/event-dispatcher v3.3.8 -> satisfiable by symfony/event-dispatcher[v3.3.8].
    - symfony/event-dispatcher v3.3.8 requires php ^5.5.9|>=7.0.8 -> your PHP version (7.0.1) does not satisfy that requirement.
  Problem 2
    - Installation request for symfony/yaml v3.3.8 -> satisfiable by symfony/yaml[v3.3.8].
    - symfony/yaml v3.3.8 requires php ^5.5.9|>=7.0.8 -> your PHP version (7.0.1) does not satisfy that requirement.
  Problem 3
    - symfony/event-dispatcher v3.3.8 requires php ^5.5.9|>=7.0.8 -> your PHP version (7.0.1) does not satisfy that requirement.
    - symfony/http-kernel v3.0.9 requires symfony/event-dispatcher ~2.8|~3.0 -> satisfiable by symfony/event-dispatcher[v3.3.8].
    - Installation request for symfony/http-kernel v3.0.9 -> satisfiable by symfony/http-kernel[v3.0.9].

対応

プロジェクトの都合上、当ブランチではPHP 7.0.1での動作を保証する必要があったため、実施した対策としては
composer.jsonに下記指定をして、composer.lockを一度削除してcomposer installを行いました。

...
    "config": {
...
        "platform": {
            "php": "7.0.1"
        }
    }
}

これで生成されたcomposer.lockを利用してcomposer installを実施したところ
全ての端末で正常に依存関係の解決が行われました。一安心。

PHPのバージョンが上の端末ではしっかりダウングレードが行われていました。

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Package operations: 0 installs, 2 updates, 0 removals
  - Updating symfony/event-dispatcher (v3.3.8 => v3.3.6): Downloading (100%)         
  - Updating symfony/yaml (v3.3.8 => v3.3.6): Downloading (100%)         
Generating autoload files
> Illuminate\Foundation\ComposerScripts::postInstall
> php artisan optimize

よくできてるなーと思います。