Análisis detallado de la CLI de Gemini

1. Introducción

be8ebdfe42ca39ac.png

¡Hola! ¡Me llamo Sparky! Me alegra que hayas podido venir. Viajé en cremallera desde un clúster de GKE en us-central1 para estar aquí hoy. Te damos la bienvenida a este codelab.

Pasé toda mi vida correteando por los flujos de datos de Google Cloud, y lo vi todo. Los vi a ustedes, los arquitectos y los ingenieros, crear cosas increíbles. Pero también te he visto quedar atrapado en las zarzas. ¡Sabes de lo que hablo! Esa sensación de cambio de contexto cuando depuras un Pod en GKE Estás alternando entre kubectl logs, la consola de GCP para verificar el estado del nodo, tu IDE para consultar el código fuente que se implementó y una pestaña del navegador con la documentación oficial de Kubernetes para los hooks del ciclo de vida del pod. Cada salto es una interrupción del enfoque.

Y las herramientas complejas. gcloud, kubectl, terraform… cada uno con su propio DSL y una gran cantidad de marcas. Esto lleva a una constante búsqueda de documentación. Terminas buscando ese comando gcloud perfecto con la combinación correcta de marcas --filter y --format para obtener los datos que necesitas. Es como intentar encontrar una tuerca específica en un bosque de millones. Y ni hablar de las tareas repetitivas. Te vi escribir el mismo Dockerfile y cloudbuild.yaml para un nuevo servicio de Python tantas veces que el código probablemente tenga déjà vu.

Bueno, estoy aquí para mostrarte una mejor manera. Un sendero secreto a través del bosque. ¡De eso se trata Gemini CLI!

¿Qué es Gemini CLI?

Entonces, ¿cuál es este atajo mágico que me entusiasma tanto?

Piensa en Gemini CLI como tu compañero personal en la nube, directamente en tu terminal. Es una conversación, una asociación. Es contextual, que es una forma elegante de decir que no solo escucha, sino que comprende. Puede leer tus archivos, aprender las convenciones de tu proyecto (por ejemplo, si usas tabulaciones o espacios) y descubrir lo que intentas hacer. Es como si pudiera oler las bellotas que intentas recolectar.

Arquitectura de alto nivel (¡echemos un vistazo!)

Entonces, ¿cómo funciona todo esto? Es una combinación de algunas funciones geniales que trabajan en armonía:

  1. Un potente modelo de lenguaje: Este es el cerebro. Específicamente, es un modelo multimodal grande entrenado por Google. "Multimodal" significa que no solo comprende texto, sino también la estructura y el significado del código. Esto le permite razonar sobre tu software, no solo leerlo.
  2. Tu contexto local: Esto es fundamental. La CLI de Gemini se ejecuta como un proceso en tu máquina local, con los mismos permisos que tu cuenta de usuario. Esto significa que puede acceder a tu sistema de archivos para brindarte ayuda específica del proyecto. No es un servicio en la nube lejano que adivina tu código, sino que está aquí contigo.
  3. Un ecosistema de herramientas: Es la forma en que el modelo interactúa con el mundo. Tiene un conjunto bien definido de funciones a las que puede llamar, como read_file o run_shell_command. Piensa en ella como una API segura. El modelo decide qué hacer y qué herramienta usar, y, luego, genera un bloque tool_code para ejecutarlo. Esto hace que sus acciones sean predecibles y confiables.
  4. Ejecución de comandos de Shell: ¡Esta es la verdadera magia! Puede ejecutar cualquier comando en una subshell de bash -c <command>. Captura el stdout, el stderr y el exit code. ¡Esto es increíble! Esto significa que Gemini CLI puede ejecutar un comando, verificar si falló y, luego, intentar corregirlo según el mensaje de error.
  5. La red de seguridad: Esta es mi parte favorita. Antes de que se ejecute ese bloque tool_code, el cliente de la CLI te mostrará el comando o código exact y te pedirá que lo confirmes. Es una verificación del cliente, por lo que tienes la última palabra antes de que algo afecte tu sistema. Siempre tienes el control.

No es solo un chatbot, ¡es un asistente! Un asistente activo en tu aventura de programación.

El concepto clave: Declarativo vs. Imperativo

El cambio más grande y sorprendente es que pasamos de decirle a la computadora cómo hacer algo a decirle qué quieres.

  • Imperativo (el camino viejo y espinoso): Debes indicar cada paso. Debes ser experto en el lenguaje específico del dominio de la herramienta. Como este monstruo de comando:
    gcloud compute instances create my-vm --project=my-project --zone=us-central1-a --machine-type=e2-medium --image-family=debian-11 --image-project=debian-cloud --metadata-from-file startup-script=./startup.sh --tags=http-server,dev
    
    
    ¡Uy! ¡Mira todo eso! Debes conocer la sintaxis del tipo de máquina, la familia de imágenes, los metadatos y las etiquetas. Si olvidas una parte, recibirás un error críptico.
  • Declarativa (¡el atajo de Sparky!): Solo tienes que decir lo que quieres en inglés sencillo.

Create a new e2-medium VM for my web server in us-central1, run the startup.sh script, and tag it for http traffic.

Eso es todo. Gemini analiza tu solicitud, la asigna a los parámetros de la herramienta gcloud, determina la sintaxis correcta para cada marca y crea ese gran comando aterrador por ti. Luego, te la presenta para que la apruebes. Se trata de permitirte pensar en el panorama general, no de memorizar marcas de línea de comandos.

Extiende el poder de Gemini: Introducción a las extensiones de la CLI

Si bien la Gemini CLI es una herramienta potente lista para usar, su verdadero potencial se desbloquea a través de las extensiones. Las extensiones son paquetes de instrucciones, herramientas y comandos personalizados que mejoran la funcionalidad de la CLI y te permiten adaptarla a tus necesidades y flujos de trabajo específicos.

Cómo buscar e instalar extensiones

La CLI de Gemini tiene un ecosistema en crecimiento de extensiones creadas por Google y desarrolladores externos. Puedes explorar el directorio oficial de extensiones en geminicli.com/extensions.

Para instalar una extensión, puedes usar el comando gemini extensions install con la URL del repositorio de Git de la extensión. Por ejemplo, para instalar la extensión oficial de Cloud SQL para PostgreSQL, ejecutarías el siguiente comando:

gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql

Bien, basta de charla. ¡Vamos a ensuciarnos las patas y probar esta cosa!

2. Antes de comenzar

86dffda616ab7a1d.png

¡Hola, futuros magos de la nube! Sparky, a tu servicio. Antes de comenzar nuestra gran aventura, debemos asegurarnos de que tu entorno de taller esté listo. Piensa en ello como preparar nuestras mochilas con todas las herramientas adecuadas y bellotas mágicas antes de adentrarnos en el bosque. ¡Sígueme!

Si ya tienes un proyecto de Google Cloud, puedes usar la CLI de Gemini en Google Cloud Shell, ya que viene preinstalada. También puedes seguir estos pasos para configurarlo en tu máquina local.

Paso 1: Lo básico (requisitos previos)

Todo buen aventurero necesita una base sólida. Antes de instalar Gemini CLI, debes tener algunas cosas configuradas en tu máquina local.

  1. SDK de Google Cloud (gcloud): Este es el kit de herramientas principal de Google Cloud. La CLI de Gemini forma parte de esta familia.
  • Verifica si está instalado: Ejecuta gcloud --version. Si ves un número de versión, todo está listo.
  • Si no está instalado: Sigue las instrucciones oficiales en cloud.google.com/sdk/docs/install.
  1. Git: Lo necesitaremos para clonar el repositorio del lab práctico.
  • Verifica si está instalado: Ejecuta git --version.
  • Si no está instalado: Puedes obtenerlo en git-scm.com/downloads.
  1. Proyecto de GCP y autenticación:
  • Asegúrate de tener un proyecto de Google Cloud con la facturación habilitada. Esto es muy importante.
  • Accede a tu Cuenta de Google ejecutando el siguiente comando:
gcloud auth login
  • Configura tu proyecto para la sesión. Busca el ID de tu proyecto en GCP Console y ejecuta el siguiente comando:
gcloud config set project YOUR_PROJECT_ID

(Reemplaza YOUR_PROJECT_ID por el ID de tu proyecto).

  1. Node.js versión 20 o posterior

Paso 2: ¡Haz magia! (Instalación de Gemini CLI)

Bien, ahora que ya vimos lo básico, es hora de ver el evento principal. Instalaremos Gemini CLI.

Ejecuta al instante con npx

# Using npx (no installation required)
npx https://github.com/google-gemini/gemini-cli

Instala de forma global con npm

npm install -g @google/gemini-cli

Instalación global con Homebrew (macOS/Linux)

brew install gemini-cli

Cómo verificar la versión de Gemini

gemini --version

Deberías ver un número de versión. Esto confirma que la instalación se realizó correctamente.

Paso 3: Carga (configuración)

Ahora que Gemini CLI está instalado, debemos darle las llaves del reino. Primero, ejecuta el comando gemini en la terminal para iniciarla. Deberías ver la siguiente pantalla:

9378d804bc647191.png

Para mayor simplicidad, puedes autenticarte con tu Cuenta de Google, lo que te brinda acceso a Gemini 2.5 Pro con una ventana de contexto de 1 millón de tokens y hasta 60 solicitudes por minuto y 1,000 solicitudes por día sin necesidad de administrar una clave de API.

Si quieres acceder a modelos específicos de Gemini o actualizar a límites más altos cuando sea necesario, usa la clave de API de Gemini como método de autenticación.

Para los equipos empresariales y las cargas de trabajo de producción que ya tienen configurados un proyecto de Google y una cuenta de facturación, usa Vertex AI para obtener seguridad y cumplimiento avanzados.

Según la opción que elijas, se te indicarán los próximos pasos para configurar la autenticación. Consulta la documentación de Gemini CLI para obtener más detalles sobre estas opciones.

Si planeas usar la plataforma Vertex AI de Google Cloud, primero sal de la CLI de Gemini presionando Ctrl + C dos veces y configuremos las variables de entorno necesarias.

Independientemente del método de autenticación que uses, por lo general, deberás establecer las siguientes variables: GOOGLE_CLOUD_PROJECT y GOOGLE_CLOUD_LOCATION.

Para configurar estas variables, haz lo siguiente:

# Replace with your project ID and desired location (e.g., us-central1)
export GOOGLE_CLOUD_PROJECT="YOUR_PROJECT_ID"
export GOOGLE_CLOUD_LOCATION="YOUR_PROJECT_LOCATION"

Ahora, accedamos a Google Cloud:

gcloud auth application-default login

Una vez que te hayas autenticado con el método anterior, vuelve a iniciar Gemini CLI ejecutando el comando gemini en la terminal. En las opciones de autenticación, selecciona Vertex AI y listo.

Paso 4: ¡La prueba de Spark! (Verifica tu configuración)

¡Este es el momento de la verdad! Veamos si todo funciona. Ejecuta estos comandos para asegurarte de que todas las luces estén verdes.

  1. Escribe la siguiente instrucción:
What is my current directory?

La CLI de Gemini debería responder indicándote tu directorio de trabajo actual. Esta prueba verifica el modelo de lenguaje principal y la integración del shell.

15a12d7b3fdd2d83.png

  1. Prueba la conexión a GCP:
list my gcs buckets

Si tienes buckets de GCS, deberían aparecer en la lista. De lo contrario, te indicará que no hay ninguna. Esto confirma que se conectó correctamente a tu proyecto de GCP.

Paso 5: ¡Dale más superpoderes! (Instalación de extensiones)

Ahora, mejoremos las capacidades de Gemini CLI instalando algunas extensiones que serán útiles más adelante en el lab.

Cloud Run

gemini extensions install https://github.com/GoogleCloudPlatform/cloud-run-mcp

Seguridad de Gemini CLI

gemini extensions install https://github.com/gemini-cli-extensions/security

gcloud

gemini extensions install https://github.com/gemini-cli-extensions/gcloud

Cloud SQL para PostgreSQL

gemini extensions install https://github.com/gemini-cli-extensions/cloud-sql-postgresql

Si todos esos comandos funcionaron, oficialmente estás listo para el taller. Tu entorno está configurado y listo para que comiences a aumentar tu productividad. ¡Nos vemos en el primer lab!

3. Conceptos básicos e interacción con el espacio de trabajo local

a7bf3a905d8e2638.png

Bien, ¿todo listo para ensuciarte las patas? Ahora veremos las herramientas reales que incluye tu nuevo cinturón de herramientas de Gemini. Los considero mis superpoderes para explorar y compilar en la nube. Veamos cómo funcionan.

Capacidades principales

Agrupo mis poderes en dos categorías: ver lo que hay y, luego, hacer cosas.

Comprende tu entorno (¡Mis súper sentidos!)

Antes de comenzar a construir un nido nuevo, debes revisar el árbol, ¿verdad? Estas herramientas sirven para conocer el terreno.

  • list_directory: Esta es mi herramienta básica de "exploración". Es un wrapper sencillo alrededor del listado de directorios estándar a nivel del SO. Sin embargo, lo interesante es que el modelo puede analizar este resultado estructurado para tomar decisiones, como explorar un subdirectorio llamado src.
  • glob: ¡Este es mi "buscador de bellotas"! Utiliza patrones glob estándar, como *, **, ? y [], que ya conoces de elementos como .gitignore. Por lo tanto, puedes preguntar "Busca todos los archivos *.py en el directorio app" usando el patrón app/**/*.py. Es una forma eficaz de recopilar un conjunto específico de archivos para que el modelo los analice.
  • search_file_content: ¡Esta es mi visión de rayos X! Utiliza expresiones regulares (regex) completas para sus búsquedas, no solo coincidencias de cadenas simples. Esto es increíblemente poderoso. Puedes pedirle que encuentre patrones complejos, como "Encuentra todas las rutas de Flask que usan un método POST", lo que podría generar una regex como app\.route\(.*methods=\['POST'\].*\). Devuelve la ruta de acceso del archivo, el número de línea y la línea coincidente, lo que le proporciona al modelo todo el contexto que necesita.
  • read_file: Una vez que encuentres un archivo interesante, querrás abrirlo. read_file está optimizado para esto. Puedes leer un archivo completo o, en el caso de archivos grandes, puedes usar los parámetros offset y limit para leerlo en fragmentos. Esto significa que el modelo puede analizar de manera eficiente incluso archivos de registro enormes sin que se agote el tiempo de espera.

De la comprensión a la acción (¡es hora de construir!)

Bien, ya exploraste el terreno. Ahora es momento de construir tu nido. Estas herramientas te permiten realizar cambios y completar tareas.

  • **write_file**: ¿Necesitas crear un archivo nuevo desde cero? write_file es una operación atómica que escribe el contenido completo que proporcionas en una ruta de acceso especificada. Es ideal para crear la estructura de nuevos módulos o crear un Dockerfile desde cero según las necesidades de tu proyecto.
  • **replace**: Esta herramienta es para cambios quirúrgicos. No se trata solo de una simple búsqueda y reemplazo. Proporcionas un old_string y un new_string. Para que esto funcione de forma segura, el old_string debe ser un fragmento único del archivo, por lo general, con varias líneas de contexto antes y después de la parte que cambias. Esto garantiza que solo cambiemos la parte exact del código que deseas.
  • **run_shell_command**: ¡Este es el potenciador definitivo! Ejecuta el comando determinado en un subshell de bash -c <command>. El modelo recupera el stdout, el stderr y el exit code. Esto es fundamental para crear flujos de trabajo. El modelo puede ejecutar un terraform plan, leer el resultado y, si el plan es exitoso (código de salida 0), puede preguntarte si debe aplicarlo.

La red de seguridad (mi promesa para ti)

Ahora, ejecutar comandos puede ser aterrador. ¡Entiendo! Por eso, la red de seguridad es tan importante. Cuando el modelo genera un bloque tool_code que contiene una llamada a run_shell_command o write_file, el cliente de la CLI de Gemini la intercepta. Te muestra el comando exacto o el contenido completo del archivo que se escribirá y te da un mensaje [s/n]. No sucede nada sin tu aprobación explícita. Siempre tienes el control.

4. Explora un proyecto

314faf951de66388.png

Objetivo: Usar la CLI de Gemini para comprender una base de código desconocida sin salir de la terminal

Situación: Eres un desarrollador nuevo y necesitas ponerte al día con este proyecto rápidamente.

Tarea 0: Configuración: Clona el proyecto

Primero, necesitamos obtener el código. Se oculta en un repositorio público en GitHub, en un "árbol" llamado quickpoll. Pidámosle a la CLI de Gemini que lo clone por nosotros. Antes de hacerlo, creemos un directorio de trabajo y lancemos Gemini CLI desde ese directorio:

mkdir workdir
cd workdir
gemini

Ahora, escribe esta instrucción:

clone the github repository from the URL: https://github.com/gauravkakad-google/quickpoll.git

46c2feb0d1184db7.png

Gemini comprenderá que "clonar" significa usar el comando git clone. Se generará una llamada a la herramienta run_shell_command con algo como git clone https://github.com/gauravkakad-google/quickpoll.git. Una vez que lo apruebes, se descargará el repositorio.

Ahora, sal de Gemini CLI presionando ctrl+c dos veces, navega al repositorio de ejemplo y vuelve a iniciar Gemini CLI:

cd quickpoll
gemini

¡Genial! Ahora que estamos dentro del árbol del proyecto, podemos comenzar a explorar.

Tarea 1: Enumera todos los archivos del proyecto

Ahora que entramos, vamos a hacer un mapa de todo el bosque. Queremos ver todos los archivos. Pregúntale a Gemini lo siguiente:

List all the files in the project.

Es probable que Gemini use la herramienta glob con el patrón **/*. Esto enumera de forma recursiva cada archivo, lo que te brinda un manifiesto completo de la base de código. Es un excelente primer paso para comprender la estructura del proyecto.

Tarea 2: Busca todos los archivos que importan "google.cloud.sql.connector"

Está bien, tengo curiosidad. ¿Dónde se comunica este proyecto con Google Cloud Storage? Hagamos un poco de trabajo de detective. Pregunta lo siguiente:

Find all files that import the 'google.cloud.sql.connector' library.

568fdb8ff4889c5d.png

Con su poder de search_file_content, Gemini encontrará los archivos exactos que contienen esa instrucción de importación. Esto reduce de inmediato tu enfoque a las partes del código que controlan la interacción con Cloud SQL. En este proyecto, debería encontrar backend/main.py.

Tarea 3: Muéstrame el contenido del Dockerfile principal

Veo un Dockerfile. Ese es el plano de nuestro contenedor. Echemos un vistazo al interior. Solo debes preguntar:

Show me the contents of the main Dockerfile.

e49a83b3efbcf807.png

Gemini usará read_file para mostrar el Dockerfile. Puedes analizar la imagen base (FROM), las dependencias que se instalan (RUN pip install...) y el comando final (CMD). Esto te informa sobre el entorno de ejecución de la aplicación.

Tarea 4: ¿Cuál es el propósito del archivo main.py?

Muy bien, es hora de ver el corazón del código. Pidámosle a Gemini que nos guíe. Di lo siguiente:

What's the purpose of the `main.py` file?

81d480c285285150.png

Aquí es donde la CLI de Gemini realmente se destaca. Primero, llamará a read_file en backend/main.py. Luego, su modelo de lenguaje multimodal analizará el código de Python. Identificará que es una aplicación de FastAPI que proporciona una API de REST para una aplicación de encuestas. Luego, se explicarán los extremos de la API y su funcionalidad. Te ahorra el tiempo de tener que leer y descifrar todo por tu cuenta. También puedes hacer preguntas adicionales para explicar algunas de estas funcionalidades en detalle. Ingenioso, ¿no? ¡Pruébalo!

5. De Local a Live Implementación con Cloud Run y Cloud SQL

db708c2edf0036a9.png

Muy bien, aventurero de la nube, ya exploraste el territorio. Ahora es el momento de construir tu propia casa en el árbol en la nube. Tomaremos nuestra aplicación de encuestas rápidas y la convertiremos en una aplicación web real y activa que cualquier persona podrá visitar.

Objetivo: Implementar la aplicación de encuestas rápidas en Cloud Run con un backend de Cloud SQL para PostgreSQL.

Tarea 1: Una rama sólida para nuestros datos (configuración de Cloud SQL)

Toda buena aplicación necesita un lugar para almacenar sus preciadas bellotas… Me refiero a los datos. Usaremos Cloud SQL para PostgreSQL. Es como un jardín mágico y autónomo para nuestra base de datos, por lo que podemos enfocarnos en lo divertido.

Le pediremos a la CLI de Gemini que cree la base de datos.

Please create a new Cloud SQL for PostgreSQL instance for me in project <myproject>. Call it quickpoll-db and put it in us-central1. Lets use the Development preset for now, and make the root password a-very-secure-password!.

6c09e8e548efe217.png

Gemini CLI, con su extensión de Cloud SQL, se pondrá a trabajar. Se mostrará la llamada a la herramienta create_instance. ¡Aprobarlo!

Una vez que se cree la instancia, deberías ver un resultado similar al siguiente:

1378c05137bf9260.png

Puedes crear un archivo .env con la variable de entorno anterior y ejecutarlo antes de reiniciar la CLI de Gemini para que tenga acceso a estas variables.

Mientras nuestra instancia crece, preparemos la tierra. Necesitamos una base de datos y un usuario para nuestra app.

In the quickpoll-db instance, create a new database named quickpolldb.

La CLI de Gemini usará la herramienta create_database en la extensión de Cloud SQL para PostgreSQL para crear la base de datos por ti.

3a0ffbf97fbc35cc.png

Ahora agreguemos un usuario para que se encargue de ella:

In the quickpoll-db instance, create a built in user named quickpoll-user with the password another-secure-password!.

Esta vez, la CLI de Gemini usará la herramienta create_user.

562db72ed9a59d4a.png

Tarea 2: La ruta secreta (conectar el backend)

Nuestro backend necesita conocer la ruta secreta a nuestra nueva base de datos. Echemos un vistazo a backend/main.py para ver cómo encuentra su camino.

show me how would the backend/main.py connect to the database

6592c52d634253ce.png

Resultados ¿Ves eso? Usa el conector de Python de Cloud SQL y busca variables de entorno como CLOUD_SQL_POSTGRES_INSTANCE, CLOUD_SQL_POSTGRES_USER, CLOUD_SQL_POSTGRES_PASSWORD y CLOUD_SQL_POSTGRES_DATABASE. Tendremos que proporcionárselas a nuestro servicio de Cloud Run.

Primero, necesitamos CLOUD_SQL_POSTGRES_INSTANCE. Es como un saludo secreto.

What are the details for the Cloud SQL instance quickpoll-db in us-central1?

aa539ea8798aad71.png

Verás muchos detalles. Busca el nombre de la conexión y copia ese valor. Se verá de la siguiente manera: your-project-id:us-central1:quickpoll-db

Ahora, antes de implementar la aplicación en Cloud Run, vamos a crear una instancia de la base de datos con las tablas requeridas. Como creamos una base de datos y un usuario independientes, salgamos de la CLI de Gemini y actualicemos el archivo .env que creamos antes con los valores nuevos:

export CLOUD_SQL_POSTGRES_USER=quickpoll-user
export CLOUD_SQL_POSTGRES_PASSWORD=password-you-provided
export CLOUD_SQL_POSTGRES_DATABASE=quickpolldb

Ahora, reinicia Gemini CLI y escribe lo siguiente:

execute backend/database.sql file on quickpolldb database as quickpolluser in quickpoll-db instance

5201cbf678dd3fc9.png

Descubrió automáticamente que la herramienta execute_sql no admite la ejecución de varios comandos SQL en una sola llamada. Por lo tanto, ejecutó cada comando de SQL por separado.

Tarea 3: Backend, ¡despegue! (Implementación en Cloud Run)

Es hora de que nuestro backend abandone el nido. Le indicaremos a Gemini que implemente la carpeta de backend en Cloud Run y le daremos la ruta de acceso secreta a la base de datos.

Deploy the backend folder to a new Cloud Run service called quickpoll-be in us-central1. Here are the secrets (environment variables):
CLOUD_SQL_POSTGRES_INSTANCE=your-project-id:us-central1:quickpoll-db
CLOUD_SQL_POSTGRES_USER=quickpoll-user
CLOUD_SQL_POSTGRES_PASSWORD=password-you-provided
CLOUD_SQL_POSTGRES_DATABASE=quickpolldb

Gemini empaquetará tu código, creará una imagen de contenedor y la implementará en Cloud Run. Una vez que finalice el proceso, que puede tardar unos minutos, obtendrás una URL para tu nuevo y brillante servicio de backend. Ten a mano esa URL.

f3330321e52c98e9.png

Tarea 4: Los detalles finales (configuración e implementación del frontend)

Nuestro frontend es como el rostro amigable de nuestra aplicación. Debe saber dónde encontrar el backend. Indiquemos a dónde debe ir.

Deploy the frontend folder to a new Cloud Run service called quickpoll-fe in us-central1. Here are the secrets (environment variables):
BACKEND_URL=backend-url

a80fe48e54b47c4.jpeg

Tarea 5: ¡La gran revelación!

¡Muy bien! ¡Llegó el momento de la verdad! Toma la URL de tu servicio quickpoll-fe y ábrela en tu navegador web.

Deberías ver tu aplicación de QuickPoll en vivo y lista para usar. Anímate a crear una encuesta, votar y ver cómo se actualizan los resultados en tiempo real.

¡Lo lograste! Tomaste un proyecto de tu máquina local y lo hiciste realidad en Google Cloud. Y lo hiciste todo desde la comodidad de tu terminal con tu fiel compañero, Gemini CLI.

¡Eso sí que es productividad!

6. Para el desarrollador: Aceleración del ciclo de vida del desarrollo

8feb670e686f4038.png

Muy bien, desarrolladores, ¡aquí comienza la verdadera diversión! Ya exploramos un proyecto, pero ahora es momento de crearlo. Te mostraré cómo Gemini puede ser tu mejor socio de programación, ya que te ayuda a pasar de una idea simple a un código listo para producción más rápido de lo que una ardilla puede encontrar una nuez.

De la idea al código

Piensa en el ciclo de desarrollo típico. No se trata solo de escribir código, ¿verdad? Se trata de la creación de estructuras, la incorporación del manejo de errores, la refactorización y la escritura de pruebas. Gemini puede ayudarte con todo.

Tareas repetitivas y plantillas: ¡Se acabó el copiar y pegar!

Bien, ya tienes la funcionalidad básica de la aplicación. Ahora debes agregar el registro y controlar los posibles errores, ¿verdad? Por lo general, se trata de muchos bloques try...except repetitivos. ¡Ya no! Comencemos por pedirle a la CLI de Gemini que analice el código y sugiera recomendaciones de prácticas recomendadas para el registro de errores y el control de excepciones:

What are the best practices for error handling and logging that should also be included in this application?

3a132d7bbf57bf67.png

La CLI de Gemini analizará el archivo existente y proporcionará algunas recomendaciones de prácticas recomendadas. Piensa en él como un asistente experto que puede ahorrarte tiempo en la investigación.

Ahora, pídele que implemente estas recomendaciones por ti:

please go ahead and implement these in the existing app

Es posible que el resultado real difiera en tu caso, pero, al final, deberías ver los detalles de los cambios que se realizaron. Por ejemplo, en la siguiente captura de pantalla, puedes ver que se agregó structlog para generar registros con formato JSON, se implementó el control de excepciones centralizado y se mejoró la forma en que se registran las respuestas a las solicitudes. Piensa en todo lo que te ahorraste de escribir.

7fcd0153f88740ce.png

Refactorización: Tu revisor de código personal

Todos queremos escribir código limpio y eficiente. Pero, a veces, tenemos prisa. Gemini puede actuar como tu revisor de código personal. Puedes preguntarle lo siguiente:

please perform a comprehensive code review for best practices and security

e5482012a524210e.png

32039b0638d1efd.png

Gemini comprende las prácticas recomendadas específicas de cada idioma. Una vez más, el resultado real en tu caso podría ser diferente de las capturas de pantalla anteriores, pero, si lees el resultado, apreciarás el nivel de detalle que Gemini CLI alcanzó para analizar el código. Te ayuda a aprender y mejorar tu código al mismo tiempo.

Generación de pruebas: ¡La mejor parte!

Este es mi truco favorito. Todos sabemos que debemos escribir pruebas, pero puede ser tedioso, especialmente cuando tienes que simular cosas. Bueno, mira esto. Solo tienes que preguntar lo siguiente:

Add a test suite to this application

d7475f5ca8c9d99d.png

ac55b84b842187b.png

3653819afe847cf3.png

Gemini analizará tu función, identificará sus entradas y salidas, y determinará cuáles son sus dependencias. Luego, generará un archivo test_main.py completo con varios casos de prueba, incluido un "camino feliz" y, tal vez, una condición de error. Esto representa un gran aumento en la productividad.

Ejecuta las pruebas. (Una tarea de desafío para ti)

Ahora, aquí es donde las cosas se ponen realmente emocionantes. Dejaré esta parte como un desafío para que la explores por tu cuenta. Puedes solicitar a la Gemini CLI que ejecute los casos de prueba que generó. Luego, solo siéntate y observa cómo se desarrolla la magia.

7. Más allá de localhost: integración con GitHub

d2664a4c173f1d6.png

Hicimos un trabajo increíble en nuestra máquina local, nuestro pequeño rincón del bosque. Sin embargo, el verdadero potencial de la nube es la colaboración y la conexión. Es hora de alzar el vuelo y ver cómo Gemini puede interactuar con el mundo en general, comenzando por el árbol más grande del bosque de desarrolladores: GitHub.

Concepto: Tu asistente integrado de DevOps

Hasta el momento, usamos Gemini como un compañero de programación local. Ahora, lo actualizaremos a un Asistente de DevOps integrado completo. Todo esto es gracias a la integración del Protocolo de contexto del modelo (MCP). Es un nombre elegante, pero solo significa que Gemini puede comunicarse de forma segura con otros servicios en tu nombre, y el primero que dominaremos es GitHub.

Piénsalo. ¿Con qué frecuencia tienes que salir de la terminal para revisar una solicitud de extracción, crear un problema o explorar un repositorio en GitHub? ¡Eso es más cambio de contexto! Con el conjunto de herramientas de github, puedes hacer todo eso aquí mismo. Convierte a Gemini en una interfaz nativa para GitHub.

La documentación oficial del servidor de MCP de GitHub proporciona una amplia orientación sobre sus herramientas expuestas y opciones de configuración. Puedes elegir entre la operación local o remota, ya que la CLI de Gemini admite por completo ambos servidores de MCP remotos.

En este instructivo, se te guiará para configurar la opción de servidor de MCP remoto para GitHub. Primero, necesitarás un token de acceso personal (PAT) de GitHub.

Una vez que tengas tu PAT, es hora de agregar el objeto del servidor de MCP a tu archivo settings.json. A continuación, se muestra mi archivo settings.json completo, pero puedes asegurarte de que tu objeto mcpServers coincida con lo que ves aquí:

{
  "security": {
    "auth": {
      "selectedType": "vertex-ai"
    }
  },
 "mcpServers": {
    "github": {
      "httpUrl": "https://api.githubcopilot.com/mcp/",
      "headers": {
        "Authorization": "GITHUB_PAT"
      },
      "timeout": 5000
    }
  }
}

Después de actualizar tu archivo settings.json con la configuración del servidor de MCP de GitHub, simplemente reinicia la CLI de Gemini o ejecuta el comando /mcp refresh. En la siguiente captura de pantalla, se muestra el servidor de MCP de GitHub que ahora está preparado en mi sistema, y se exhibe el conjunto de herramientas potentes que la CLI de Gemini ahora puede utilizar con el Protocolo de contexto del modelo.

cf9cab5f70ca1fc2.png

Muestra de comandos de teclas

Gemini incluye un nuevo conjunto de superpoderes específicamente para GitHub. Estos son algunos de mis favoritos:

  • github.list_repositories: ¿Quieres ver todos los repositorios de tu organización sin abrir un navegador? Esta es tu herramienta. Solo pregunta: "Enumera todos los repositorios de mi organización".
  • github.create_issue: ¿Encontraste un error? No cambies de ventana para crear un problema. Solo tienes que decirle a Gemini: "Crea un problema en el repo de sample-flask-app titulado "Corrige el error de acceso" con esta descripción…" y listo, se creará el problema.
  • github.get_pull_request: ¿Necesitas verificar una RP? Puedes preguntar: "Muéstrame los detalles de la solicitud de extracción número 42 en el repo de sample-flask-app". Gemini recuperará el título, la descripción, el estado y quiénes son los revisores.
  • github.get_file_contents: Esta es genial. Puedes leer un archivo desde un repositorio remoto sin tener que clonarlo primero. Es ideal para revisar rápidamente un archivo de configuración o el README de un proyecto que no tienes de forma local.

8. Exploración de GitHub

7e66f28519488019.png

Basta de charla, ¡volemos! Usaremos nuestros nuevos poderes de GitHub para explorar una organización y un proyecto, todo desde la comodidad de nuestra terminal.

Objetivo: Usar Gemini para explorar y comprender un proyecto alojado en GitHub

Situación: Necesitas familiarizarte con un proyecto en GitHub en el que no has trabajado antes.

Tarea 1: Enumera los repositorios de una organización

Primero, veamos todos los proyectos de una organización de GitHub. En este lab, puedes usar tu propio nombre de usuario de GitHub o una organización a la que pertenezcas. Pidámosle a Gemini que las enumere.

List the repositories in the `[your-org-or-username]` GitHub organization.

(Recuerda reemplazar [your-org-or-username] por tu información real). Gemini usará la herramienta github.list_repositories y te mostrará una lista de todos los proyectos. ¡Genial!

Tarea 2: Busca un repositorio específico

De acuerdo. Verás una lista de repositorios. Ahora, al igual que un desarrollador real, debes escanear esa lista y encontrar el proyecto que te interesa. Para nuestro lab, supongamos que buscamos el repositorio quickpoll que clonamos antes. No necesitas un comando para esta parte. Solo lee el resultado del último paso y busca el repo.

Tarea 3: Enumera las solicitudes de extracción abiertas

Ahora que identificamos nuestro repositorio objetivo, veamos qué sucede con él. ¿Hay solicitudes de extracción abiertas? Preguntemos:

List the open pull requests for the `quickpoll` repository in the `[your-org-or-username]` organization.

Gemini usará la herramienta github.list_pull_requests y filtrará el estado open. Luego, se mostrarán todas las PR abiertas, con el número, el título y el creador de cada una. Esta es tu vista instantánea del desarrollo activo del proyecto. Puedes probar esto con un repositorio en el que contribuyas de forma activa y verificar los resultados.

38aecd94347e633c.png

Tarea 4: Investiga una solicitud de extracción

Supongamos que hay una PR interesante en esa lista. Queremos saber más al respecto. Queremos ver la descripción y los archivos que se modificaron. Elige un número de PR de la lista (si no hay ninguno, puedes omitir este paso, pero supongamos que hay uno).

Show me the details and files changed in PR number 1 in the `quickpoll` repo.

Este es un gran ejemplo de una tarea de varios pasos para Gemini. Primero, es probable que use github.get_pull_request para recuperar los detalles principales: el título, el cuerpo, el autor, etcétera. Luego, para obtener los cambios en el archivo, usará una segunda herramienta, github.get_pull_request_files. Luego, combinará toda esta información en un resumen claro y agradable. Acabas de revisar una PR sin salir de la terminal. ¿No es increíble?

9. Del PRD a la confirmación inicial

bbaad74efa344d07.png

Aprendiste a explorar, crear y probar. Ahora, vamos a unir todo en una situación real. Este es el momento en que convertimos un plan en un producto. Pasaremos de un documento de requisitos del producto (PRD) a nuestra primera confirmación. ¡Creemos algo increíble!

Objetivo: Simular una tarea de desarrollo del mundo real de principio a fin, combinando el contexto local y remoto

Situación: Se te asignó una función nueva. Los requisitos te esperan en un archivo PRD dentro del repositorio de GitHub del proyecto.

Tarea 1: Comprende el PRD

Este es el paso más importante. Antes de pensar en escribir una sola línea de código, debes comprender el plan. Los requisitos de nuestra nueva función se encuentran en el archivo prd/NEW_FEATURE.md. Vamos a abrirlo y ver qué hay dentro.

explain the requirements mentioned in prd/NEW_FEATURE.md

La CLI de Gemini empleará read_file para mostrar el contenido del PRD. ¡Comienza a usarlo! Se describirá la nueva función: un botón de actualización para que los usuarios actualicen manualmente la lista de encuestas activas. Siempre consulta el plano primero.

b07e95a5977e927d.png

Tarea 2: Codificación: Traduce los requisitos a la realidad

¡Este es el momento mágico! Tomaremos los requisitos del PRD y le pediremos a Gemini que escriba el código por nosotros. Seamos específicos y digámosle exactamente lo que queremos.

Implement the changes as per the PRD

La CLI de Gemini entrará en acción y, después de un momento, verás un resultado similar a este. Nuestro nuevo y brillante código ahora tiene un hogar acogedor.

aff664dee6796f8b.png

Tarea 3: Verifica tus cambios

Creamos un archivo nuevo con código nuevo. El último paso de este lab es implementar el cambio en Cloud Run y verificarlo.

let's deploy the changes made to frontend to Cloud Run. The existing service on Cloud Run is quickpoll-fe in us-central1.

Observa cómo esa instrucción proporcionó detalles adicionales, como el nombre del servicio de Cloud Run existente y su región de implementación. Ser específico ayuda a ahorrar tiempo, aunque Gemini CLI siempre te pedirá los detalles que falten si los omites.

Si tu servicio de Cloud Run actualizado encuentra un error, simplemente pídele a la CLI de Gemini que depure y rectifique el código. Recuerda que es tu compañero superpoderoso.

10. Felicitaciones

393fa778d8ee9f18.png

¡Y con esto terminamos! Acabas de completar un ciclo de desarrollo completo. Pasaste de un documento de requisitos a una nueva función lista para confirmarse y enviarse. Combinaste contexto local, contexto remoto, operaciones del sistema de archivos y generación de código. No solo eres un desarrollador, sino también un arquitecto de nube superproductivo. ¡Felicitaciones!

Documentos de referencia