Перейти к содержимому
arckep.ru — все нейросети в одном месте без VPN Перейти
>AISTUDY_
Поддержать
AUTHORСвежий выпуск №024 → Куда внедрять агентов: фронт или тыл

Модуль 2.3 · Урок 2

Урок 2: Базовая работа с Gemini CLI

Практика
2.3 / Урок 2 из 3

Чему вы научитесь

  • Анализировать структуру проектов и понимать архитектуру через Gemini
  • Генерировать код, создавать новые файлы и функции
  • Редактировать множество файлов в одном запросе (мультифайловые правки)
  • Использовать встроенные инструменты: shell-команды, чтение файлов, поиск по коду
  • Работать с большими проектами благодаря 1M контексту

Архитектура Gemini CLI: инструменты и режимы

Gemini CLI работает с набором встроенных инструментов: run_shell_command, read_file, grep_search, replace (edit), list_directory. Вот как это устроено:

┌──────────────────────────────────────┐
│      Ваш запрос к Gemini             │
└──────────────────────────────────────┘

┌──────────────────────────────────────┐
│    Gemini обдумывает запрос           │
│    (анализирует контекст)             │
└──────────────────────────────────────┘

        ┌─────────┴─────────┐
        ↓                   ↓
┌──────────────┐    ┌──────────────┐
│ Инструменты  │    │ Генерация    │
├──────────────┤    ├──────────────┤
│ run_shell_command │    │ Код (Python) │
│ read_file         │    │ Код (JS)     │
│ grep_search       │    │ Файлы        │
│ replace (edit)    │    │ Тесты        │
└──────────────┘    └──────────────┘
        ↓                   ↓
└─────────────┬─────────────┘

      Результаты в терминал

Задача 1: Анализ существующего проекта

Начнём с реального примера. Склонируйте небольшой open-source проект:

cd ~/projects
git clone https://github.com/axios/axios.git
cd axios

Размер проекта: ~500 файлов, отличный для тестирования 1M контекста Gemini.

Теперь дайте запрос Gemini:

gemini "Проанализируй структуру этого проекта. Опиши:
1. Основные папки и их назначение
2. Главный файл входа (entry point)
3. Основные модули
4. Как устроена архитектура?"

Ответ будет примерно таким:

axios — это HTTP-клиент на JavaScript.

Структура:
- lib/core/ — основная логика (адаптеры, интерцепторы)
- lib/helpers/ — утилиты (парсинг, форматирование)
- lib/adapters/ — реализации для разных окружений (Node, Browser)
- test/ — тесты

Entry point: index.js → lib/axios.js

Архитектура:
1. Request interceptor → отправка → Response interceptor
2. Поддержка Promise и async/await
3. Модульная система с адаптерами

Задача 2: Навигация по кодбейзу

Вместо чтения файлов вручную, дайте Gemini команду найти код:

gemini "Найди все функции, которые работают с заголовками HTTP.
Используй grep или search. Выведи файлы и строки кода."

Gemini автоматически запустит поиск:

# Что выполнит Gemini в фоне:
grep -r "header" lib/ --include="*.js" | head -20

И выведет результаты с контекстом.

Инструмент: read_file для анализа

Когда нужен полный контекст файла:

gemini "Я хочу понять, как работает Interceptor в axios.
Прочитай lib/core/Interceptor.js полностью и объясни логику пошагово."

Gemini прочитает файл и объяснит код построчно.

Задача 3: Генерация кода — добавим новую функцию

Теперь создайте своё расширение. Запросите:

gemini "Создай новый файл lib/utils/retry.js, который содержит функцию retry().
Функция должна:
- Принимать async функцию и количество попыток
- Повторять вызов при ошибке с экспоненциальной задержкой
- Вернуть результат или ошибку после всех попыток

Используй TypeScript с полными типами.
Добавь JSDoc комментарии.
Включи примеры использования в комментарии."

Gemini создаст файл:

/**
 * Повторный вызов функции с экспоненциальной задержкой
 * @template T
 * @param {() => Promise<T>} fn - Async функция для повтора
 * @param {number} maxAttempts - Максимум попыток
 * @param {number} initialDelay - Начальная задержка в мс (default: 100)
 * @returns {Promise<T>}
 *
 * @example
 * const result = await retry(
 *   () => fetch('/api/users'),
 *   3,
 *   100
 * );
 */
export async function retry<T>(
  fn: () => Promise<T>,
  maxAttempts: number = 3,
  initialDelay: number = 100
): Promise<T> {
  let lastError: Error | null = null;

  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
    try {
      return await fn();
    } catch (error) {
      lastError = error as Error;

      if (attempt < maxAttempts) {
        const delay = initialDelay * Math.pow(2, attempt - 1);
        await new Promise(resolve => setTimeout(resolve, delay));
      }
    }
  }

  throw lastError;
}

Файл создастся автоматически!

Задача 4: Мультифайловые правки

Это суперсила Gemini CLI — редактировать сразу несколько файлов:

gemini "Добавь функцию retry к axios. Нужно:

1. В lib/axios.js добавь import функции retry из utils/retry.js
2. В lib/core/dispatchRequest.js добавь обработку конфига retry
3. В test/unit/request.test.js напиши 3 теста для retry:
   - успешный вызов после первой ошибки
   - истощение попыток
   - проверка экспоненциальной задержки

Используй существующий стиль кода проекта (var вместо const, 4 пробела).
Дай мне ссылки на все изменения."

Gemini выведет что-то типа:

Изменения готовы!

1. lib/axios.js (добавлены 2 строки)
   ├─ import retry (строка 5)
   └─ export в public API (строка 45)

2. lib/core/dispatchRequest.js (добавлены 8 строк)
   ├─ config.retry проверка (строка 23)
   └─ обёртка в retry (строка 45-50)

3. test/unit/request.test.js (добавлены 45 строк)
   ├─ Тест 1: retry после первой ошибки [+]
   ├─ Тест 2: истощение попыток [+]
   └─ Тест 3: экспоненциальная задержка [+]

Запусти тесты: npm test

Практический пример: анализ большого проекта

Давайте посмотрим, как Gemini справляется с реальным кодом:

# Находитесь в папке проекта
gemini "Я вижу, что есть баг: при retry истощаются соединения.
Проанализируй все файлы, где используется retry.
Найди, где не закрываются соединения.
Выведи список файлов и номера строк, где нужно добавить cleanup-логику."

Gemini:

  1. Прочитает все файлы с retry
  2. Проанализирует управление ресурсами
  3. Найдёт проблемные строки
  4. Предложит fix

Режимы работы Gemini CLI

Gemini CLI работает в разных режимах:

Режим 1: Интерактивный

gemini
> Напиши функцию...
< Вывод
> Добавь обработку ошибок
< Вывод
> exit

Плюсы: контекст сохраняется между запросами, удобно дорабатывать Минусы: нужно вводить вручную

Режим 2: Одна команда

gemini "Твой запрос"

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

Режим 3: Pipe и stdin

cat requirements.txt | gemini "Создай код на основе этого файла"

Плюсы: интеграция с другими утилитами Минусы: ограничение по размеру stdin

Инструменты Gemini CLI в деталях

run_shell_command — выполнение команд

gemini "Запусти тесты проекта и покажи результаты"

Gemini выполнит npm test или python -m pytest в зависимости от типа проекта.

grep_search — поиск по кодбейзу

gemini "Найди все места, где используется переменная userData"

Использует встроенный поиск (как grep, но умнее).

read_file и replace (edit)

gemini "Читай файл package.json, дай анализ зависимостей"

Полное содержимое файла загружается в контекст для анализа.

Попробуйте сами

Практическое задание 1: Анализ собственного проекта

  1. Инициализируйте новый проект или возьмите старый:

    mkdir my-analyzer
    cd my-analyzer
    git init
  2. Создайте 3-5 файлов с кодом (может быть простой код):

    cat > main.py << 'EOF'
    def calculate(x, y):
        return x + y
    
    def main():
        result = calculate(5, 3)
        print(result)
    EOF
  3. Дайте запрос Gemini:

    gemini "Проанализируй мой проект.
    Что тут находится?
    Какая архитектура?
    Предложи улучшения."
  4. Обратите внимание на то, как Gemini анализирует структуру благодаря большому контексту.

Время: 10 минут

Практическое задание 2: Генерация с нуля

  1. Создайте чистую папку:

    mkdir weather-api
    cd weather-api
    git init
  2. Дайте большой запрос:

    gemini "Создай REST API для погоды на FastAPI.
    
    Требования:
    - GET /weather?city=Moscow - получить погоду
    - GET /forecast?city=Moscow&days=5 - прогноз на дни
    - POST /subscribe - подписаться на уведомления
    - Структура папок: app/ (логика), tests/, config/
    - Используй async/await
    - Добавь примеры .env
    - Напиши requirements.txt
    - Напиши README.md с примерами curl
    
    Создай все файлы."
  3. Проверьте, что создались все файлы:

    ls -la
    find . -type f
  4. Запустите приложение:

    pip install -r requirements.txt
    python main.py

Время: 20-25 минут

Практическое задание 3: Мультифайловые правки

  1. Возьмите проект из задания 2

  2. Запросите улучшения:

    gemini "Добавь следующие фичи ко всему проекту:
    
    1. Логирование всех запросов (используй loguru)
    2. Кеширование результатов на 1 час (Redis)
    3. Обработка ошибок с custom исключениями
    4. Тесты с pytest и fixtures
    5. Docker файл для запуска
    
    Обнови все существующие файлы.
    Создай новые файлы для логики кеша и исключений.
    Выведи список всех изменений."
  3. Просмотрите изменения:

    git diff
    git status

Время: 15-20 минут

Диаграмма: как Gemini анализирует проект

graph TD
    A["Запрос: Проанализируй проект"] -->|читает GEMINI.md| B["Контекст: стиль кода, цели"]
    B -->|список файлов| C["find . -type f"]
    C -->|выбирает важные файлы| D["Анализирует архитектуру"]
    D -->|ищет паттерны| E["Находит зависимости"]
    E -->|строит граф| F["Выводит результат"]

    style A fill:#e1f5ff
    style D fill:#c8e6c9
    style F fill:#fff9c4

Ключевые выводы

  • Gemini CLI использует инструменты: run_shell_command, read_file, grep_search, replace (edit), list_directory для работы с кодом
  • 1M контекст позволяет анализировать большие проекты целиком без разбиения на части
  • Мультифайловые правки экономят время: один запрос — множество файлов обновлено
  • Интерактивный режим удобен для итеративной разработки с уточнениями
  • Автоматизация через pipe позволяет встраивать Gemini в скрипты и CI/CD

Следующий урок

Урок 3: Когда Gemini CLI лучше, чем Claude Code

В следующем уроке вы узнаете, когда использовать Gemini CLI, а когда Claude Code, и как комбинировать оба инструмента для максимальной продуктивности.

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

Скачать урок

Есть идея или нашли ошибку?

// Обсуждение

Можно писать анонимно. Укажите email, чтобы получать уведомления об ответах.