Composerでのバージョンの指定方法

PHPのパッケージマネージャーのComposerでのパッケージのバージョンの指定方法がよくわからなかったので整理した。
composer.jsonなどをみると,バージョン欄が^1.2などになっており,他にも~1.2などいくつか記法があった。比較演算子 (><=!) やワイルドカードを使ったものはなんとなく分かるが,^と~にどういう意味があるのか,他の指定方法との対応関係などがわからず混乱した。
そこで,公式の「Versions and constraints – Composer」を元に,対応関係を以下の表に整理した。
| 演算子 | 例 | 範囲 | 説明 |
|---|---|---|---|
| Exact Version Constraint | 0.3.0 | バージョンの特定。最も正確でシンプル。 | |
| Version Range | >=0.3 <1.1 | 演算子による汎用範囲指定。演算子に>, >=, <, <=, !=が使え,論理積 (スペース またはコンマ,) と論理和 (||) も使用可能。 | |
| Version Range | >= 1.0 <1.1 || >=1.2 | ||
| Hyphenated Version Range | 0.3 - 1.0 | >=0.3 <1.1 | バージョンの範囲指定。 |
| Wildcard Version Range | 0.3.* | >=0.3 <0.4.0 | 桁の指定。 |
| Wildcard Version Range | 0.* | >=0.0 <1.0.0 | |
| Tilde Version Range | ~0.3 | >=0.3 <1.0.0 | セマンティックバージョン疑似準拠。 |
| Tilde Version Range | ~1.2.3 | >=1.2.3 <1.3.0 | |
| Caret Version Range | ^0.3 | >0.3.0 <0.4.0 | セマンティックバージョン準拠。ただし,1.0以前は慎重。ライブラリーコード用に推奨。 |
| Caret Version Range | ^1.2.3 | >=1.2.3 <2.0.0 |
バージョンの指定方法がいろいろあるのだが,結論としては特に理由がなければ常にCaret Version Range (^) を使っておけば,互換性の面で安全だろう。
万が一,1.0未満のバージョンを指定する場合は,プロジェクトの安定状況に応じてTilde Version Rangeの使用も検討してよいだろう。
バージョンの指定方法がいろいろあってややこしかったが,今後は^を使うことにする。
リンク

