Глубокое погружение в Gemini CLI

1. Введение

be8ebdfe42ca39ac.png

Всем привет! Меня зовут Спарки! Я так рад, что вы смогли прийти. Я проделал весь путь от кластера GKE в us-central1 чтобы быть здесь сегодня. Добро пожаловать на эту практику.

Я всю жизнь рыскал по потокам данных Google Cloud и повидал всё. Я видел, как вы, архитекторы и инженеры, создавали потрясающие вещи. Но я также видел, как вы застряли в ежевике. Вы знаете, о чём я говорю! Это ощущение переключения контекста при отладке пода в GKE. Вы переключаетесь между kubectl logs , консолью GCP для проверки работоспособности узла, IDE для просмотра развёрнутого исходного кода и вкладкой браузера с официальной документацией Kubernetes по хукам жизненного цикла пода. Каждый прыжок — это смена фокуса!

А какой сложный инструментарий ! gcloud , kubectl , terraform ... у каждого свой DSL и куча флагов. Это приводит к постоянному поиску документации . В итоге приходится искать ту самую идеальную команду gcloud с правильной комбинацией флагов --filter и --format , чтобы получить нужные данные. Это как искать определённый орех в лесу, где их миллионы. И не заставляйте меня начинать повторяющиеся задачи . Я видел, как вы столько раз писали одни и те же Dockerfile и cloudbuild.yaml для нового сервиса Python, что, вероятно, у вас возникло дежавю.

Что ж, я здесь, чтобы показать вам лучший путь. Тайную тропу через лес. Вот в чём суть Gemini CLI !

Что такое Gemini CLI?

Так что же это за волшебный способ, который меня так воодушевляет?

Представьте себе Gemini CLI как своего личного облачного помощника прямо в вашем терминале. Это диалог, партнёрство! Он учитывает контекст , то есть не просто слушает, а понимает . Он может читать ваши файлы, запоминать соглашения вашего проекта — например, использовать ли табуляцию или пробелы — и понимать, что вы пытаетесь сделать. Я как будто чувствую запах желудей, которые вы пытаетесь собрать!

Высокоуровневая архитектура (Давайте заглянем под капот!)

Как же всё это работает? Это сочетание нескольких интересных вещей, работающих в гармонии:

  1. Мощная языковая модель: это мозг! А именно, это большая мультимодальная модель, обученная Google. « Мультимодальная » означает, что она не просто понимает текст, но и структуру и значение кода. Это позволяет ей делать выводы о вашем программном обеспечении, а не просто читать его.
  2. Ваш локальный контекст: это критически важно. Gemini CLI работает как процесс на вашем локальном компьютере с теми же правами, что и у вашей учётной записи. Это означает, что он может получить доступ к вашей файловой системе для оказания помощи по конкретному проекту. Это не какой-то далёкий облачный сервис, гадающий о вашем коде; он здесь, рядом с вами.
  3. Экосистема инструментов: именно так модель взаимодействует с миром. У неё есть чётко определённый набор функций, которые она может вызывать, например, read_file или run_shell_command . Представьте себе это как безопасный API. Модель решает, что делать и какой инструмент использовать, а затем генерирует блок tool_code для выполнения. Это делает её действия предсказуемыми и надёжными.
  4. Выполнение команд оболочки: Это настоящее волшебство! Он может выполнить любую команду в подоболочке bash -c <command> . Он захватывает stdout , stderr и exit code . Это невероятно! Это означает, что Gemini CLI может выполнить команду, проверить её на наличие ошибки и попытаться исправить её, основываясь на сообщении об ошибке.
  5. Защитная сетка: Это моя любимая часть! Перед выполнением блока tool_code клиент CLI покажет вам точную команду или код и запросит подтверждение. Это проверка на стороне клиента, поэтому последнее слово перед любыми изменениями в вашей системе остаётся за вами. Вы всегда отвечаете за всё!

Это не просто чат-бот, это действующий человек! Активный помощник в вашем программировании.

Ключевая концепция: декларативность против императива

Самое большое и потрясающее изменение — это переход от указаний компьютеру , как что-то сделать, к указанию ему, чего вы хотите.

  • Императив (Старый, тернистый путь): Вы должны выполнить каждый шаг. Вы должны быть экспертом в конкретном языке, к которому относится инструмент. Например, вот эта чудовищная команда:
    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
    
    
    Ой! Посмотрите на всё это! Нужно знать синтаксис для типа машины, семейства изображений, метаданных и тегов. Пропустите хоть одну часть, и получите зашифрованную ошибку.
  • Декларативный (Искромётный приём!): Вы просто говорите то, что хотите, на простом английском языке!

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

Вот и всё! Gemini анализирует ваш запрос, сопоставляет его с параметрами инструмента gcloud , определяет правильный синтаксис для каждого флага и формирует для вас эту сложную и пугающую команду. Затем он представляет её вам на утверждение. Главное — позволить вам мыслить глобально, а не просто запоминать флаги командной строки.

Расширение возможностей Gemini: введение в расширения CLI

Хотя Gemini CLI — мощный инструмент, его истинный потенциал раскрывается с помощью расширений. Расширения — это наборы подсказок, инструментов и пользовательских команд, которые расширяют функциональность CLI, позволяя адаптировать его к вашим конкретным потребностям и рабочим процессам.

Поиск и установка расширений

Gemini CLI имеет растущую экосистему расширений, созданных как Google, так и сторонними разработчиками. Официальный каталог расширений доступен по адресу geminicli.com/extensions .

Чтобы установить расширение, используйте команду gemini extensions install, указав URL-адрес Git-репозитория расширения. Например, чтобы установить официальное расширение Cloud SQL для PostgreSQL, выполните:

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

Ладно, хватит разговоров! Давайте запачкаем руки и попробуем это на деле!

2. Прежде чем начать

86dffda616ab7a1d.png

Привет, будущие волшебники облаков! Спарки к вашим услугам. Прежде чем мы начнём наше грандиозное приключение, нам нужно убедиться, что ваша мастерская готова к работе. Представьте, что мы пакуем сумки со всеми необходимыми инструментами и волшебными желудями перед тем, как отправиться в лес. Следуйте за мной!

Если у вас уже есть проект Google Cloud, вы можете использовать Gemini CLI в Google Cloud Shell, поскольку он предустановлен. Или выполните следующие действия, чтобы настроить Gemini CLI на локальном компьютере.

Шаг 1: Самое необходимое (предварительные условия)

Каждому хорошему искателю приключений нужна прочная основа. Прежде чем устанавливать Gemini CLI, вам нужно настроить несколько компонентов на вашем локальном компьютере.

  1. Google Cloud SDK ( gcloud ) : это основной набор инструментов для Google Cloud. Gemini CLI входит в это семейство!
  • Проверьте, установлен ли он : выполните команду gcloud --version . Если вы видите номер версии, всё готово!
  • Если не установлено : следуйте официальным инструкциям на cloud.google.com/sdk/docs/install .
  1. Git : нам это понадобится для клонирования репозитория практических лабораторных работ.
  • Проверьте, установлен ли он : выполните команду git --version .
  • Если не установлен : вы можете получить его с git-scm.com/downloads .
  1. Проект GCP и аутентификация :
  • Убедитесь, что у вас есть проект Google Cloud с включённым биллингом . Это очень важно!
  • Войдите в свою учетную запись Google, выполнив команду:
gcloud auth login
  • Настройте свой проект для сеанса. Найдите идентификатор проекта в консоли GCP и выполните:
gcloud config set project YOUR_PROJECT_ID

(Замените YOUR_PROJECT_ID на фактический идентификатор вашего проекта!)

  1. Node.js версии 20 или выше

Шаг 2: Получите волшебство! (Установка Gemini CLI)

Итак, с основами разобрались, пора переходить к главному! Мы установим Gemini CLI.

Запустить мгновенно с помощью npx

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

Установить глобально с помощью npm

npm install -g @google/gemini-cli

Установить глобально с помощью Homebrew (macOS/Linux)

brew install gemini-cli

Проверьте версию Gemini

gemini --version

Вы должны увидеть номер версии. Это подтверждает успешную установку.

Шаг 3: Включение (конфигурация)

Теперь, когда Gemini CLI установлен, нам нужно дать ему ключи от королевства. Для начала запустите его, выполнив команду gemini в терминале. Вы должны увидеть следующий экран:

9378d804bc647191.png

Для простоты вы можете выполнить аутентификацию с помощью своей учетной записи Google, что даст вам доступ к Gemini 2.5 Pro с контекстным окном токенов 1M и до 60 запросов в минуту и ​​1000 запросов в день без необходимости управления ключом API.

Если вам нужен доступ к определенным моделям Gemini или вы хотите перейти на более высокие лимиты при необходимости, используйте Gemini API Key в качестве метода аутентификации.

Для корпоративных команд и производственных рабочих нагрузок, у которых уже настроены проекты Google и учетная запись выставления счетов, используйте Vertex AI для обеспечения повышенной безопасности и соответствия требованиям.

В зависимости от выбранного варианта вам будут предложены дальнейшие действия по настройке аутентификации. Подробнее об этих параметрах см. в документации Gemini CLI .

Если вы собираетесь использовать платформу Vertex AI от Google Cloud, сначала выйдите из Gemini CLI, дважды нажав ctrl+c , и задайте необходимые переменные среды.

Независимо от метода аутентификации вам обычно потребуется установить следующие переменные: GOOGLE_CLOUD_PROJECT и GOOGLE_CLOUD_LOCATION.

Чтобы установить эти переменные:

# 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"

Теперь войдем в Google Cloud:

gcloud auth application-default login

После аутентификации предыдущим способом снова запустите Gemini CLI, выполнив команду gemini в терминале. В параметрах аутентификации выберите Vertex AI , и всё должно быть готово.

Шаг 4: Тест искры! (Проверка настроек)

Настал момент истины! Давайте проверим, всё ли работает. Выполните эти команды, чтобы убедиться, что все индикаторы горят зелёным.

  1. Введите следующую подсказку:
What is my current directory?

Интерфейс командной строки Gemini должен сообщить вам текущий рабочий каталог. Это позволит проверить базовую языковую модель и интеграцию с оболочкой.

15a12d7b3fdd2d83.png

  1. Тестовое соединение GCP:
list my gcs buckets

Если у вас есть контейнеры GCS, он должен их отобразить. Если нет, он сообщит, что их нет. Это подтверждает правильное подключение к вашему проекту GCP.

Шаг 5: Добавляем ему ещё больше суперспособностей! (Установка расширений)

Теперь давайте расширим возможности Gemini CLI, установив несколько расширений, которые пригодятся нам позже в лабораторной работе.

Cloud Run

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

Безопасность Gemini CLI

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

gcloud

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

Облачный SQL для PostgreSQL

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

Если все эти команды сработали, вы официально готовы к семинару! Ваша среда настроена, и вы готовы начать повышать свою производительность. Увидимся на первой лабораторной работе!

3. Основные концепции и взаимодействие с локальным рабочим пространством

a7bf3a905d8e2638.png

Итак, готовы испачкать лапки? А теперь давайте посмотрим на инструменты в вашем новом наборе Gemini. Я считаю их своими суперспособностями для исследования и разработки в облаке! Давайте немного разберёмся, как они работают.

Основные возможности

Я разделяю свои полномочия на две категории: наблюдать за происходящим и что-то делать!

Понимание окружающей среды (мои суперчувства!)

Прежде чем начать строить новое гнездо, нужно осмотреть дерево, верно? Эти инструменты нужны для того, чтобы оценить местность.

  • list_directory : Это мой базовый инструмент для поиска. Это простая оболочка для стандартного списка каталогов на уровне ОС. Но самое интересное то, что модель может анализировать этот структурированный вывод и принимать решения, например, выбирать подкаталог с именем src для исследования.
  • glob : Это мой «поисковик желудей»! Он использует стандартные шаблоны glob, такие как * , ** , ? и [] , которые вы уже знаете по таким инструментам, как .gitignore . Поэтому вы можете запросить «Найти все файлы *.py в каталоге app », используя шаблон app/**/*.py . Это эффективный способ собрать определённый набор файлов для анализа моделью.
  • search_file_content : Это моё рентгеновское зрение! Он использует для поиска полные регулярные выражения (regex), а не просто поиск по строкам. Это невероятно эффективно. Вы можете попросить его найти сложные шаблоны, например, «Найти все маршруты Flask, использующие метод POST», что может сгенерировать регулярное выражение типа app\.route\(.*methods=\['POST'\].*\) . Он возвращает путь к файлу, номер строки и соответствующую строку, предоставляя модели весь необходимый контекст.
  • read_file : Найдя интересный файл, вы наверняка захотите его открыть. read_file оптимизирован для этого. Вы можете прочитать файл целиком или, для больших файлов, использовать параметры offset и limit , чтобы читать его по частям. Это означает, что модель может эффективно сканировать даже большие файлы журналов без превышения времени ожидания.

От понимания к действию (время строить!)

Итак, вы изучили местность. Теперь пора обустроить своё гнездо! Эти инструменты позволят вам вносить изменения и добиваться результатов.

  • **write_file** : Нужно создать новый файл с нуля? write_file — это атомарная операция, которая записывает весь предоставленный вами контент по указанному пути. Она идеально подходит для формирования новых модулей или создания Dockerfile с нуля в соответствии с потребностями вашего проекта.
  • **replace** : Этот инструмент предназначен для хирургических изменений! Это не просто поиск и замена. Вы указываете old_string и new_string . Для безопасной работы old_string должен быть уникальным фрагментом файла, обычно с несколькими строками контекста до и после изменяемого фрагмента. Это гарантирует, что мы изменим только тот фрагмент кода, который вы хотите изменить.
  • **run_shell_command** : Это просто супер-мощь! Она выполняет заданную команду в подоболочке bash -c <command> . Модель получает stdout , stderr и exit code . Это критически важно для построения рабочих процессов. Модель может запустить terraform plan , прочитать вывод и, если план выполнен успешно (код выхода 0), запросить у вас разрешение на его применение.

Сеть безопасности (Мое обещание вам!)

Выполнение команд может быть пугающим. Я понимаю! Именно поэтому так важна система безопасности. Когда модель генерирует блок tool_code , содержащий вызов run_shell_command или write_file , клиент Gemini CLI перехватывает его. Он показывает вам точную команду или полное содержимое файла для записи и выводит запрос [y/n]. Ничто не происходит без вашего явного согласия. Вы всегда контролируете ситуацию.

4. Изучение проекта

314faf951de66388.png

Цель: использовать Gemini CLI для понимания незнакомой кодовой базы, не выходя из терминала.

Сценарий: Вы новый разработчик, и вам нужно быстро освоить этот проект!

Задача 0: Настройка — клонирование проекта!

Прежде всего, нам нужно получить код! Он находится в публичном репозитории на GitHub, в «дереве» quickpoll . Давайте попросим Gemini CLI клонировать его для нас. Перед этим создадим рабочий каталог и запустим Gemini CLI из него:

mkdir workdir
cd workdir
gemini

Теперь введите следующую команду:

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

46c2feb0d1184db7.png

Gemini понимает, что «клонирование» подразумевает использование команды git clone . Он сгенерирует вызов утилиты run_shell_command с текстом вроде git clone https://github.com/gauravkakad-google/quickpoll.git . После вашего одобрения он скачает репозиторий.

Теперь выйдем из Gemini CLI, дважды нажав ctrl+c , перейдем к репозиторию примеров и снова запустим Gemini CLI:

cd quickpoll
gemini

Отлично! Теперь, когда мы внутри дерева проекта, можно приступить к исследованию!

Задание 1: Перечислить все файлы в проекте

Теперь, когда мы вошли, давайте составим карту всего леса. Мы хотим увидеть каждый файл. Спросите Gemini:

List all the files in the project.

Gemini, скорее всего, будет использовать инструмент glob с шаблоном **/* . Он рекурсивно выводит список всех файлов, предоставляя полный манифест кодовой базы. Это отличный первый шаг к пониманию структуры проекта.

Задача 2: Найти все файлы, которые импортируют «google.cloud.sql.connector»

Ладно, мне любопытно. Где этот проект взаимодействует с Google Cloud Storage? Давайте проведём небольшое расследование. Спросите:

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

568fdb8ff4889c5d.png

Используя функцию search_file_content , Gemini найдёт именно те файлы, которые содержат этот оператор импорта. Это сразу же сузит область поиска до частей кода, которые отвечают за взаимодействие с Cloud SQL. В этом проекте он должен найти backend/main.py .

Задание 3: Покажите мне содержимое основного Dockerfile

Я вижу Dockerfile ! Это план нашего контейнера. Давайте заглянем внутрь. Просто спросите:

Show me the contents of the main Dockerfile.

e49a83b3efbcf807.png

Gemini будет использовать read_file для отображения Dockerfile . Вы можете проанализировать базовый образ ( FROM ), устанавливаемые зависимости ( RUN pip install... ) и финальную команду ( CMD ). Это даст вам информацию о среде выполнения приложения.

Задание 4: Каково назначение файла main.py ?

Итак, пора заглянуть в суть кода. Давайте попросим Gemini быть нашим проводником. Скажите следующее:

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

81d480c285285150.png

Вот где Gemini CLI действительно блистает. Сначала он вызывает read_file в backend/main.py . Затем его мультимодальная языковая модель анализирует код Python. Он определяет, что это приложение FastAPI, предоставляющее REST API для опроса. Затем он объясняет конечные точки API и их функциональность. Это экономит ваше время, избавляя от необходимости читать и разбираться во всём этом самостоятельно. Вы также можете задавать уточняющие вопросы, чтобы подробно объяснить некоторые из этих функций. Довольно интересно, правда? Давай, попробуй!

5. От локального к реальному! Развертывание с помощью Cloud Run и Cloud SQL

db708c2edf0036a9.png

Итак, облачный путешественник, ты разведал территорию. Теперь пора построить свой собственный домик на дереве в облаке! Мы превратим наше приложение для быстрого опроса в настоящее веб-приложение, доступное всем.

Цель: Развернуть приложение quickpoll в Cloud Run с бэкэндом Cloud SQL для PostgreSQL.

Задача 1: Надежная ветвь для наших данных (настройка Cloud SQL)

Каждому хорошему приложению нужно место для хранения своих драгоценных «жёлудей»… то есть данных! Мы будем использовать Cloud SQL для PostgreSQL. Это как волшебный, самоухожий сад для нашей базы данных, где мы можем сосредоточиться на самом интересном.

Давайте попросим Gemini CLI посеять семена для нашей базы данных.

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, использующий расширение Cloud SQL, приступит к работе. Он покажет вам вызов инструмента create_instance. Подтвердите его!

После создания экземпляра вы должны увидеть примерно такой вывод:

1378c05137bf9260.png

Вы можете создать файл .env с указанной выше переменной среды и использовать его перед перезапуском Gemini CLI, чтобы у него был доступ к этим переменным.

Пока наш экземпляр растёт, давайте подготовим почву. Нам нужна база данных и пользователь для нашего приложения.

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

Gemini CLI будет использовать инструмент create_database в расширении Cloud SQL for PostgreSQL для создания базы данных.

3a0ffbf97fbc35cc.png

Теперь добавим пользователя, который будет за ним ухаживать:

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

На этот раз Gemini CLI будет использовать инструмент create_user .

562db72ed9a59d4a.png

Задача 2: Секретный путь (подключение бэкэнда)

Нашему бэкенду нужно знать секретный путь к новой базе данных. Давайте заглянем в backend/main.py и посмотрим, как он его находит.

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

6592c52d634253ce.png

Ага! Видите? Он использует Cloud SQL Python Connector и ищет переменные окружения, такие как CLOUD_SQL_POSTGRES_INSTANCE, CLOUD_SQL_POSTGRES_USER, CLOUD_SQL_POSTGRES_PASSWORD и CLOUD_SQL_POSTGRES_DATABASE. Нам нужно будет передать их нашему сервису Cloud Run.

Для начала нам нужен CLOUD_SQL_POSTGRES_INSTANCE. Это как секретное рукопожатие.

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

aa539ea8798aad71.png

Вы увидите множество подробностей. Найдите имя подключения и скопируйте его. Оно будет выглядеть примерно так: your-project-id:us-central1:quickpoll-db .

Прежде чем развернуть приложение в Cloud Run, создадим экземпляр базы данных с необходимыми таблицами. Поскольку мы создали отдельную базу данных и пользователя, выйдем из Gemini CLI и обновим ранее созданный файл .env, добавив новые значения:

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

Теперь перезапустите Gemini CLI и введите следующее:

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

5201cbf678dd3fc9.png

Он автоматически определил, что инструмент execute_sql не поддерживает выполнение нескольких SQL-команд за один вызов. Поэтому он выполнил каждую SQL-команду отдельно.

Задача 3: Бэкенд, взлетай! (Развертывание в Cloud Run)

Пора нашему бэкенду покинуть гнездо! Мы попросим Gemini развернуть папку бэкенда в Cloud Run и укажем ему секретный путь к базе данных.

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 упакует ваш код, создаст образ контейнера и развернет его в Cloud Run. После завершения (это может занять несколько минут) вы получите URL-адрес вашего нового бэкенд-сервиса. Сохраните этот URL-адрес под рукой!

f3330321e52c98e9.png

Задача 4: Последние штрихи (Настройка и развертывание внешнего интерфейса)

Наш фронтенд — это как дружелюбное лицо приложения. Он должен знать, где находится бэкенд. Давайте скажем ему, куда идти.

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

Задание 5: Великое открытие!

Вот он! Момент истины! Возьмите URL-адрес вашего сервиса quickpoll-fe и откройте его в браузере.

Вы увидите своё приложение QuickPoll, работающее и готовое к использованию! Создайте опрос, проголосуйте и наблюдайте за обновлением результатов в режиме реального времени.

Вы сделали это! Вы взяли проект со своего локального компьютера и воплотили его в жизнь в Google Cloud. И всё это вы сделали прямо из терминала с помощью своего верного помощника Gemini CLI.

Вот это я понимаю продуктивность!

6. Для разработчика — ускорение жизненного цикла разработки

8feb670e686f4038.png

Итак, разработчики, вот тут-то и начинается настоящее веселье! Мы изучили проект, но теперь пора приступить к его реализации . Я покажу вам, как Gemini может стать вашим незаменимым помощником в программировании, помогая вам перейти от простой идеи к готовому коду быстрее, чем белка находит орех!

От идеи к коду

Представьте себе типичный цикл разработки. Это ведь не просто написание кода, верно? Это ещё и создание шаблонов, добавление обработки ошибок, рефакторинг и написание тестов. Gemini поможет со всем этим!

Шаблоны и повторяющиеся задачи: больше никакого копирования и вставки!

Итак, у вас есть базовая функциональность приложения. Теперь нужно добавить логирование и обработку потенциальных ошибок, верно? Обычно это требует множества повторяющихся блоков try...except . Теперь всё кончено! Давайте начнём с того, что попросим Gemini CLI проанализировать код и предложить рекомендации по ведению логирования ошибок и обработке исключений:

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

3a132d7bbf57bf67.png

Gemini CLI проанализирует существующий файл и предоставит рекомендации по наилучшей практике. Считайте его экспертом-помощником, который сэкономит вам время на самостоятельное изучение информации.

Теперь давайте попросим его реализовать для вас следующие рекомендации:

please go ahead and implement these in the existing app

Фактический вывод может отличаться в вашем случае, но в конечном итоге вы увидите подробности внесённых изменений. Например, на скриншоте ниже вы видите, что был добавлен structlog для создания журналов в формате JSON, реализована централизованная обработка исключений и улучшен способ журналирования ответов на запросы. Подумайте, сколько текста вы только что сэкономили!

7fcd0153f88740ce.png

Рефакторинг: ваш персональный рецензент кода

Мы все хотим писать чистый и эффективный код. Но иногда мы торопимся. Gemini может стать вашим личным ревьюером кода. Вы можете задать ему такие вопросы, как:

please perform a comprehensive code review for best practices and security

e5482012a524210e.png

32039b0638d1efd.png

Gemini понимает рекомендации, специфичные для конкретного языка. Опять же, фактический вывод в вашем случае может отличаться от представленных выше скриншотов, но, ознакомившись с выводом, вы оцените уровень детализации, который Gemini CLI применил для анализа кода. Это поможет вам одновременно изучать и улучшать свой код!

Генерация тестов: самая лучшая часть!

Это мой любимый приём! Мы все знаем, что нужно писать тесты, но это может быть утомительно, особенно когда приходится что-то моделировать. Что ж, взгляните на это. Можете просто спросить:

Add a test suite to this application

d7475f5ca8c9d99d.png

ac55b84b842187b.png

3653819afe847cf3.png

Gemini проанализирует вашу функцию, определит её входные и выходные данные и определит её зависимости. Затем он сгенерирует полноценный файл test_main.py с несколькими тестовыми случаями, включая «удачный путь» и, возможно, ошибку. Это значительно повысит производительность!

Пройдите тесты! (Сложное задание для вас)

А вот теперь начинается самое интересное! Я оставлю эту часть как задачу для самостоятельного изучения. Не стесняйтесь задавать Gemini CLI команды для выполнения сгенерированных тестовых случаев. А затем просто расслабьтесь и наблюдайте за волшебством!

7. За пределами локального хоста: интеграция с GitHub

d2664a4c173f1d6.png

Мы проделали потрясающую работу на нашей локальной машине, в нашем собственном уголке леса. Но настоящая сила облака — это совместная работа и взаимодействие! Пора взлететь и посмотреть, как Gemini может взаимодействовать с окружающим миром, начиная с самого большого дерева в лесу разработчиков: GitHub!

Концепция: ваш интегрированный помощник DevOps

До сих пор мы использовали Gemini в качестве локального помощника по программированию. Теперь мы собираемся превратить его в полноценный интегрированный DevOps-помощник . Всё это благодаря интеграции с Model Context Protocol (MCP) . Название, конечно, замысловатое, но оно означает, что Gemini может безопасно взаимодействовать с другими сервисами от вашего имени, и первый из них, который мы освоим, — это GitHub.

Подумайте сами. Как часто вам приходится отрываться от терминала, чтобы проверить пул-реквест, создать задачу или просмотреть репозиторий на GitHub? Это же ещё одно переключение контекста! С помощью инструментария github вы можете сделать всё это прямо здесь. Он превращает Gemini в нативный интерфейс для GitHub.

Официальная документация GitHub по MCP-серверу содержит подробное руководство по его инструментам и параметрам настройки. Вы можете выбрать локальный или удалённый режим работы, поскольку Gemini CLI полностью поддерживает оба удалённых MCP-сервера.

Это руководство поможет вам настроить удалённый сервер MCP для GitHub . Для начала вам понадобится персональный токен доступа (PAT) от GitHub .

Получив PAT, добавьте объект MCP Server в файл settings.json. Мой полный файл settings.json показан ниже, но вы можете просто убедиться, что ваш объект mcpServers соответствует тому, что вы видите здесь:

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

После обновления settings.json с конфигурацией GitHub MCP Server просто перезапустите Gemini CLI или выполните команду /mcp refresh. На снимке экрана ниже показан GitHub MCP Server, который теперь установлен на моей системе, демонстрируя набор мощных инструментов, которые Gemini CLI теперь может использовать с протоколом контекста модели.

cf9cab5f70ca1fc2.png

Демонстрация ключевых команд

Gemini предлагает целый набор новых суперспособностей специально для GitHub. Вот несколько моих любимых:

  • github.list_repositories : Хотите увидеть все репозитории вашей организации, не открывая браузер? Это ваш инструмент! Просто скажите: «Показать все репозитории моей организации».
  • github.create_issue : Нашли ошибку? Не переключайтесь между окнами, чтобы создать задачу. Просто скажите Gemini: «Создай задачу в репозитории sample-flask-app под названием "Исправление ошибки входа" с таким описанием...» — и вуаля ! Задача создана.
  • github.get_pull_request : Нужно проверить PR? Вы можете попросить: «Покажите мне информацию о PR номер 42 в репозитории sample-flask-app ». Gemini получит название, описание, статус и список рецензентов.
  • github.get_file_contents : Это просто супер! Вы можете прочитать файл из удалённого репозитория, не клонируя его предварительно! Это отлично подходит для быстрой проверки файла конфигурации или README проекта, которого нет локально.

8. Исследование GitHub

7e66f28519488019.png

Хватит разговоров, пора лететь! Мы воспользуемся новыми возможностями GitHub, чтобы изучить организацию и проект, не выходя из терминала.

Цель : использовать Gemini для изучения и понимания проекта, размещенного на GitHub.

Сценарий : Вам необходимо ознакомиться с проектом на GitHub, над которым вы раньше не работали.

Задача 1: Составление списка репозиториев в организации

Для начала давайте посмотрим на все проекты в организации GitHub. Для этой лабораторной работы вы можете использовать своё имя пользователя GitHub или имя организации, к которой вы принадлежите. Давайте попросим Gemini вывести их список.

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

(Не забудьте заменить [your-org-or-username] на свои данные!) Gemini воспользуется инструментом github.list_repositories и покажет вам список всех проектов. Отлично!

Задача 2: найти конкретный репозиторий

Итак, вы увидите список репозиториев. Теперь, как настоящий разработчик, вам нужно просмотреть этот список и найти интересующий вас проект. Для нашей лабораторной работы представим, что мы ищем репозиторий quickpoll , который мы клонировали ранее. Для этого вам не нужна команда — просто просмотрите вывод на предыдущем шаге и найдите репозиторий!

Задача 3: Составление списка открытых запросов на извлечение

Теперь, когда мы определили целевой репозиторий, давайте посмотрим, что с ним происходит. Есть ли открытые запросы на извлечение? Давайте спросим:

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

Gemini будет использовать инструмент github.list_pull_requests , фильтруя запросы по состоянию open . Затем он выведет список всех открытых запросов на выдачу (PR) с указанием номера запроса, его названия и автора. Это позволит вам мгновенно оценить текущую разработку проекта. Вы можете попробовать это с репозиторием, в который вы активно вносите свой вклад, и проверить результаты.

38aecd94347e633c.png

Задача 4: Исследование запроса на извлечение

Допустим, в этом списке есть интересный PR. Мы хотим узнать о нём больше! Мы хотим увидеть описание и какие файлы были изменены. Выберите номер PR из списка (если таковых нет, можете пропустить этот шаг, но давайте представим, что он есть!).

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

Это отличный пример многоэтапной задачи для Gemini! Сначала он, скорее всего, воспользуется github.get_pull_request для получения основных данных — названия, текста, автора и т. д. Затем, чтобы получить изменения в файле, он воспользуется вторым инструментом, github.get_pull_request_files . Затем он объединит всю эту информацию в наглядное и понятное резюме. Вы только что проверили пул-реквест, не выходя из терминала! Удивительно!

9. От PRD до первоначального обязательства

bbaad74efa344d07.png

Вы научились исследовать, создавать и тестировать. Теперь мы применим всё это на практике. Именно сейчас мы превращаем план в продукт. Мы пройдём весь путь от документа с требованиями к продукту (PRD) до первого коммита. Давайте создадим что-нибудь потрясающее!

Цель : смоделировать реальную задачу разработки от начала до конца, сочетая локальный и удаленный контекст.

Сценарий : Вам назначена новая функция! Требования ждут вас в PRD-файле в репозитории проекта на GitHub.

Задание 1: Понять - Прочитать PRD

Это самый важный шаг! Прежде чем даже думать о написании хоть одной строчки кода, вы должны обязательно понять план. Требования к нашей новой функции содержатся в файле prd/NEW_FEATURE.md. Давайте откроем его и посмотрим, что внутри.

explain the requirements mentioned in prd/NEW_FEATURE.md

Интерфейс командной строки Gemini CLI будет использовать read_file для отображения содержимого PRD. Вникайте! Мы расскажем о новой функции: кнопке «Обновить», позволяющей пользователям вручную обновлять список активных опросов. Всегда сверяйтесь с планом действий!

b07e95a5977e927d.png

Задача 2: Код — воплощение требований в реальность

Вот он, волшебный момент! Мы возьмём требования из PRD и попросим Gemini написать код за нас. Давайте будем конкретны и расскажем, чего именно мы хотим.

Implement the changes as per the PRD

Gemini CLI запустится, и через мгновение вы увидите примерно такой вывод. Наш новый блестящий код теперь обрёл уютное пристанище!

aff664dee6796f8b.png

Задача 3: Проверьте свои изменения

Мы создали новый файл с новым кодом. Последний шаг этой лабораторной работы — развернуть изменения в Cloud Run и проверить их.

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

Обратите внимание, как в этом запросе отображается дополнительная информация, например, имя существующей службы Cloud Run и регион её развёртывания. Конкретность данных помогает сэкономить время, хотя Gemini CLI всегда запросит у вас недостающие данные, если вы их пропустите.

Если в обновлённом сервисе Cloud Run возникнет ошибка, просто запустите Gemini CLI для отладки и исправления кода. Помните, это ваш надёжный помощник!

10. Поздравления

393fa778d8ee9f18.png

And that's a wrap! You just completed a full development cycle. You went from a requirement document to a new feature, ready to be committed and pushed. You combined local context, remote context, file system operations, and code generation. You're not just a developer; you're a super-productive cloud architect! Congratulations!

Справочные документы