Введение
Claude Code — это инструмент командной строки от Anthropic, который позволяет интегрировать ИИ-ассистента прямо в ваш рабочий процесс разработки. В отличие от веб-интерфейса, Claude Code работает с вашим кодом локально, понимает структуру проекта, систему контроля версий и может выполнять изменения в реальном времени. Однако, как и любой мощный инструмент, он требует правильных промтов (запросов) для эффективной работы.
В этой статье я собрал 15 проверенных промтов для Claude Code, разделённых на три категории: базовые (для повседневных задач), продвинутые (для рефакторинга и код-ревью) и экспертные (для проектирования архитектуры). Каждый промт сопровождается примером результата и практическим советом. Мы рассмотрим, как формулировать запросы, чтобы Claude Code не просто генерировал код, а делал это осмысленно, с учётом контекста вашего проекта.
Базовые промты: повседневные задачи
1. Генерация функции по спецификации
Задача: Быстро создать функцию для обработки данных.
Промт:
Напиши функцию на Python, которая принимает список словарей с ключами 'name' и 'age', фильтрует людей старше 18 лет и возвращает отсортированный по возрасту список имён. Добавь type hints и docstring.
Пример результата:
def filter_and_sort_adults(people: list[dict]) -> list[str]:
"""
Фильтрует людей старше 18 лет и возвращает отсортированные имена.
Args:
people: Список словарей с ключами 'name' и 'age'.
Returns:
Отсортированный по возрасту список имён взрослых.
"""
adults = [p for p in people if p.get('age', 0) > 18]
return [p['name'] for p in sorted(adults, key=lambda x: x['age'])]
Совет: Всегда уточняйте язык, типы данных и желаемый стиль (type hints, docstring). Это экономит время на доработку.
2. Написание тестов для существующего кода
Задача: Покрыть функцию тестами.
Промт:
Напиши pytest-тесты для функции filter_and_sort_adults. Проверь: пустой список, список без взрослых, список с дубликатами имён, граничное значение 18 лет. Используй parametrize.
Пример результата:
import pytest
def test_filter_and_sort_adults():
assert filter_and_sort_adults([]) == []
assert filter_and_sort_adults([{'name': 'Alice', 'age': 16}]) == []
assert filter_and_sort_adults([{'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 18}]) == ['Alice', 'Bob']
@pytest.mark.parametrize("people,expected", [
([], []),
([{'name': 'John', 'age': 15}], []),
([{'name': 'Jane', 'age': 18}], []),
([{'name': 'Jane', 'age': 19}], ['Jane']),
])
def test_filter_and_sort_adults_param(people, expected):
assert filter_and_sort_adults(people) == expected
Совет: Claude Code хорошо понимает контекст, поэтому можно ссылаться на соседние файлы или функции. Например: "Напиши тесты для функции из файла utils.py".
3. Объяснение фрагмента кода
Задача: Понять сложный участок legacy-кода.
Промт:
Объясни, что делает следующий код на JavaScript. Разбей по шагам:
const res = await fetch('/api/users');
const data = await res.json();
const names = data.reduce((acc, user) => {
if (user.active) acc.push(user.name);
return acc;
}, []);
console.log(names.join(', '));
Пример результата:
Шаг 1: fetch отправляет GET-запрос к /api/users и ждёт ответ. Шаг 2: res.json() парсит тело ответа как JSON. Шаг 3: reduce проходит по массиву users, и если user.active === true, добавляет имя в аккумулятор. Шаг 4: console.log выводит имена через запятую.
4. Исправление бага с контекстом
Задача: Исправить ошибку на основе стек-трейса.
Промт:
В моём проекте возникает ошибка: TypeError: Cannot read properties of undefined (reading 'name'). Вот код:
users.forEach(user => console.log(user.profile.name));
Исправь, добавив проверку на undefined.
Пример результата:
users.forEach(user => {
const name = user?.profile?.name || 'Unknown';
console.log(name);
});
Продвинутые промты: рефакторинг и код-ревью
5. Рефакторинг с улучшением читаемости
Задача: Сделать код понятнее и короче.
Промт:
Отрефактори следующий код на Python. Улучши читаемость: вынеси магические числа в константы, замени цикл на list comprehension, добавь аннотации типов:
def process(items):
result = []
for i in items:
if i > 10:
result.append(i * 2 + 5)
return result
Пример результата:
from typing import List
THRESHOLD = 10
MULTIPLIER = 2
OFFSET = 5
def process_items(items: List[int]) -> List[int]:
"""
Обрабатывает список чисел: фильтрует, умножает и добавляет смещение.
"""
return [item * MULTIPLIER + OFFSET for item in items if item > THRESHOLD]
Совет: Указывайте, что именно хотите улучшить: производительность, читаемость или безопасность. Claude Code может предложить несколько вариантов.
6. Код-ревью с акцентом на безопасность
Задача: Проверить код на уязвимости.
Промт:
Проведи код-ревью следующего Flask-приложения. Найди проблемы безопасности (SQL-инъекции, XSS, CSRF, неправильная аутентификация). Дай рекомендации по исправлению:
@app.route('/user/<id>')
def get_user(id):
query = f"SELECT * FROM users WHERE id = {id}"
cursor.execute(query)
user = cursor.fetchone()
return f"<h1>{user[1]}</h1>"
Пример результата:
Проблемы: 1) SQL-инъекция — используйте параметризованные запросы. 2) XSS — экранируйте вывод. Исправление:
from flask import escape
@app.route('/user/<int:id>')
def get_user(id):
cursor.execute("SELECT * FROM users WHERE id = ?", (id,))
user = cursor.fetchone()
return f"<h1>{escape(user[1])}</h1>"
7. Рефакторинг с изменением паттерна
Задача: Переписать спагетти-код с использованием паттерна.
Промт:
Перепиши этот код с использованием паттерна Стратегия. У нас есть разные способы расчёта скидки: percentage, fixed, none. Создай классы для каждой стратегии.
def apply_discount(price, discount_type, value):
if discount_type == 'percentage':
return price * (1 - value / 100)
elif discount_type == 'fixed':
return price - value
else:
return price
Пример результата:
from abc import ABC, abstractmethod
class DiscountStrategy(ABC):
@abstractmethod
def apply(self, price: float) -> float:
pass
class PercentageDiscount(DiscountStrategy):
def __init__(self, percent: float):
self.percent = percent
def apply(self, price):
return price * (1 - self.percent / 100)
class FixedDiscount(DiscountStrategy):
def __init__(self, amount: float):
self.amount = amount
def apply(self, price):
return max(0, price - self.amount)
class NoDiscount(DiscountStrategy):
def apply(self, price):
return price
8. Оптимизация производительности
Задача: Ускорить медленный участок кода.
Промт:
Этот код обрабатывает список из миллиона записей и работает очень медленно. Оптимизируй: используй генераторы, избегай лишних копирований, добавь профилирование.
def process_big_data(data):
result = []
for item in data:
if item['status'] == 'active':
result.append(item['value'] * 2)
return result
Пример результата:
def process_big_data(data):
return (item['value'] * 2 for item in data if item['status'] == 'active')
Генератор не создаёт промежуточный список, что экономит память. Для профилирования используйте cProfile.
Экспертные промты: проектирование архитектуры
9. Проектирование микросервиса
Задача: Спроектировать архитектуру нового микросервиса.
Промт:
Спроектируй микросервис для управления заказами в интернет-магазине. Он должен: создавать заказы, проверять статус, отменять. Используй FastAPI, PostgreSQL, Redis для кэширования. Опиши модели данных, эндпоинты, схему БД. Учти идемпотентность.
Пример результата:
Модели: Order (id, user_id, status, total, created_at), OrderItem (id, order_id, product_id, quantity, price). Эндпоинты: POST /orders (создание, идемпотентность через idempotency-key), GET /orders/{id} (статус), DELETE /orders/{id} (отмена). Redis для кэширования статуса. БД: индексы по user_id и status.
10. Выбор архитектурного паттерна
Задача: Сравнить подходы для конкретного сценария.
Промт:
Мы создаём систему аналитики в реальном времени. Сравни Event-Driven и Batch Processing архитектуры. Дай рекомендацию для сценария: 10 000 событий в секунду, требуется агрегация с задержкой не более 5 секунд. Учти AWS-сервисы (Kinesis, Lambda, S3).
Пример результата:
Event-Driven (Kinesis + Lambda) лучше подходит для низкой задержки. Batch (S3 + Glue) — для исторической аналитики. Рекомендуется гибрид: Kinesis для потоковой обработки с окнами агрегации и S3 для долгосрочного хранения.
11. Рефакторинг архитектуры legacy-системы
Задача: Перевести монолит на микросервисы.
Промт:
У нас монолит на Django. Нужно выделить модуль авторизации в отдельный микросервис. Опиши шаги: выделение кода, создание API, работа с JWT, синхронизация сессий. Учти, что другие сервисы зависят от текущей модели User.
Пример результата:
Шаг 1: Создайте отдельный проект FastAPI для auth. Шаг 2: Реализуйте POST /auth/login, POST /auth/verify. Шаг 3: Используйте JWT (access+refresh токены). Шаг 4: В монолите замените прямые вызовы ORM на HTTP-запросы к auth-сервису. Шаг 5: Кэшируйте токены в Redis.
12. Проектирование API с версионированием
Задача: Создать план API для публичного сервиса.
Промт:
Спроектируй REST API для сервиса управления задачами (Trello-like). Учти: версионирование (v1, v2), пагинацию, фильтрацию, rate limiting, документацию OpenAPI. Опиши эндпоинты для досок, колонок и задач.
Пример результата:
/v1/boards (GET, POST), /v1/boards/{id} (GET, PUT, DELETE), /v1/boards/{id}/columns (GET, POST), /v1/boards/{id}/columns/{col_id}/tasks (GET, POST). Пагинация через cursor-based (query param ?cursor=...). Rate limiting: 100 запросов в минуту для бесплатного тарифа.
13. Интеграция с внешним API
Задача: Разработать план интеграции.
Промт:
Нужно интегрировать наше приложение с внешним CRM-сервисом (например, Salesforce). Опиши: как обрабатывать OAuth2, кэшировать токены, обрабатывать ошибки (429 Too Many Requests), синхронизировать данные в фоне. Предложи библиотеки для Python.
Пример результата:
Используйте requests-oauthlib для OAuth2, храните refresh token в БД, кэшируйте access token в Redis. Для rate limiting — tenacity с exponential backoff. Фоновая синхронизация через Celery с retry-механизмом. ASI Biont поддерживает подключение к CRM-системам через API — подробнее на asibiont.com/courses.
14. Проектирование базы данных
Задача: Создать схему БД для многопользовательского приложения.
Промт:
Спроектируй схему БД для SaaS-приложения по управлению проектами. Учти: мультитенантность (shared database, shared schema), роли пользователей (admin, editor, viewer), аудит изменений. Используй PostgreSQL.
Пример результата:
Таблицы: tenants (id, name, plan), users (id, email, tenant_id, role), projects (id, name, tenant_id, created_by), audit_log (id, user_id, action, timestamp). Индексы: (tenant_id, email) для users, (tenant_id, created_at) для projects. Row-Level Security для изоляции данных.
15. Выбор стека технологий
Задача: Обосновать выбор технологий для стартапа.
Промт:
Мы запускаем стартап — платформу для онлайн-курсов. Нужно выбрать стек для MVP: фронтенд (React/Vue), бэкенд (Node/Python), БД (PostgreSQL/MongoDB), инфраструктура (AWS/GCP). Учти: скорость разработки, стоимость, масштабируемость до 10 000 пользователей.
Пример результата:
Фронтенд: React (Next.js) для SSR и SEO. Бэкенд: Python (FastAPI) для быстрой разработки и отличной документации. БД: PostgreSQL (реляционная, подходит для курсов и юзеров). Инфраструктура: AWS (ECS + RDS) — гибко и популярно.
Заключение
Claude Code — это не просто автодополнение кода, а полноценный ассистент, который может взять на себя задачи от рефакторинга до проектирования архитектуры. Главное — правильно формулировать промты. Как вы заметили, качество результата напрямую зависит от контекста: чем больше деталей вы укажете (язык, библиотеки, требования), тем точнее будет ответ.
Начните с базовых промтов, постепенно переходя к продвинутым и экспертным. Не бойтесь экспериментировать — Claude Code позволяет итеративно уточнять запросы. Помните, что ИИ — это инструмент, а не замена ревью и тестирования. Всегда проверяйте сгенерированный код на безопасность и соответствие стандартам вашего проекта.
Если вы хотите углубить свои навыки работы с ИИ-инструментами в разработке, обратите внимание на специализированные курсы, которые помогут вам освоить промпт-инжиниринг для программирования. Удачи в кодинге!
Комментарии