A titolo di esempio, dopo l'introduzione della lezione precedente, procediamo alla creazione di backend in linguaggio Python con Firebase Studio. Il caso sarà utile per vedere come si può realizzare velocemente un motore server in uno dei linguaggi più apprezzati ed usati del web ma anche per sperimentare con mano quanto il vibe coding possa essere impiegato anche in questo settore. Il nostro scopo sarà ancora non tanto la creazione del backend in sé stesso, quanto saggiare la maturità del dispositivo di Firebase Studio per la traduzione di comandi in linguaggio naturale in codice passando per il prompt.
Impostazione del progetto
Partiamo dall'home page di Firebase Studio e clicchiamo sull'immagine riportante il logo del linguaggio Python e l'etichetta Python Flask:

Avviare un'applicazione Python Flask
Alla richiesta delle caratteristiche di base del progetto richiediamo un template per server API, con pip come package manager e nome FirstAPIServer:

Impostazioni del progetto
La struttura del progetto che viene approntata riguarda le parti principali di un progetto Flask:
- una pagina
main.pyche contiene un codice di base per l'avvio del server e l'esecuzione di un metodo di test hello world:
import os from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): """Example Hello World route.""" name = os.environ.get("NAME", "World") return f"Hello {name}!" if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 3000))) - una cartella .idx per l'organizzazione del progetto;
- un virtual environment Python per la gestione isolata delle dipendenze nonché il file
requirements.txtper la gestione delle stesse; - un file
devserver.shfinalizzato all'avvio di un server di test. Contiene essenzialmente due righe che consistono nell'attivazione dell'ambiente virtuale e nell'avvio di un server flask in locale.
Creazione di metodi con l'Intelligenza Artificiale
Arriviamo al punto di maggior novità: facciamoci aiutare da Gemini, l'AI di Google, a creare un nuovo metodo che permetta di ottenere l'ora esatta di uno specifico fuso orario..
La nostra richiesta nel prompt a supporto è la seguente: aggiungi un metodo al server che fornisca l'ora esatta relativa al fuso orario che indico.
Subito Firebase Studio si mette al lavoro e attua delle azioni proponendo la modifica e chiedendo la nostra approvazione. Proporrà infatti il permesso di aggiungere tra le dipendenze la libreria pytz con cui ha deciso di gestire le timezone e di modificare il programma per l'apparizione di un metodo che, nel nostro caso, sarà:
@app.route("/time")
def get_time():
"""Returns the current time in a specified timezone."""
timezone_name = request.args.get('tz')
if not timezone_name:
return "'tz' parameter is required", 400
try:
tz = pytz.timezone(timezone_name)
now = datetime.now(tz)
return now.strftime("%Y-%m-%d %H:%M:%S %Z")
except pytz.UnknownTimeZoneError:
return "Invalid timezone", 400
Ha scelto di creare un metodo collegato all'URL /time che ottiene mediante l'argomento in querystring tz il fuso orario di riferimento (scelta saggia in quanto questo contiene uno slash che verrebbe confuso con una porzione di URL stesso).
Il server sarà lanciato anche in esecuzione e potremo sfruttare il prompt di Gemini anche per farci aiutare nella prova del codice. Ad esempio, chiedendo forniscimi una riga di test per richiedere l'ora attuale a New York otterremo come risposta il comando:
curl "http://localhost:5000/time?tz=America/New_York"
con, in sovrimpressione, dei pulsanti per la copia del comando (da provare nel terminale che appare al di sotto del codice) o la diretta esecuzione da parte di Firebase Studio.
Incaricando direttamente il nostro ambiente di eseguire il comando ne otterremo i risultati direttamente nel terminale senza digitare nulla. Nel caso dell'esempio che abbiamo svolto ci ha indicato l'ora corrente nella città di New York.
Come comportarci con il prompt?
Anche in questo caso il test ci ha dimostrato che il prompt è in grado di eseguire correttamente i comandi che inviamo ma ha messo anche in evidenza punti salienti che devono essere attuati nel vibe coding. Innanzitutto, non temiamo di "disturbare" il motore AI che abbiamo a disposizione. Teniamo sempre presente che esso è messo lì per darci il massimo supporto. Ad esempio, in prima battuta ci ha proposto comandi curl sulla porta 3000 mentre il nostro server era in esecuzione sulla 5000.
Si sarebbe semplicemente trattato di copiarli e modificarli ma non è necessario: basta ricordare a Gemini da ora fornisci tutti i comandi di test come chiamate alla porta 5000 e da lì in poi verranno aggiornati tutti gli esempi proposti per poter essere così direttamente eseguiti con un click. Non si tratta di pigrizia nostra ma di accompagnare correttamente l'assistente nel suo lavoro di supporto al nostro progetto: non stiamo facendo altro che aiutarlo a lavorare meglio.
Qualora, a seguito delle modifiche, fosse necessario arrestare, riavviare o aggiornare l'ambiente possiamo anche in questo caso fare riferimento a Gemini che, da come abbiamo sperimentato, non solo ci offre i comandi da eseguire ma ci supporta anche nella gestione di eventuali errori.
Anche l'output stesso, che viene prodotto sia con errori sia corretto, può essere nuovamente passato al prompt che sarà sempre in grado di interpretarlo ed illustrarcelo. Il suo primo "istinto", come ogni assistente AI, sarà quello di fornirci spiegazioni sul contenuto che gli abbiamo passato.
Se vuoi aggiornamenti su Firebase Studio: creazione di un backend in Python inserisci la tua email nel box qui sotto: