なんかかきたい

プログラミングなどの個人的なメモやサークル「ゆきいろパラソル」の情報を載せてます

composerのrepositoriesは再帰的に読まれない

composerのドキュメントをよくよく読んでみると書かれていることなんだけど、composer.jsonのrepositoriesは再帰的に読まれないので注意が必要。

Repositories are only available to the root package and the repositories defined in your dependencies will not be loaded. Read the FAQ entry if you want to learn why.

Why can't Composer load repositories recursively? Composer

repositoriesを使うことは、少なくともオープンソースでライブラリを公開している限りではあまりないだろうし、大抵のライブラリはgithubにおいて、packagistに登録することが多いので、まあ困らないんだけど、プライベートなリポジトリをsatisなどを使って参照していると、プライベートなライブラリがさらにプライベートなライブラリに依存することがあって、ばっちりとこの問題にはまったりする。

細かいところまで読み込んでいないんだけど、残念なことにsatisを使ってもこの問題を解決できなかった。いい方法があるのかもしれないけど、ちょっとわかっていない。

とても単純に解決する方法としては、依存しているライブラリのリストを一番上の層のcomposer.jsonに書いてしまうことだ。

{
  "library": "dev-master",
  "component": "dev-master"
}

componentlibraryに依存している場合の例。componentcomposer.jsonにはlibraryへの依存が書いてあるとする。

このようにすると、ライブラリの依存関係解決がうまく行われて、dev-masterが見つからないとかいわれなくて済む。 けど普通に考えてこんなの絶対おかしいわけで、何とかならないのかなーと思うのでした。