Optimization quality-precommit
Pre-commit hook 설정 및 관리 스킬. 프로젝트에 pre-commit 환경을 구성하고, 훅 설정을 최적화한다. 코드 품질 검사를 커밋 전에 자동으로 실행하는 환경을 구축한다.
install
source · Clone the upstream repo
git clone https://github.com/sunLeee/optimization
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sunLeee/optimization "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/quality/check/quality-precommit" ~/.claude/skills/sunleee-optimization-quality-precommit && rm -rf "$T"
manifest:
.claude/skills/quality/check/quality-precommit/SKILL.mdsource content
Pre-commit 설정 관리
Pre-commit hook 환경을 구성하고 관리한다.
목적
- Pre-commit 환경 초기 설정
- 프로젝트별 훅 최적화
- CI/CD 통합 설정
- 훅 실행 성능 개선
사용법
/quality-precommit init # 초기 설정 /quality-precommit update # 훅 버전 업데이트 /quality-precommit run # 전체 파일 검사 /quality-precommit ci # CI 설정 생성
프로젝트 유형별 설정
.pre-commit-config.yaml 템플릿을 프로젝트 유형에 맞게 선택:
1. 일반 Python 프로젝트
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - id: check-toml - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.8.6 hooks: - id: ruff args: [--fix] - id: ruff-format
2. Data Science 프로젝트
repos: # 기본 + Ruff - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.8.6 hooks: - id: ruff args: [--fix] - id: ruff-format # Notebook 전용 - repo: https://github.com/kynan/nbstripout rev: 0.8.1 hooks: - id: nbstripout args: [--keep-count] - repo: https://github.com/nbQA-dev/nbQA rev: 1.9.1 hooks: - id: nbqa-ruff args: [--fix]
3. API/백엔드 프로젝트
repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - id: check-yaml - id: check-json - id: detect-private-key - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.8.6 hooks: - id: ruff args: [--fix] - id: ruff-format - repo: https://github.com/pre-commit/mirrors-mypy rev: v1.14.1 hooks: - id: mypy additional_dependencies: [pydantic, types-requests] - repo: https://github.com/PyCQA/bandit rev: 1.8.2 hooks: - id: bandit args: ['-c', 'pyproject.toml', '-r', 'src']
설치 및 실행
초기 설치
# uv 환경 uv add --dev pre-commit uv run pre-commit install uv run pre-commit install --hook-type commit-msg # pip 환경 pip install pre-commit pre-commit install pre-commit install --hook-type commit-msg
실행
# 스테이지된 파일만 검사 uv run pre-commit run # 전체 파일 검사 uv run pre-commit run --all-files # 특정 훅만 실행 uv run pre-commit run ruff --all-files # 자동 수정 uv run pre-commit run --all-files --hook-stage manual
훅 업데이트
# 모든 훅 최신 버전으로 업데이트 uv run pre-commit autoupdate # 특정 저장소만 업데이트 uv run pre-commit autoupdate --repo https://github.com/astral-sh/ruff-pre-commit
CI/CD 통합
GitHub Actions: [@templates/skill-examples/quality-precommit/ci-github-actions.yml]
pre-commit.ci 서비스: [@templates/skill-examples/quality-precommit/ci-precommit-service.yml]
성능 최적화
핵심 전략:
- 스테이지 분리: 빠른 검사(ruff)는 매 커밋, 느린 검사(mypy, bandit)는 푸시 시에만
- 파일 필터링: 필요한 디렉토리만 검사 (
,files: ^src/
)exclude: ^tests/ - 병렬 실행:
pre-commit run --all-files -j 4
상세 가이드: [@templates/skill-examples/quality-precommit/performance-optimization.md]
훅 우회
임시 우회
# 모든 훅 우회 git commit --no-verify -m "WIP: temporary commit" # 특정 훅만 우회 SKIP=mypy git commit -m "feat: add feature"
영구 제외
# .pre-commit-config.yaml - id: check-yaml exclude: | (?x)^( templates/.*\.yaml| fixtures/.*\.yaml )$
트러블슈팅
| 문제 | 해결 방법 |
|---|---|
| 훅 동작 안함 | |
| 캐시 오류 | |
| 특정 훅 실패 | |
관련 스킬
| 스킬 | 역할 |
|---|---|
| [@skills/quality-ruff/SKILL.md] | Ruff 린터/포맷터 설정 |
| [@skills/quality-mypy/SKILL.md] | mypy 타입 검사 설정 |
| [@skills/quality-bandit/SKILL.md] | Bandit 보안 검사 설정 |
| [@skills/check-python-style/SKILL.md] | 코드 스타일 검증 |
Changelog
| 날짜 | 버전 | 변경 내용 |
|---|---|---|
| 2026-01-27 | 1.1.0 | 보수적 리팩토링 - 409→262줄. CI/CD 및 성능 최적화 템플릿 분리 |
| 2026-01-21 | 1.0.0 | 초기 생성 - Pre-commit 설정 관리 |
Gotchas (실패 포인트)
clone 후 1회 실행 안 하면 hook이 동작 안 함pre-commit install
사용 절대 금지 (팀 규칙 AW-010)--no-verify- hooks 버전이 고정되어 있으면 보안 취약점 패치 누락 가능 — 주기적
pre-commit autoupdate - Python 버전 불일치 시 hook 실행 실패 —
에 language_version 명시.pre-commit-config.yaml