Composer で依存ライブラリのバージョンがあわないとき

問題

依存ライブラリを追加しようと思って composer.json を編集して php composer.phar update を実行したらこんな感じのエラーが出た

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Conclusion: remove yiisoft/yii dev-master
    - yiiext/migrate-command dev-master requires yiisoft/yii 1.1.* -> satisfiable by yiisoft/yii[1.1.14, 1.1.14-rc].
    - yiiext/migrate-command dev-master requires yiisoft/yii 1.1.* -> satisfiable by yiisoft/yii[1.1.14, 1.1.14-rc].
    - Can only install one of: yiisoft/yii[dev-master, 1.1.14].
    - Can only install one of: yiisoft/yii[dev-master, 1.1.14-rc].
    - Installation request for yiisoft/yii dev-master -> satisfiable by yiisoft/yii[dev-master].
    - Installation request for yiiext/migrate-command dev-master -> satisfiable by yiiext/migrate-command[dev-master]

原因

yii-restful と yii-migrate-command ってのを両方使いたかったんだけど それぞれ composer.json に書いてある yii のバージョン指定が違うらしい。

  • yii-restful: dev-master
  • yii-migrate-command: 1.1.*

そんでどっちつかずになってインストールできなくなる模様。

解決

alias を使うと大丈夫だった

dev-master で master ブランチを指定していた yiisoft/yii を

{
  "require": {
    "php": ">=5.5.0",
    "yiisoft/yii": "dev-master",
    "yiiext/migrate-command": "dev-master",
    "likai/yii-restful": "dev-master"
  }
}

↓ as で 1.1.x ブランチとして扱うように変更する

{
  "require": {
    "php": ">=5.5.0",
    "yiisoft/yii": "dev-master as 1.1.x-dev",
    "yiiext/migrate-command": "dev-master",
    "likai/yii-restful": "dev-master"
  }
}

これで dev-master と 1.1.* を両方満せるようになって解決。

その他

dev-* OR *-dev って表現はブランチって意味らしい。 勉強になりました。