C’è un nuovo Idephix in città

Idephix è il nostro strumento di automazione dei task, locali e/o remoti. Abbiamo deciso di realizzare un nostro tool per questo tipo di attività perché volevamo qualcosa che fosse estremamente semplice da utilizzare e modificare per uno sviluppatore PHP. Recentemente abbiamo lavorato ad una nuova implementazione dell’ idxfile (il file che contiene le definizioni dei task) che crediamo sia ancora più veloce da scrivere e più flessibile. Nel post ti racconto le novità che abbiamo implementato e condivido con te qualche ragionamento sul perché abbiamo deciso di implementarle. Se ancora non conosci Idephix, questo può essere un buon articolo introduttivo.
In ideato usiamo Idephix per una serie di attività che vanno dall’automazione di task ripetitivi fino al deploy dei progetti. Una prerogativa del progetto è sempre stata la semplicità di definizione dei task da eseguire. Idephix deve essere una libreria veloce da utilizzare e da estendere.

Il nuovo idxfile

Vista l’importanza di questo file abbiamo deciso di dedicare un ulteriore sforzo a migliorarne il formato per renderlo ancora più sintetico, leggibile e flessibile. Dalla release 0.2.0 Idephix è in grado di gestire due differenti files:

  • Il file idxrc.php, che contiene le configurazioni necessarie ai tasks remoti
  • Il file idxfile.php, che contiene solo ed esclusivamente le definizioni dei tasks

idxfile.php

Il file idxfile.php ti consente di definire i tuoi tasks, semplicemente definendo delle funzioni al suo interno, in questa maniera:

è possibile usare un blocco phpDoc standard per definire una descrizione sia per il task che per i parametri del task.

Tutte le funzioni definite all’interno di questo file verranno montate come tasks in Idephix e saranno a tua disposizione per essere eseguite via CLI.

Per eseguire certe operazioni è utile avere accesso ad un’istanza di Idephix stesso. Ottenerla all’interno dei tuoi tasks è semplicissimo, basta definire un parametro $idx e questo verrà iniettato a runtime.

idxrc.php

Tutte le configurazioni, i cosiddetti targets, sono state spostate in questo file dedicato.

Devi implementare questo file solo se hai bisogno di eseguire task remoti.

Al momento Idephix non ha bisogno di nessuna configurazione particolare per eseguire task locali. L’unico scopo di questo file è quello di restituire un’istanza di \Idephix\Config. Ecco un esempio di file idxrc.php:

Nella nostra prima implementazione i target erano definiti come un semplice array. Abbiamo deciso di introdurre un oggetto di configurazione in modo da avere migliori possibilità di evoluzione. Per non sacrificare la semplicità di utilizzo la configurazione si può comunque creare a partire da un array. Se stai già utilizzando Idephix e vuoi migrare alla nuova versione, ti basterà usare il tuo attuale array di configurazione per creare l’oggetto \Idephix\Config.

Retrocompatibilità

Queste in breve le novità della nuova release. Puoi aggiornare Idephix senza necessariamente dover convertire tutti i tuoi idxfile esistenti. Il vecchio formato del file è ancora supportato. È probabile che quando rilasceremo la versione 1.0.0 sceglieremo il formato migliore e dismetteremo il supporto agli altri, ma per il momento siamo ancora in fase sperimentale e abbiamo pensato di tenere aperte entrambe le possibilità.

Cosa volevamo migliorare

Nella prima implementazione di Idephix, sia i task che le configurazioni erano definiti all’interno di un unico file, chiamato idxfile.php, in questa maniera:

La definizione dei tasks di per se era abbastanza semplice, e questo tipo di idxfile è stato sufficiente per un po’. Molti nostri progetti usano ancora questo formato, ma ci sono alcune cose che non ci piacciono:

1) La creazione dell’istanza id Idephix è all’interno del file. Questo vuol dire che istanziare l’oggetto è una responsabilità dell’utente e, peggio ancora, che in caso di evoluzione dell’interfaccia o della firma del costrutture, tutti i file idxfile.php sarebbero da aggiornare. Questo ci è sembrato un limite molto grave e abbiamo voluto risolverlo ora che idephix è ancora giovane. Abbiamo quindi voluto eliminare l’istanza di Idephix dal file idxfile

2) Il file idxfile.php non contiene solo definizioni di task. Anche questo problema è ovvio ad una prima analisi: all’interno dell’ idxfile convivono definizioni di tasks e definizioni delle configurazioni. Sono due responsabilità ben diverse che abbiamo voluto separare, introducendo un file dedicato alle conf (pratica molto diffusa in tool di questo tipo).

3) Il file idxfile.php è troppo complesso.. Il file di definizione dei task è l’interfaccia tra Idephix è i suoi utenti. Deve essere il più semplice possibile, da scrivere, da leggere e, in generale, da utilizzare. Risolti i primi due problemi la cosa più semplice che ci è venuta in mente per identificare un task (che se ci pensi bene non è altro che un pezzo di codice da eseguire) è stata una funzione.

Con questi 3 problemi principali in mente abbiamo pensato e implementato il refactoring che ti ho già descritto ad inizio post. Che ne pensi del nuovo idxfile? Potevamo risolvere le stesse cose in qualche altro modo? Le PR sono sempre ben accette 😉

Noi stiamo già lavorando ad altre evoluzioni che permettano, ad esempio, di assemblare tasks da idxfile differenti in modo da poter definire delle sorte di recipes da riusare in più progetti.

Tu pensi che inizierai ad utilizzare Idephix nel tuo prossimo progetto?