Claude Code CLI: первые впечатления, ч.3
Я слышал, что люди используют Claude Code как автономного агента. Дают ему многошаговые инструкции и отпускают вольно ковыряться в коде на полчаса.
Я к этому пока не пришёл. Сложно отпустить контроль в принципе, а тем более — в нагруженной системе, где есть риск даунтайма и высоких затрат.
Поделюсь кейсом, над которым я работал вчера-сегодня.
Контекст
У нас есть endpoint, который для заданного id подкаста или эпизода вытаскивает из бэкенда URL картинки, предоставленной подкастером, и сжимаёт её в несколько раз. Также он генерит из квадратной обложки широкоформатное изображения для соц сетей.
Эти изображения кэшируются на Cloudflare и используются мобильными и веб приложениями.
Задачи
Мы запускаем поддержку приватных подкастов. Это работает так — на каком-нибудь Patreon или Substack пользователь оплачивает подписку на платный подкаст и ему выдаётся уникальный URL, который он может добавить в Metacast или другое приложение.
Нужно было сделать так, чтобы изображения приватных подкастов случайно не слились через наш сервис. Когда приватный подкаст открывают по ссылке мы будем показывать сильно заблюренное изображение с надписью private podcast посередине.
Заодно, пока я над этим работал, я решил добавить мониторинг сервиса в Sentry.
Таким образом, стояло две задачи.
Задача 1: Изображения
С манипуляцией изображений и сопутствующей логикой Claude Code справился лучше меня. Я не знаток библиотеки Sharp и CC сделал всё как надо с точки зрения фукнционала.
Но сделал он это с повторением кода и нечитаемо. Через 3-4 итерации всё было разложено по модулям, как надо.
Урок: Надо сразу прописывать детальные инструкции куда что идёт, если хочется сделать за раз.
Контр-поинт: Не уверен, что это будет быстрее, чем просто делать последовательные итерации вместе с ИИ.
Задача 2: Инструментация Sentry
У меня были большие ожидания. Я не хотел тратить много времени и был готов довериться Claude Code. А он наделал ошибок.
-
Для начала, он использовал старую документацию. После того как я дал ему ссылку на новую, он всё исправил.
-
Куча дублирующегося кода. Опять та же самая проблема. Удобно, что можно выделить строку и спросить "do we need this?" и почти всегда ответ "you're absolutely right! let's make it simpler..." или что-то вроде того.
-
Код работал, но ивенты не появлялись в Sentry. Я безуспешно потратил около часа с Claude Code и в итоге лёг спать. Утром мне пришла в голову мысль, что мы же работаем в serverless в Vercel и, когда возникает исключение, функция прекращает исполнение и ивенты с исключениями не успевают отправиться на сервер (асинхронность Node.js, к которой я ещё привыкаю).
Что ж. В этом-то и была загвоздка. Под очередное "you're right" Claude Code добавилawait
там, где было нужно, и всё заработало.
Урок: давать ИИ контекст про среду исполнения, хоть об этом можно было и догадаться по кодовой базе.