소개
cargo-shear는 Boshen이 개발한 Rust용 Cargo 플러그인으로, Rust 프로젝트에서 발생하는 다양한 문제를 정적 분석으로 탐지하고 자동으로 수정하는 도구입니다. 공식 저장소의 안내에 따르면 이 도구는 기능적으로 완결된 상태로 간주되며, 버그 수정과 의존성 업그레이드를 중심으로 유지보수가 이어지고 있습니다.
상세정보
사용되지 않는 의존성 탐지
Cargo.toml에 선언되었지만 실제 코드에서 임포트되지 않는 의존성을 찾아냅니다.
잘못 배치된 의존성 감지
통합 테스트, 벤치마크, 예제에서 dev/build 의존성이 잘못된 섹션에 선언되어 있는 경우를 감지합니다. 단, #[cfg(test)] 안의 단위 테스트 의존성은 잘 못 배치된 것으로 판정하지 않습니다.
연결되지 않은 소스 파일 탐지
어떤 모듈 트리에서도 도달할 수 없는 Rust 소스 파일을 식별합니다.
[lib] 타겟과 소스 불일치 확인
–check-test-targets 옵션으로 test = false인 타겟에 테스트가 남아 있거나, test = true인 lib 타겟에 테스트가 없는 경우를 경고합니다.
자동 수정(–fix)
탐지된 사용되지 않는 의존성 등을 –fix 옵션으로 한 번에 정리할 수 있습니다.
기계 판독 가능한 JSON 출력
–format=json 옵션을 사용하면 진단 코드, 심각도, 파일 경로, 위치, 수정 제안, 수정 가능 여부 등을 포함한 구조화된 결과를 받을 수 있어 CI 및 외부 도구 연동에 활용할 수 있습니다.
cargo-hakari workspace-hack 자동 인식
### BEGIN HAKARI SECTION 마커가 있는 cargo-hakari의 workspace-hack 크레이트와 그 의존성 연결을 자동으로 건너뜁니다.
설치 방법
Windows에서는 winget을 통해 설치할 수 있습니다.
- winget: winget install –id Boshen.cargo-shear –exact
- 사전 빌드 바이너리(cargo binstall): cargo binstall cargo-shear
- 소스 빌드: cargo install cargo-shear
- Homebrew(지원되는 환경): brew install cargo-shear
기본 사용법
설치 후 프로젝트 디렉터리에서 다음 명령으로 검사 및 수정을 진행합니다.
- 변경 없이 검사만 수행: cargo shear
- 사용되지 않는 의존성 등 자동 수정: cargo shear –fix
- 경고도 오류로 처리해 CI에서 엄격히 검사: cargo shear –deny-warnings
- 구조화된 JSON 결과 출력: cargo shear –format=json
- [lib] 타겟과 소스 불일치 확인: cargo shear –check-test-targets
- 매크로 확장 후 검사(야간 Rust 필요, 속도 저하): cargo shear –expand –fix
오탐 무시 설정
검사 대상 패키지의 Cargo.toml에 다음 항목을 추가해 무시 규칙을 정의할 수 있습니다.
- [package.metadata.cargo-shear] 섹션의 ignored 배열에 크레이트 이름을 지정
- ignored-paths에 글롭 패턴(예: src/proto/*.rs)을 지정해 연결되지 않은 파일 제외
- 워크스페이스 전체에 적용할 경우 [workspace.metadata.cargo-shear]에 동일한 키 사용
활용 예시
- CI 파이프라인에서 cargo shear –deny-warnings를 실행해 경고 단계를 차단하고, –format=json 결과를 외부 시스템에 전달해 대시보드나 알림을 구성
- PR 또는 정기 점검 시 cargo shear –fix로 사용되지 않는 의존성을 정리해 Cargo.toml을 가볍게 유지
- 매크로로 의존성이 동적으로 사용되는 야간 프로젝트에서는 cargo shear –expand –fix를 사용해 매크로 확장 후 정확하게 점검
- cargo-hakari로 workspace-hack 크레이트를 운영하는 다중 멤버 워크스페이스에서 별도 ignored 설정 없이 검사 수행
제한·확인 사항
- –expand 플래그를 사용하지 않을 경우 매크로 확장에서 발생하는 ‘숨겨진’ 임포트는 감지하지 못합니다. 이 경우 nightly Rust의 cargo expand가 필요하며 실행 속도가 크게 느려집니다.
- 잘못 배치된 의존성 감지는 통합 테스트, 벤치마크, 예제에 한정되며 #[cfg(test)] 내부 단위 테스트 의존성은 검사 대상이 아닙니다.
- 라이선스는 저장소의 LICENSE에 따라 MIT으로 배포됩니다.
시스템 요구사항
Rust 프로젝트에서 사용하도록 설계된 Cargo 확장이므로, 사용 환경에 Rust와 Cargo가 설치되어 있어야 합니다. --expand 플래그를 함께 사용하려면 nightly Rust와 cargo expand가 필요합니다.


