Unnikked - Esperienze personali in campo informatico

Composer – il gestore di paccchetti di PHP

Composer è un gestore di pacchetti per PHP, simile a pip per Python, gem per ruby e npm per Node. Permette di definire un file JSON per elencare le dipendenze del codice cercando di risolvere questi vincoli per l’utente scaricando e installando i pacchetti software necessari.

composer-cli

Installare Composer

Per installare una istanza del gestore dei pacchetti bisogna prima posizionarsi nella cartella di progetto ed eseguire:

curl -sS https://getcomposer.org/installer | php

Per convenienza è possibile installarlo globalmente:

mv composer.phar /usr/local/bin/composer
chmod +x composer

Come utilizzare composer

Composer ha due principali categorie di dipendenze che può gestire: “require” e “require-dev”. Le dipendenze elencate come “require” sono installate sempre, mentre le dipendenze “require-dev” sono solo installare quando richieste esplicitamente. Di solito sono strumenti utilizzati durante lo sviluppo, come PHP_CodeSniffer. La linea seguente mostra un esempio di come installare Guzzle, una libreria HTTP popolare.

php composer.phar require guzzle/guzzle

installing-guzzle

Per installare uno strumento solo per motivi di sviluppo, bisogna aggiungere il flag --dev:

php composer.phar require --dev 'sebastian/phpcpd'

Ciò installa PHP Copy-Paste Detector, un altro strumento per misurare la qualità del codice ed è solo una dipendenza in fase di sviluppo.

Install o update

La prima volta che si esegue composer install installerà le librerie e le dipendenze necessarie, basato sul file composer.json. Quando termina crea un file lucchetto chiamato composer.lock. Questo file contiene una lista di dipendenze che il gestore trova per noi e le versioni esatte. Perciò ogni qualvolta che cercheremo di installare le dipendenze, guarderà in questo file lucchetto e installerà le versioni specificate.

installing-monolog

Il comando composer update è più aggressivo. Ignora il file composer.lock (se presente) e cerca di trovare le versioni più aggiornate di ogni dipendenza che soddisfa i vincoli nel file composer.json. Genera un nuovo file composer.lock al termine.

Autoloading

Entrambi i comandi composer install e update genereranno un autoloader che indicherà a PHP dove trovare tutti i file necessari per usare le librerie che abbiamo appena installato. Per usarlo, basterà usare questa linea (di solito inserita nel file di bootstrap che viene eseguito in ogni richiesta):

require 'vendor/autoload.php';

Esempio

Supponendo di avere un file di configurazione come il seguente:

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

una volta eseguito il comando composer install è possibile utilizzare direttamente la libreria come mostrato da questo codice di esempio:

require 'vendor/autoload.php';

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));

$log->addWarning('Foo');

Conclusioni

Avere a disposizione un gestore di pacchetti ci aiuta a risparmiare tempo nella risoluzione delle dipendenze di un software. Oggi giorno si tendono a sviluppare applicazioni sempre più complesse che utilizzano moduli software già esistenti, ben sviluppati e robusti. Una risoluzione manuale delle dipendenze non solo è noiosa ma anche soggetta ad errori, ecco come i gestori di pacchetti ci semplificano la vita.