effect Лучшие практики
Enforces Effect-TS patterns for services, errors, layers, and atoms. Use when writing code with Effect.Service, Schema.TaggedError, Layer composition, or effect-atom React components.
AImakisuo
official
Документы
Что делает навык
Набор правил и паттернов для Effect-TS, обеспечивающий типобезопасность, тестируемость и поддерживаемость кода через стандартизацию сервисов, ошибок, слоёв и атомов. Включает требования к настройке Effect Language Server для обнаружения ошибок на этапе редактирования.
Когда применять
- Определение бизнес-логики через Effect.Service с явным указанием зависимостей и доступных методов.
- Создание специфичных типов ошибок с использованием Schema.TaggedError для сериализации и RPC.
- Композиция зависимостей с помощью Layer.mergeAll или Layer.provideMerge вместо ручного предоставления.
- Управление глобальным состоянием и побочными эффектами в React-компонентах через effect-atom.
- Обеспечение типобезопасности идентификаторов сущностей через Schema.brand.
Как работает
- Установить @effect/language-service и добавить его в плагин tsconfig.json, используя локальную версию TypeScript в редакторе.
- Определять сервисы через Effect.Service с accessors: true и явным списком dependencies, избегая ручного Layer.provide в местах использования.
- Создавать ошибки через Schema.TaggedError с конкретными полями и аннотациями HTTP-статусов, используя catchTag/catchTags для обработки.
- Маркировать ID сущностей через Schema.UUID.pipe(Schema.brand(...)) и использовать Option<T> вместо null/undefined.
- Определять функции сервисов через Effect.fn с именами для трассировки и использовать Effect.log для структурированного логирования.
- Комбинировать слои через Layer.mergeAll для плоской композиции или Layer.provideMerge для инкрементального объединения.
Примеры запросов агенту
Напиши сервис UserService с зависимостями от UserRepo и CacheService, используя Effect.Service и Effect.fn.
Определи ошибку UserNotFoundError через Schema.TaggedError с userId и статусом 404, а также обработай её через catchTag.
Создай Layer для приложения, объединяющий сервисы через Layer.mergeAll и инфраструктурные слои.
Что понадобится
- npm пакет @effect/language-service
- Настройка tsconfig.json с плагином @effect/language-service
- Использование локальной версии TypeScript в IDE (VSCode или JetBrains)
Описание составлено по SKILL.md навыка, сверено 05.10.2026.
Как подключить
1Скачать навык
# возьмите папку навыка «effect-best-practices» из репозитория:
# https://github.com/makisuo/skills
2Положить папку с
SKILL.md к навыкам ассистента# положите папку навыка туда, где ассистент ищет skills:
cp -r effect-best-practices/ ~/.claude/skills/effect-best-practices/
Навык — папка с файлом SKILL.md (описание + инструкции) и опциональными скриптами. Ассистент (Claude, Claude Code и совместимые) подхватывает его по описанию и следует шагам.