Come sfruttare gli script Composer per automatizzare il workflow PHP/Laravel


Molti sviluppatori PHP/Laravel usano Composer solo per installare dipendenze, ma pochi sfruttano i vantaggi offerti dagli script Composer. Gli script permettono di automatizzare task ricorrenti come test, analisi statica del codice, refactoring o setup iniziale del progetto, semplificando il workflow e riducendo errori.
Laravel stesso ne definisce alcuni, in modo da semplificare la configurazione del progetto o l’esecuzione di determinati task.

Cos’è uno script Composer

Nella sezione scripts di un file composer.json è possibile definire script personalizzati. Ad esempio:

{
  "scripts": {
    "test": "XDEBUG_MODE=off ./vendor/bin/pest --parallel"
  }
}

Dopo aver definito lo script test, se da shell esegui

composer test

verranno eseguiti i test (unit, feature, ecc.) del progetto, in questo caso utilizzando Pest, in parallelo e disabilitando XDebug (che nel mio ambiente locale è sempre attivo - viceverse, potresti tenerlo sempre disattivato e abilitarlo solo all’occorrenza).

Perché usare gli script Composer?

I vantaggi sono molteplici:

  • ✅ consistenza: tutti i membri del team di sviluppo usano gli stessi comandi
  • ⚙️ automazione: niente più comandi lunghi, dimenticati o con parametri errati
  • 🧩 integrazione CI/CD: gli script si integrano facilmente nelle pipeline di GitHub Actions, GitLab CI, ecc.
  • 💡 pulizia del progetto: evita di aggiungere al repository file shell duplicati e mantiene la configurazione nel composer.json

Consigli pratici

  • per i nomi degli script, non usare nomi di librerie, prodotti o tecnologie, ma termini che rappresentino il compito che si vuole eseguire. Il motivo è presto detto: se oggi usi una libreria per eseguire quel task, domani potresti sostituirla con un’altra che esegue lo stesso compito (magari meglio); in quel caso, dovresti cambiare il nome dello script.

    Esempio:

    ❌ `composer phpunit`
    ❌ `composer pest`
    ✅ `composer test`

    Altro esempio:

    ❌ `composer rector`
    ✅ `composer refactor`
  • utilizza gli stessi nomi di script in tutti i progetti PHP/Laravel, in modo da ritrovarli ovunque e poterli usare facilmente e con familiarità

  • se un progetto non prevede ad esempio l’uso di PHPStan o di Rector, non aggiungere gli script corrispondenti al file composer.json: renderli disponibili potrebbe confondere gli altri sviluppatori

  • se hai XDebug attivo, usa XDEBUG_MODE=off a inizio comando per disabilitarlo e velocizzare l’esecuzione (ad esempio della suite di test o dell’analisi statica)

Esempi pratici di script utili

Analisi statica del codice

  • analyse
"analyse": "XDEBUG_MODE=off ./vendor/bin/phpstan analyse --memory-limit 2G --ansi"

Esegue l’analisi statica del codice con PHPStan.

  • analyse-clear-cache
"analyse-clear-cache": "./vendor/bin/phpstan clear-result-cache"

Elimina la cache di PHPStan (a volte si rende necessario in caso di problemi con l’analisi statica).

Refactoring del codice

  • refactor
"refactor": "XDEBUG_MODE=off rector process --ansi",

Esegue il refactoring del codice tramite Rector.

  • refactor-dry
"refactor-dry": "XDEBUG_MODE=off rector --dry-run --ansi"

Esegue Rector in modalità dry run, senza modificare i file: mostra solo quali modifiche verranno apportate.

Formattazione del codice

  • format
"format": "vendor/bin/pint --dirty --parallel --ansi"

Esegue la formattazione del codice con Pint solo sui file modificati e in parallelo.

Test e code coverage

  • test
"test": "XDEBUG_MODE=off ./vendor/bin/pest --parallel --bail --colors=always"

Esegue i test con Pest. I test vengono eseguiti in parallelo e se uno fallisce, il resto viene interrotto.

  • test-architecture
"test-architecture": "XDEBUG_MODE=off ./vendor/bin/pest --parallel --bail --group=architectural --colors=always"

Esegue solo gli architecture test con Pest.

  • test-coverage
"test-coverage": "php -d memory_limit=-1 ./vendor/bin/pest --coverage --min=80"

Esegue i test con code coverage e mostra il report. Se la coverage è inferiore all’80%, il comando fallisce.

  • type-coverage
"type-coverage": "XDEBUG_MODE=off ./vendor/bin/pest --type-coverage"

Esegue la type coverage con Pest per segnalare in quali file sia possibile tipizzare parametri e valori di ritorno.

Per concludere

Gli script Composer sono un modo semplice ma potente per standardizzare e velocizzare lo sviluppo in PHP e Laravel. Inizia definendo pochi comandi chiave e vedrai subito la differenza nel tuo flusso di lavoro quotidiano.

Aiuteranno anche gli altri sviluppatori nel tuo team e forniranno un metodo standardizzato per eseguire i task necessari.

Quelli sopra riportati sono quelli che utilizzo più frequentemente; definiscili in base alle tue esigenze e a quelle del tuo team.