clean-codebase
정보
이 스킬은 비즈니스 로직을 변경하지 않고 데드 코드를 제거하고 린트 경고를 수정하며 포맷팅을 표준화하여 기술 부채를 정리합니다. 신속한 개발 과정에서 사용되지 않는 임포트, 일관성 없는 포맷팅 또는 정적 분석 경고가 누적되었을 때 사용하세요. 이는 기존 아키텍처를 유지하면서 코드 위생 개선에 중점을 둡니다.
빠른 설치
Claude Code
추천npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/clean-codebaseClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
Codebasis bereinigen
Wann verwenden
Diesen Skill verwenden wenn eine Codebasis Hygieneschulden angehaeuft hat:
- Lint-Warnungen haben sich waehrend schneller Entwicklung angehaeuft
- Ungenutzte Imports und Variablen ueberladen Dateien
- Tote Codepfade existieren, wurden aber nie entfernt
- Formatierung ist ueber Dateien hinweg inkonsistent
- Statische Analysewerkzeuge melden behebbare Probleme
NICHT verwenden fuer architektonisches Refactoring, Fehlerbehebungen oder Aenderungen der Geschaeftslogik. Dieser Skill konzentriert sich ausschliesslich auf Hygiene und automatisierte Bereinigung.
Eingaben
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
codebase_path | string | Ja | Absoluter Pfad zum Codebasis-Stammverzeichnis |
language | string | Ja | Primaersprache (js, python, r, rust usw.) |
cleanup_mode | enum | Nein | safe (Standard) oder aggressive |
run_tests | boolean | Nein | Testsuite nach Bereinigung ausfuehren (Standard: true) |
backup | boolean | Nein | Backup vor Loeschung erstellen (Standard: true) |
Vorgehensweise
Schritt 1: Vorbewertung
Den aktuellen Zustand messen um Verbesserungen spaeter zu quantifizieren.
# Lint-Warnungen nach Schweregrad zaehlen
lint_tool --format json > lint_before.json
# Codezeilen zaehlen
cloc . --json > cloc_before.json
# Ungenutzte Symbole auflisten (sprachabhaengig)
# JavaScript/TypeScript: ts-prune oder depcheck
# Python: vulture
# R: lintr-Pruefung ungenutzter Funktionen
Erwartet: Ausgangskennzahlen in lint_before.json und cloc_before.json gespeichert
Bei Fehler: Wenn das Lint-Werkzeug nicht gefunden wird, automatisierte Korrekturen ueberspringen und auf manuelle Pruefung konzentrieren
Schritt 2: Automatisierte Lint-Warnungen beheben
Sichere automatisierte Korrekturen anwenden (Abstande, Anfuehrungszeichen, Semikolons, nachfolgende Leerzeichen).
JavaScript/TypeScript:
eslint --fix .
prettier --write .
Python:
black .
isort .
ruff check --fix .
R:
Rscript -e "styler::style_dir('.')"
Rust:
cargo fmt
cargo clippy --fix --allow-dirty
Erwartet: Alle sicheren Lint-Warnungen behoben; Dateien konsistent formatiert
Bei Fehler: Wenn automatisierte Korrekturen Testfehler einfuehren, Aenderungen rueckgaengig machen und eskalieren
Schritt 3: Tote Codepfade identifizieren
Statische Analyse verwenden um unreferenzierte Funktionen, ungenutzte Variablen und verwaiste Dateien zu finden.
JavaScript/TypeScript:
ts-prune | tee dead_code.txt
depcheck | tee unused_deps.txt
Python:
vulture . | tee dead_code.txt
R:
Rscript -e "lintr::lint_dir('.', linters = lintr::unused_function_linter())"
Allgemeiner Ansatz:
- Nach Funktionsdefinitionen suchen
- Nach Funktionsaufrufen suchen
- Funktionen melden die definiert aber nie aufgerufen werden
Erwartet: dead_code.txt listet ungenutzte Funktionen, Variablen und Dateien auf
Bei Fehler: Wenn das statische Analysewerkzeug nicht verfuegbar ist, manuell die juengste Commit-Historie auf verwaisten Code pruefen
Schritt 4: Ungenutzte Imports entfernen
Importbloecke bereinigen indem Referenzen auf nie verwendete Pakete entfernt werden.
JavaScript:
eslint --fix --rule 'no-unused-vars: error'
Python:
autoflake --remove-all-unused-imports --in-place --recursive .
R:
# Manuelle Pruefung: nach library()-Aufrufen suchen, pruefen ob Paket verwendet wird
grep -r "library(" . | cut -d: -f2 | sort | uniq
Erwartet: Alle ungenutzten Import-Anweisungen entfernt
Bei Fehler: Wenn das Entfernen von Imports den Build bricht, wurden sie indirekt verwendet — wiederherstellen und dokumentieren
Schritt 5: Toten Code entfernen (modusabhaengig)
Sicherer Modus (Standard):
- Nur explizit als veraltet markierten Code entfernen
- Auskommentierte Codebloecke entfernen (wenn >10 Zeilen und >6 Monate alt)
- TODO-Kommentare entfernen die auf abgeschlossene Issues verweisen
Aggressiver Modus (opt-in):
- Alle in Schritt 3 als ungenutzt identifizierten Funktionen entfernen
- Private Methoden mit null Referenzen entfernen
- Feature-Flags fuer veraltete Features entfernen
Fuer jede Loeschkandidatin:
- Null Referenzen in der Codebasis verifizieren
- Git-Historie auf juengste Aktivitaet pruefen (ueberspringen wenn in den letzten 30 Tagen geaendert)
- Code entfernen und Eintrag in
CLEANUP_LOG.mdhinzufuegen
Erwartet: Toter Code entfernt; CLEANUP_LOG.md dokumentiert alle Loeschungen
Bei Fehler: Wenn unsicher ob Code wirklich tot ist, in ein archive/-Verzeichnis verschieben statt zu loeschen
Schritt 6: Formatierung vereinheitlichen
Konsistente Formatierung ueber alle Dateien sicherstellen (auch wenn nicht von Lintern erfasst).
- Zeilenenden normalisieren (LF vs CRLF)
- Einzelnen Zeilenumbruch am Dateiende sicherstellen
- Nachfolgende Leerzeichen entfernen
- Einrueckung normalisieren (Leerzeichen vs Tabs, Einrueckungstiefe)
# Beispiel: Zeilenenden und nachfolgende Leerzeichen beheben
find . -type f -name "*.js" -exec sed -i 's/\r$//' {} +
find . -type f -name "*.js" -exec sed -i 's/[[:space:]]*$//' {} +
Erwartet: Alle Dateien folgen konsistenten Formatierungskonventionen
Bei Fehler: Wenn sed Binaerdateien beschaedigt, ueberspringen und dokumentieren
Schritt 7: Tests ausfuehren
Validieren dass die Bereinigung die Funktionalitaet nicht beeintraechtigt hat.
# Sprachspezifischer Testbefehl
npm test # JavaScript
pytest # Python
R CMD check # R
cargo test # Rust
Erwartet: Alle Tests bestehen (oder dieselben Fehler wie vor der Bereinigung)
Bei Fehler: Aenderungen inkrementell rueckgaengig machen um die brechende Aenderung zu identifizieren, dann eskalieren
Schritt 8: Bereinigungsbericht erstellen
Alle Aenderungen zur Pruefung dokumentieren.
# Codebasis-Bereinigungsbericht
**Datum**: JJJJ-MM-TT
**Modus**: safe | aggressive
**Sprache**: <Sprache>
## Kennzahlen
| Kennzahl | Vorher | Nachher | Aenderung |
|----------|--------|---------|-----------|
| Lint-Warnungen | X | Y | -Z |
| Codezeilen | A | B | -C |
| Ungenutzte Imports | D | 0 | -D |
| Tote Funktionen | E | F | -G |
## Angewandte Aenderungen
1. X Lint-Warnungen behoben (automatisiert)
2. Y ungenutzte Imports entfernt
3. Z Zeilen toten Code geloescht (siehe CLEANUP_LOG.md)
4. Formatierung ueber W Dateien vereinheitlicht
## Eskalierungen
- [Problembeschreibung die menschliche Pruefung erfordert]
- [Unsichere Loeschung nach archive/ verschoben]
## Validierung
- [x] Alle Tests bestehen
- [x] Backup erstellt: backup_JJJJMMTT/
- [x] CLEANUP_LOG.md aktualisiert
Erwartet: Bericht als CLEANUP_REPORT.md im Projektstammverzeichnis gespeichert
Bei Fehler: (Entfaellt — Bericht unabhaengig vom Ergebnis erstellen)
Validierung
Nach der Bereinigung:
- Alle Tests bestehen (oder dieselben Fehler wie vorher)
- Keine neuen Lint-Warnungen eingefuehrt
- Backup vor allen Loeschungen erstellt
-
CLEANUP_LOG.mddokumentiert allen entfernten Code - Bereinigungsbericht mit Kennzahlen erstellt
- Git-Diff auf unerwartete Aenderungen geprueft
- CI-Pipeline besteht
Haeufige Stolperfallen
-
Code entfernen der noch ueber Reflexion verwendet wird: Statische Analyse uebersieht dynamische Aufrufe (z.B.
eval(), Metaprogrammierung). Immer Git-Historie pruefen. -
Implizite Abhaengigkeiten brechen: Imports entfernen die von Abhaengigkeiten verwendet wurden. Nach jeder Import-Entfernung Tests ausfuehren.
-
Feature-Flags fuer aktive Features loeschen: Auch wenn im aktuellen Branch ungenutzt, koennen Feature-Flags in anderen Umgebungen aktiv sein. Deployment-Konfigurationen pruefen.
-
Ueberaggressive Formatierung: Werkzeuge wie
blackoderprettierkoennen Code auf eine Weise umformatieren die unnoetige Diffs ausloest. Werkzeuge so konfigurieren dass sie zum Projektstil passen. -
Testabdeckung ignorieren: Codebasen ohne Tests koennen nicht sicher bereinigt werden. Wenn die Abdeckung niedrig ist, zuerst fuer Testergaenzungen eskalieren.
-
Kein Backup erstellen: Immer ein
backup_JJJJMMTT/-Verzeichnis erstellen bevor irgendetwas geloescht wird, auch bei Verwendung von Git. -
Falsches R-Binary auf Hybrid-Systemen: Unter WSL oder Docker kann
Rscripteinen plattformuebergreifenden Wrapper statt nativem R aufloesen. Mitwhich Rscript && Rscript --versionpruefen. Das native R-Binary bevorzugen (z.B./usr/local/bin/Rscriptunter Linux/WSL) fuer Zuverlaessigkeit. Fuer die R-Pfadkonfiguration siehe Setting Up Your Environment.
Verwandte Skills
tidy-project-structure— Verzeichnislayout organisieren, READMEs aktualisierenrepair-broken-references— Tote Links und Imports reparierenescalate-issues— Komplexe Probleme an Spezialisten weiterleiten
GitHub 저장소
연관 스킬
qmd
개발qmd는 BM25, 벡터 임베딩, 재순위화를 결합한 하이브리드 검색을 통해 로컬 파일을 색인화하고 검색할 수 있는 로컬 검색 및 색인화 CLI 도구입니다. 명령줄 사용과 Claude 통합을 위한 MCP(Model Context Protocol) 모드를 모두 지원합니다. 이 도구는 임베딩에 Ollama를 사용하고 색인을 로컬에 저장하여 터미널에서 직접 문서나 코드베이스를 검색하는 데 이상적입니다.
subagent-driven-development
개발이 스킬은 각 독립적인 작업마다 새로운 하위 에이전트를 배치하고 작업 사이에 코드 리뷰를 진행하여 구현 계획을 실행합니다. 이 리뷰 프로세스를 통해 품질 게이트를 유지하면서 빠른 반복 작업을 가능하게 합니다. 동일한 세션 내에서 대부분 독립적인 작업을 진행할 때 내장된 품질 검증과 함께 지속적인 진행을 보장하기 위해 사용하세요.
mcporter
개발mcporter 스킬은 개발자가 Claude에서 직접 Model Context Protocol(MCP) 서버를 관리하고 호출할 수 있도록 합니다. 이 스킬은 사용 가능한 서버를 나열하고, 인수를 사용해 해당 서버의 도구를 호출하며, 인증 및 데몬 생명주기를 처리하는 명령어를 제공합니다. 개발 워크플로우에서 MCP 서버 기능을 통합하고 테스트할 때 이 스킬을 사용하세요.
adk-deployment-specialist
개발이 스킬은 A2A 프로토콜을 사용하여 Vertex AI ADK 에이전트를 배포하고 오케스트레이션하며, AgentCard 검색, 작업 제출, 코드 실행 샌드박스 및 메모리 뱅크와 같은 지원 도구를 관리합니다. Python, Java 또는 Go 언어로 순차, 병렬 또는 루프 오케스트레이션 패턴을 갖춘 다중 에이전트 시스템 구축을 가능하게 합니다. Google Cloud에서 ADK 에이전트 배포 또는 에이전트 워크플로우 오케스트레이션을 요청받았을 때 사용하세요.
