Communitygithub.com

Nuvraxis/nuvraxis-plugins

Biome 2.5 설정과 규칙을 Nuvraxis 모노레포에 적용합니다. 루트 biome.json, VCS 무시, 포매터 설정, 권장 프리셋(a11y, react/next 도메인 포함), nursery 정책, import 정리, 오버라이드, 패키지별 중첩 설정, 로컬 및 CI 명령, VS Code 설정, ESLint/Prettier 마이그레이션을 다룹니다.

nuvraxis-plugins란 무엇인가요?

이 스킬은 Nuvraxis 모노레포에서 Biome 2.5를 설정하고 사용하기 위한 포괄적인 가이드입니다. Biome은 JS, TS, JSX, JSON, CSS를 위한 유일한 포매터이자 린터로, ESLint와 Prettier를 대체합니다. 루트 biome.json을 진실 공급원으로 삼고, 각 패키지가 'extends'를 통해 이를 상속받도록 합니다. 주요 기능으로는 고정된 스키마 버전, VCS 기반 무시 파일, 2칸 들여쓰기 등 일관된 포매터 설정, 'recommended' 프리셋과 a11y, react, next 도메인을 포함한 린터 규칙, 자동 import 정리, 테스트 파일에 대한 오버라이드, 로컬 개발 시 'biome check --write', CI에서 'biome ci' 사용, VS Code에서 Biome을 기본 포매터로 설정하고 저장 시 자동 수정, ESLint/Prettier에서 마이그레이션 절차 등이 포함됩니다. SCSS 파일은 stylelint가 처리하며, YAML, Markdown, 타입 오류는 다른 도구가 담당합니다. 이 스킬은 특히 Biome을 처음 도입하거나 기존 ESLint/Prettier 설정을 대체하려는 팀에게 유용하며, Claude Code, Cursor, Codex 등 다양한 AI 에이전트 플랫폼에서 사용할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Nuvraxis/nuvraxis-plugins/tree/HEAD/plugins/nuvraxis-frontend/skills/biome

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Biome

Biome은 JS, TS, JSX, JSON, CSS를 위한 유일한 포매터이자 린터입니다. SCSS는 예외입니다. Biome 2.5는 SCSS를 파싱하지 않으므로 stylelint가 .scss를 처리합니다(scss-bem 참조). ESLint나 Prettier는 사용하지 않습니다.

템플릿의 루트 biome.json이 진실 공급원(source of truth)입니다. 플러그인 훅은 Claude가 파일을 편집할 때마다 해당 파일 위에 biome.json이 있으면 pnpm exec biome check --write <file>을 실행합니다.

규칙

  1. 하나의 루트 biome.json으로, 스키마를 설치된 버전에 고정합니다. "$schema": "https://biomejs.dev/schemas/2.5.15/schema.json"로 설정하고, 워크스페이스 카탈로그에서 @biomejs/biome도 같은 버전으로 고정합니다. 스키마가 일치하지 않으면 편집기에서 알 수 없거나 이름이 변경된 옵션이 숨겨집니다. 업그레이드 시 pnpm exec biome migrate --write를 실행하고 둘 다 업데이트합니다.

  2. git이 무시할 파일을 결정하도록 합니다: vcs.useIgnoreFile: true. 그런 다음 files.includes에 !!로 빌드 출력물을 강제 무시합니다(!!**/.next, !!**/.turbo, !!**/dist, !!**/coverage). 이렇게 하면 Biome이 해당 폴더를 스캔하지 않습니다. ! 하나는 처리는 제외하지만 여전히 인덱싱합니다. files.ignoreUnknown: true는 .scss 및 기타 지원되지 않는 파일이 보고되지 않도록 합니다.

  3. 포매터: 2칸 들여쓰기, 너비 100, LF, 쌍따옴표, 세미콜론, 후행 쉼표. 모든 레포지토리에 대해 이 값이 고정되어 있어 diff가 스타일로 싸우지 않습니다. 패키지별 포매터 오버라이드를 추가하지 마세요.

  4. 린터: preset: "recommended", a11y: "error", 도메인 react와 next는 recommended로. rules.recommended: true는 예전 표기이며 더 이상 사용되지 않습니다. rules.preset을 사용하세요. a11y를 error로 설정하는 이유는 nuvui가 자체 컴포넌트의 접근성을 처리하므로, 남은 부분(자체 마크업에서 alt, 레이블, 버튼 타입 등)은 반드시 올바르게 되어야 하기 때문입니다. next 도메인은 noImgElement와 같은 규칙을 추가하고, react는 훅 규칙을 추가합니다.

  5. Nursery는 비활성화합니다. Nursery 규칙은 패치 릴리스 사이에 변경될 수 있으며, Biome 업그레이드 시 CI를 깨뜨릴 수 있습니다. 필요 시 이름을 명시하고 이유를 주석으로 남겨 하나씩 신중하게 활성화하고, 업그레이드할 때마다 다시 확인합니다.

  6. noConsole은 경고(warn)로 설정하고, error와 warn은 허용합니다. 구조화된 오류 로그(instrumentation.ts)는 console.error를 사용하고, 잘못된 console.log는 잡아냅니다.

  7. import를 수동이 아닌 도움(assist)으로 정렬합니다. assist.actions.source.organizeImports: "on"으로 설정합니다. biome check --write가 이를 적용하고, biome ci는 정렬되지 않은 import에 대해 실패합니다.

  8. 테스트 파일 등에 대해 glob별 오버라이드를 사용합니다. 템플릿은 *.test.ts(x) / *.test-d.ts에 대해서만 test 도메인을 활성화합니다. 다른 파일 타입의 차이는 별도 설정이 아닌 여기에 넣습니다.

  9. 중첩 설정은 실제로 차이가 있는 패키지에만 사용하며, 루트를 확장(extends)합니다.

    // packages/legacy-widget/biome.json
    { "extends": "//", "linter": { "rules": { "style": { "noNonNullAssertion": "off" } } } }
    

    "extends": "//"는 "루트 설정"을 의미하며 "root": false를 암시합니다. 다른 중첩 설정은 반드시 "root": false로 설정해야 합니다. 공유 @repo/biome-config 패키지는 사용하지 않습니다. 루트 파일과 //로 빌드나 의존성 없이 처리됩니다.

  10. 로컬에서는 biome check --write; CI에서는 biome ci. pnpm lint는 biome check .를 실행합니다(쓰기 없음). pnpm lint:fix는 biome check --write .를 실행합니다. CI는 pnpm exec biome ci --reporter=github .를 실행하며, 쓰지 않고 포매팅, 린트, import 순서에 실패하면 PR에 주석을 답니다. 전체 실행이 느려질 경우에만 --changed --since=origin/main을 추가하세요. 현재는 밀리초 단위로 빠릅니다.

  11. 한 줄만 억제하고, 이유를 남깁니다.

    // biome-ignore lint/suspicious/noExplicitAny: third-party callback typed as any upstream
    

    한 파일을 통과시키기 위해 레포 전체에서 규칙을 비활성화하지 마세요. 규칙이 레포에 적합하지 않다면, biome.json을 변경하고 이유와 함께 별도 커밋으로 만듭니다.

  12. 수정하세요. 흔한 규칙은 침묵시키지 말고 고치세요.

    • useImportType: 수정을 실행하세요. verbatimModuleSyntax에 필요합니다.
    • noExplicitAny: unknown을 사용하고 파싱하세요(typescript-production 참조).
    • useButtonType, noSvgWithoutTitle, useAltText: 실제 접근성 버그입니다.
    • noImgElement: next/image를 사용하세요.
    • useExhaustiveDependencies: 의존성 목록을 수정하거나 컴포넌트 밖으로 값을 이동하세요.
  13. VS Code: Biome을 기본 포매터로 설정하고, 저장 시 수정합니다. 템플릿의 .vscode/settings.json은 editor.defaultFormatter: "biomejs.biome", 저장 시 source.fixAll.biome 및 source.organizeImports.biome, 그리고 biome.requireConfiguration: true를 설정하여 Biome이 없는 레포에서는 확장이 조용히 동작하도록 합니다. SCSS는 stylelint 확장을 유지합니다. .vscode/extensions.json에 둘 다 추천합니다.

  14. ESLint/Prettier에서 마이그레이션: 마이그레이션 후 삭제합니다. references/migration.md를 참조하세요. 최종 상태는 eslint*, prettier* 또는 @typescript-eslint/* 패키지가 없고, .eslintrc*, eslint.config.*, .prettierrc*, .prettierignore도 없어야 합니다.

Biome이 다루지 않는 것

파일도구
.scssstylelint (scss-bem)
.yaml (워크플로우, Helm)워크플로우는 actionlint; 차트는 helm lint + kubeconform
.md강제하지 않음
타입 오류tsc --noEmit (pnpm typecheck)

확인

pnpm lint                               # biome check . && stylelint
pnpm exec biome ci --reporter=github .  # CI에서 실행하는 것
pnpm exec biome rage                    # 무시된 것 같으면 해결된 설정 출력

출처

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

Nuvraxis/nuvraxis-plugins

>- Dockerfile rules for Next.js standalone apps in a pnpm + Turborepo monorepo — multi-stage build (turbo prune → pnpm fetch/offline install → turbo build → minimal runner), pinned Node 26 Alpine by digest, checksum-verified pnpm binary, non-root uid 1001, read-only root filesystem with a writable .next/cache, HEALTHCHECK on /api/health, build args only for NEXT_PUBLIC_* values, BuildKit secrets and cache mounts, multi-arch, OCI labels and .dockerignore. Use when the repo has a Dockerfile, .dockerignore, compose file, or next.config with output "standalone", or when asked to containerise, shrink, harden or debug an image.

Nuvraxis/nuvraxis-plugins

>- GitHub Actions conventions for Nuvraxis Next.js apps — exactly three workflows: pr.yaml (every PR to any branch: Biome, stylelint, typecheck/test/build with turbo --affected, Docker build + health check, helm lint + kubeconform; publishes nothing), main.yaml (push to main: one multi-arch image to GHCR tagged sha-SHORTSHA and main, provenance + SBOM, gha cache), release.yaml (tag vX.Y.Z: verify on main, retag the existing image without rebuilding, package and push the Helm chart to OCI, GitHub Release with chart, digest and SBOM). Minimal permissions per job, GITHUB_TOKEN only, pinned action majors. Use when editing .github/workflows/*, adding a CI step, or debugging a failed run or release.

Nuvraxis/nuvraxis-plugins

>- Helm chart rules for Nuvraxis Next.js apps — one chart per app in charts/ (named after the app), published to oci://ghcr.io/nuvraxis/charts and synced by Argo CD; Chart.yaml version/appVersion set only by release.yaml; Deployment with startup/liveness/readiness probes on /api/health, non-root read-only security context, emptyDir for .next/cache, ConfigMap + existing Secret via envFrom, Service, Ingress with cert-manager, HPA, PDB, ServiceAccount, topology spread; no Helm hooks; helm lint --strict + kubeconform. Use when the repo has charts/, Chart.yaml, values*.yaml, templates/*.yaml with Helm syntax, or an Argo CD Application, or when asked to deploy, scale, expose or configure the app on Kubernetes.

Nuvraxis/nuvraxis-plugins

>- Production rules for Next.js 16 App Router apps at Nuvraxis — Server/Client Component boundaries, Cache Components ("use cache", cacheLife, cacheTag, updateTag), Server Actions, route handlers, env handling, instrumentation, output standalone and the /api/health route. Use when the project has "next" in package.json, an app/ or src/app/ directory, next.config.ts, proxy.ts, instrumentation.ts, or files named page.tsx, layout.tsx, route.ts, loading.tsx, error.tsx.

관련 스킬