Composerのバージョン指定方法でのチルダ(~)とキャレット(^)の違い
少し前(1.0.0-alpha10)からComposerのバージョン指定でキャレット(^
)がサポートされるようになり、デフォルトのバージョン指定もチルダ(~
)からキャレット(^
)に変更されました。
キャレット(^
)での指定はチルダ(~
)と微妙に違い混乱するので、整理しておきます。
指定 | 対象となるバージョン |
---|---|
~1.1 |
1.1.0 以上、2.0.0 未満 |
^1.1 |
同上 |
~1.1.5 |
1.1.5 以上、1.2.0 未満 |
^1.1.5 |
1.1.5 以上、2.0.0 未満 |
~0.3 |
0.3.0 以上、1.0.0 未満 |
^0.3 |
0.3.0 以上、0.4.0 未満 |
要するにキャレットはセマンティックバージョニングに従って互換性が維持されるような範囲を指定するということですね。
^1.1
や^1.1.5
の場合は、メジャーバージョンが変わらず互換性が維持される間、バージョンがあがります。
バージョン1.0未満のバージョンではマイナーバージョンの変更でも互換性が維持されない可能性があるので、そこはあがりません。
まあ、使ってるパッケージがセマンティックバージョニングにきちんと従っているかどうかはパッケージの作者によりますし、セマンティックバージョニングに従っているというパッケージでもバグで後方互換性が破られる可能性もあるわけですので、あまり信用しすぎないことをお薦めしますが。
ちなみに、その他のバージョン指定方法については、次の記事がわかりやすいです。
参考
- https://getcomposer.org/doc/01-basic-usage.md#package-versions
- http://blog.madewithlove.be/post/tilde-and-caret-constraints/
関連
Date: 2015/06/19