Premessa

Per sviluppare un progetto in Magento 2 sia come backend developer che come frontend developer la scelta dell’ambiente di sviluppo è fondamentale. Vogliamo essere veloci e produttivi e vogliamo sopratutto passare da un progetto ad un’altro con caratteristiche diverse e magari versioni di Php diverse. In questo articolo descrivo quali sono state le mie scelte e quali altre scelte si possono fare in base al sistema operativo che si usa. Premetto che sono un fan del sistema operativo Linux anche se per lavoro devo usare Mac OS.

Magento 2 utilizzando Mac OS

L’ ambiente di sviluppo ideale per Magento 2 è a nostro avviso Docker. Docker è pensato ed è stato sviluppato sopra il kernel linux. Per questo l’uso con Magento 2 con un sistema operativo Mac Os risulta essere molto lento e a mio avviso poco produttivo. E’ stata la mia prima scelta. Con Magento 1 avevo utilizzato con successo Vagrant.

Dopo la frustrazione per la lentezza del sistema ho cercato di usare qualcosa di diverso, magari che sfruttasse il sistema nativo. Ho quindi pensato di usare ed installare sul sistema lo stack necessario per utilizzare Magento 2. Avrei usato la potenza del mio mac book pro per sviluppare e debuggare progetti Magento 2. Cosa sarebbe successo però se avessi dovuto usare un’altra versione di PHP? Continuando a sviluppare alcuni moduli per Magento 1 avrei dovuto eseguire uno cambio di versione PHP ad ogni cambio di progetto.

Per questo ho iniziato le mie ricerche su web e mi sono imbattuto su un progetto molto interessante. Valet +. Questo progetto permette di utilizzare diverse versioni di php e di fare molto altro creando degli ambienti di sviluppo locali decisamente meglio gestibili. Nel dettaglio Valet + permette di avere:

  • cambio di versione PHP
  • Xdebug (on/off mode)
  • PHP extensions (mcrypt, intl, opcache)
  • Optimized PHP configuration using opcache
  • MySQL (with optimized configuration)
  • Redis
  • Elasticsearch (optional)
  • Mailhog per la gestione dell’invio in locale delle email

L’installazione di questo software è semplice ma è necessario avere alcuni accorgimenti per eseguire il cambio di versione in modo facile e indolore.

Se si usa valet+ lo stack applicativo è completo e si può iniziare ad programmare in modo veloce e produttivo utilizzando se necessario xdebug. (di solito lo lascio acceso di default).

Quale IDE scegliere?

Dal mio punto di vista l’opzione migliore è quella di utilizzare PHP Storm. Per php storm esiste un plugin per Magento 2 che ne facilita l’utilizzo. Si può usare anche Visual Studio Code con dei plug in sia per PHP che per Magento.

Quali altri tools possono essere utili?

La mia cassetta degli attrezzi comprende:

Magerun2

E’ il coltellino svizzero per utilizzare e comprendere Magento. Ha anche un REPL con il quale si può giocare con le classi Magento e con l’object Manager. (https://github.com/netz98/n98-magerun2)

Mage2TV cache clean

Se sei un frontend developer e modifichi spesso l’interfaccia magento 2 ma vuoi lavorare in maniera veloce con le cache abilitate, questo è lo strumento che fa per te. (https://github.com/mage2tv/magento-cache-clean). Ad ogni modifica un runner svuota la cache necessaria per farti vedere la modifica.

Magento 2 utilizzando ambiente Linux

Se usiamo un ambiente Linux l’ambiente ideale è Docker. Con questo ambiente possiamo isolare ogni progetto e lavorare sia su progetti Magento 1 che su progetti Magento 2 in modo veloce e produttivo.

Magento 2 utilizzando ambiente Windows

Senza essere snob o puristi ma l’ambiente Windows non è ideale per sviluppare progetti nello stack Lamp. E’ ottimo per utilizzare gli strumenti di sviluppo Microsoft quali C# asp.net et similia ma non perfetto e corretto per lo sviluppo di Magento 2.

Conclusione

Ho iniziato a sviluppare con Magento 2 dalla versione 2.2.1 e la ricerca di un ambiente di sviluppo veloce e produttivo è stato il primo scoglio da superare. Venendo da esperienza con Vagrant la prima cosa che ho provato è stato riportare l’esperienza di sviluppo con Magento 1 su Magento 2 usando se possibile gli stessi strumenti di sviluppo. Così avevo creato una macchina Vagrant con le caratteristiche necessarie per lo stack Magento 2. Il promo problema è stato quello dello spazio. Ogni macchina mi occupava diversi GB di spazio. Il secondo problema più grave erano le scarsissime perfomance. Così ho provato a passare su docker. La gestione delle macchine virtuali è più efficiente ma le performance con il sistema Mac Os erano scadenti. Ho seguito anche questi suggerimenti: https://docs.docker.com/docker-for-mac/osxfs-caching ma visto che è un problema di architettura ho iniziato a cercare altro. Alla fine mi sono imbattuto sul progetto Valet+ che uso da circa 2 anni con soddisfazione.

Per ragioni pratiche ho dovuto prendere un Mac ma se dovessi tornare indietro sceglierei sicuramente un bel Dell con un sistema operativo Linux.

Su Windows non mi sento di esprimere giudizi in quanto è un sistema operativo che non uso. L’ho usato utilizzando delle macchine virtuali con Linux. (Vagrant box). Per Magento 1 e alcuni progetti custom devo dire che ho lavorato anche in modo produttivo. La cosa che mi manca di più è l’uso della shell. Non credo che userò più questo sistema operativo dopo aver sperimentato Linux e Mac Os.