Personal tools
Cookiecutter: uno strumento per sfornare nuovi progetti a raffica

Ecco come hanno creato veramente i cloni

Oct 01, 2014

Cookiecutter: uno strumento per sfornare nuovi progetti a raffica

Come un bravo pasticciere, con gli stampini giusti si possono creare nuovi progetti facilmente e con semplici comandi. Io ci ho provato con Flask ed è venuto buonissimo.

Ho già parlato diverse volte di come la vita del programmatore migliora notevolmente con il riuso di codice (gli snippets per Sublime Text) e l'utilizzo di strumenti che velocizzano alcuni processi, come la creazione di un nuovo progetto (se vi ricordate, avevo scritto dell'ottimo mr.bob).

I generatori automatici di template non servono solamente a creare una struttura di base in un solo comando, ma sono anche molto utili per rispettare i vari standard e le best practices imposti dai vari framework e linguaggi.

Per un progetto personale (sì, la solita applicazione di gestione del Fantacalcio che ogni anno rifaccio per sperimentare cose nuove) avevo la necessità di creare un'applicazione Flask da zero.

Avevo bisogno di qualcosa di abbastanza strutturato, quindi ho iniziato a documentarmi sul pattern da utilizzare per suddividere i vari moduli.
Essendo pigro (e abituato ai vari Paste e mr.bob), però, mi sarebbe piaciuto anche trovare qualche strumento che facesse tutto da solo.

Ho trovato diversi modelli già pronti su github, dove bastava semplicemente clonarli e iniziare a lavorare, ma alla fine ho optato per provare un template ad hoc creato per Cookiecutter. Da buona tartaruga rossa non potevo scegliere uno strumento più azzeccato, per mantenere alta la nostra fama di mangioni!

Cookiecutter non è nient'altro che l'ennesimo strumento per generare progetti in automatico (scritto in python) partendo da uno dei vari template disponibili, chiamati non a caso cookiecutters.
Non entro nel dettaglio di cookiecutter, ma mi è piaciuto molto come progetto. Ha una buona documentazione e diversi "stampini" per svariati framework e linguaggi.
Ovviamente ognuno può creare il proprio template seguendo alcune semplici regole di formattazione illustrate nella documentazione, e in questo modo rendere disponibile alla comunità una nuova risorsa.
E' possibile infatti generare scheletri sia da template locali, che da modelli presi direttamente da github.

Il template che ho utilizzato è ovviamente cookiecutter-flask che permette di creare un'app Flask completa di tutto:

  • Bootstrap 3 e Font Awesome 4 con template di esempio
  • Supporto ai database con Flask-SQLAlchemy
  • Gestione utenti con già un modello per gli utenti predefinito
  • Supporto alla migrazione dei database con Flask-Migrate
  • Form per il login e la registrazione degli utenti predefiniti con Flask-WTForms
  • Flask-Login per l'autenticazione
  • Flask-Bcrypt per l'hashing delle password
  • Procfile di base per il deploy su servizi PaaS (Heroku per esempio)
  • pytest e Factory-Boy per i test (con già dei tests di esempio inclusi)
  • Uno scrip manage.py di base.
  • CSS and JS minification utilizzando Flask-Assets
  • Supporto a bower opzionale
  • Caching con Flask-Cache
  • Debug toolbar
  • Esempi di best practices da seguire come i BlueprintsApplication Factory.

Tutto questo, lanciando il semplice comando

$ cookiecutter https://github.com/sloria/cookiecutter-flask.git

e rispondendo ad alcune domande utili ad impostare il nome del progetto e altre variabili.

Utilizzare questo template si è rivelato molto utile per due ragioni: la prima, è che mi ha fatto risparmiare tempo e fatica (se avessi dovuto fare tutto da zero ci avrei messo di sicuro molto di più), e la seconda (più importante) è che in questo modo ho anche dato una rispolverata alle best practices di Flask (non lo guardavo da un paio d'anni ormai) sia per quanto riguarda lo stile di programmazione che per quanto riguarda quali sono i plugin da utilizzare per determinati casi d'uso (gestione database o gestione utenti per esempio) e come usarli al meglio.

Filed under: , , ,
comments powered by Disqus