TOP

ComposerのBranch aliasを使って依存関係を偽って開発中ブランチに差し替える

2016-04-05 13:35:00

タイトルこれでいいのかどうかわからないけど開発中のブランチをcomposerでインストールしようとした場合、依存関係でバージョンを絞ってあってインストールで怒られる時があります

例えば、とあるサイトのモジュールを下記2つのcomposerリポジトリでバージョン管理している場合

example.com/front
$ cat example.com/front/composer.json | jq ".require"
{
  "example.com/admin": "0.9"
}
example.com/admin
$ cat example.com/admin/composer.json | jq ".require"
{}

$ cd example.com/admin/
$ git log --oneline --decorate --graph master
* 1ddd781 (HEAD, tag: 0.9, origin/master, master)
* * c406b2d (tag: 0.8)
* * e2940b3 (tag: 0.7)
* * d4b0bc1 init.

$ git branch
dev-ShinKinou   // ← ※のちに、0.9.1 としてリリース予定のブランチ
master
次期バージョン(0.9.1)との依存関係エラー

example.com/frontは、example.com/adminの0.9を必要としているので、dev-ShinKinouという開発中のブランチを指定してcomposer updateした際に依存関係エラーとなります

$ cat example.com/front/composer.json | jq ".require"
{
  "example.com/admin": "dev-ShinKinou"    // ← ※開発中ブランチを指定
}

$ composer update --dry-run
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for example.com/front dev-master -> satisfiable by example.com/front[dev-master].
    - example.com/front dev-master requires example.com/admin = 0.9 -> no matching package found.

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
   see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.

Read <http://getcomposer.org/doc/articles/troubleshooting.md> for further common proble

このままgit checkoutでブランチを切り替えてもよいのですが、諸事情でそれが出来ない場面があって、composer側で出来ないか情報を探していた所、Branch aliasという物を見つけました

バージョンにエイリアスをつける

上記の例で、dev-Shinkinou0.9として仮に扱うには、依存関係の記述部分にエイリアスをつけます(今回はinlineでエイリアスをつけました)

$ cat example.com/front/composer.json | jq ".require"
{
  "example.com/admin": "dev-ShinKinou as 0.9"    // ← ※dev-ShinKinouブランチを"0.9"として扱う
}
確認
$ composer update --dry-run
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing example.com/admin (dev-ShinKinou 843b942)

無事updateされました

あくまでブランチのテスト用に使用していますが、あまり多用はせず、用が済んだら忘れずに戻しておくよう注意が必要ですね