LoginSignup
10

More than 5 years have passed since last update.

Composerで低いバージョンの依存テスト

Posted at

対象読者

この記事は主にcomposerのパッケージを開発しているパッケージメンテナーのための記事です。

低いバージョンの依存テストの必要性

composerで作成したパッケージを他のパッケージから利用する場合composer.lockは無視されます。

this lock file will not have any effect on other projects that depend on it. It only has an effect on the main project.

通常与えられた条件の最新のバージョンがインストールされます。テストは最新の依存だけをテストすることになり。^~で指定した最低のバージョンのテストは行われません。

これが問題になるのは、他のパッケージが特定のパッケージの低いバージョンのものに依存していて、また他のパッケージではその高いバージョンのみにある機能を使用している場合です。依存解決は低いバージョンで行われ、最新バージョンに依存したパッケージはエラーを引き起こしたりBugの元になったりします。

最低限のバージョンの依存のテスト

--prefer-lowestオプションでcomposer updateするとcomposer.jsonで指定した範囲で最低のバージョンがインストールされます。

composer update --prefer-lowest --prefer-stable
./vendor/bin/phpunit

Travis CIでのテスト

Travis CIでは以下の記述で複数のバージョンで最新の依存と最低バージョンの依存を取得します。

language: php
sudo: false
php:
  - 5.6
  - 7
  - 7.1
  - hhvm
env:
  matrix:
    - DEPENDENCIES=""
    - DEPENDENCIES="--prefer-lowest --prefer-stable"
before_script:
  - composer self-update
  - composer update $DEPENDENCIES

image.png

まとめ

composer.lockを使ってバージョンをロックできるのは他から依存されることのないメイン(ルート)のパッケージだけです。多くの依存のあるパッケージの依存解決がスムーズになるように、最低バージョンの依存を指定します。

一般に最新のバージョンのパッケージの利用を勧めることは良いプラクティスですが、一方で互換性や対象を多くするために動作する最低限のバージョンをなるべく広く取るようにした方がいいでしょう。

パッケージメンテナーは動作する依存パッケージの最低限のバージョンを正しく表記する必要があります。

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
10