Почему в проекте на RUBY Gemfile один, а в PHP — composer.json файлов много?
В проектах на Ruby применяется "плоская" система зависимостей, т.е. в корне проекта есть только один файл Gemfile.
В PHP почему-то "древовидная" система зависимостей - в корне проекта основной файл composer.json и в каждой папке библиотек в свою очередь "свои" файлы composer.json
С какой целью был выбран такой, кажущийся запутанным, подход к описанию зависимостей?
Это нужно спрашивать у разработчиков композера.
Не сталкивался с управлением зависимостями в php и ruby.
Но мне кажется - такой древовидный формат проще, в плане разрешения транзитивных зависимостей.
Ничего запутанного не вижу.
Аналогичный подход используется и в C# (nuget), и в js (npm)