¿Qué es?

Composer es un gestor de paquetes y resolutor de dependencias para PHP, parecido a NPM para NodeJS o Bundler para Ruby. Pero, ¿para qué necesitamos un resolutor de dependencias?, para entender esto necesitamos primero echar un vistazo a cómo es un proyecto de software en la vida cotidiana:

Por lo general, un proyecto se ve algo así, bueno, bastante más complejo. Pero lo importante acá, es notar que un proyecto se compone de diferentes fragmentos de código, funcionalidades, paquetes, componentes, etc. Estos presentan dependencias entre si, es decir, para que un módulo pueda funcionar, necesita la presencia de otro.

Las dependencias pueden anidarse con varios grados de funcionalidad, y adicionalmente, los paquetes tienen versiones al igual que sus dependencias y el cambiar una, afecta directamente al otro. Tratar de manejar esto de forma manual puede ser una inversión de tiempo y esfuerzo bastante grande, es ahí donde está el aporte de Composer.

"require": {
    "php": "^5.6 || ^7.0",
    "phpunit/php-file-iterator": "~1.4",
    "phpunit/php-text-template": "~1.2",
    "phpunit/php-code-coverage": "^4.0.1",
    "phpunit/php-timer": "^1.0.6",
    "phpunit/phpunit-mock-objects": "^3.2",
    "phpspec/prophecy": "^1.3.1",
    "symfony/yaml": "~2.1|~3.0",
    "sebastian/comparator": "~1.1",
    "sebastian/diff": "~1.2",
    "sebastian/environment": "^1.3 || ^2.0",
    "sebastian/exporter": "~1.2",
    "sebastian/global-state": "~1.0",
    "sebastian/object-enumerator": "~1.0",
    "sebastian/resource-operations": "~1.0",
    "sebastian/version": "~1.0|~2.0",
    "myclabs/deep-copy": "~1.3",
    "ext-dom": "*",
    "ext-json": "*",
    "ext-mbstring": "*",
    "ext-xml": "*",
    "ext-libxml": "*"
},

El JSON de arriba es la forma de resolver todo lo antes expuesto en lenguaje composer. Este JSON es parte del contenido del archivo composer.json del paquete PHPUnit.

Instalación

Para realizar la instalación, antes, tienes que haber instalado PHP, algo bastante lógico, pues si vas a usar composer es para programar en php. Para comprobar que tienes instalado PHP, puedes ejecutar en la consola el siguiente comando:

php --version

Si PHP se encuentra en tu sistema, debería responder mostrándote la versión del mismo. Una vez comprobado esto procedemos a descargarnos composer, escribiendo lo siguiente la consola:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'c5b9b6d368201a9db6f74e2611495f369991b72d9c8cbd3ffbc63edff210eb73d46ffbfce88669ad33695ef77dc76976') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Al terminar de ejecutarse lo anterior nos encontraremos con un archivo composer.phar, ya puedes hacer uso de él, por ejemplo para instalar Laravel:

php composer.phar create-project --prefer-dist laravel/laravel blog

Una última recomendación

Hay un paso adicional, que puedes hacer y probablemente te facilitará la vida a largo plazo. La instalación actual hace que composer (el archivo de extensión .phar) sea visible solo en el directorio que está descargado, sería más cómodo que pudieras usarlo, independientemente del lugar donde te encontraras en tu estructura de directorio, para esto necesitamos mover composer.phar de ubicación de esta forma:

mv composer.phar /usr/local/bin/composer    # Si estás en Linux probablemente necesites anteponer sudo

Una vez hecho esto podremos ejecutarlo solo escribiendo composer, con lo que el comando anterior para instalar laravel quedaría de la siguiente forma:

composer create-project --prefer-dist laravel/laravel blog

Y esto sería todo sobre el tema de instalación este gestor de dependencias para PHP, en próximos artículos estaremos profundizando sobre el uso de esta herramienta.