Jeff: Jev를 사용한 읽기 전용 의미론적 코드 리뷰 CLI
요약
Jeff는 Jev를 활용하여 로컬 또는 CI 환경에서 파일의 규칙을 의미론적으로 검사하는 읽기 전용 Go CLI 도구입니다. 이 도구는 개발자가 코드를 커밋하기 전에 잠재적인 오류나 규정 위반을 사전에 잡아낼 수 있도록 돕습니다. 설치 및 사용법이 상세히 안내되어 있으며, 환경별(Linux, macOS, Windows) 설치 가이드와 함께 프로젝트 설정 파일(`jeff.toml`) 구성 방법도 제공합니다.
핵심 포인트
- Jev 기반의 의미론적 코드 검사 CLI 도구입니다.
- 로컬 또는 CI 환경에서 사전에 코드를 검증할 수 있습니다.
- 운영체제별(Linux, macOS, Windows) 설치 및 사용법이 안내됩니다.
- 프로젝트 루트에 `jeff.toml` 파일을 설정하여 검사 범위를 지정합니다.
jeff
문제가 당신을 잡기 전에 코드를 잡아내세요.
Jev를 사용하여 로컬 또는 CI 환경에서 파일에 대한 규칙을 의미론적으로 검사하는 읽기 전용 Go CLI.
사용법
# 설치된 릴리스 버전을 출력합니다.
jeff --version
...
설치
GitHub 릴리스 (권장)
최신 릴리스에서 아카이브와 checksums.txt를 다운로드하세요. Intel/AMD 머신에는 amd64를, Apple Silicon 또는 Linux ARM에는 arm64를 선택하세요.
Linux의 경우, 바이너리를 ~/.local/bin에 설치합니다:
VERSION=0.1.0
ARCH=amd64
ASSET="jeff_${VERSION}_linux_${ARCH}.tar.gz"
...
macOS의 경우 일치하는 darwin 아카이브를 사용하고, sha256sum -c -을 shasum -a 256 -c -으로 대체한 후, 동일한 ~/.local/bin 디렉토리에 설치합니다. PATH에 포함되어 있는지 확인하세요:
export PATH="$HOME/.local/bin:$PATH"
Windows의 경우, PowerShell을 사용하여 일치하는 ZIP 파일을 $HOMEin에서 확인하고 설치한 다음, 해당 디렉토리를 사용자 PATH에 추가합니다:
$version = "0.1.0"
$arch = "amd64"
$asset = "jeff_${version}_windows_${arch}.zip"
...
소스에서 빌드
git clone https://github.com/Alurith/jeff.git
cd jeff
mkdir -p "$HOME/.local/bin"
...
소스 빌드는 jeff --version에 대해 dev를 보고하며 의도적으로 자체 업데이트가 불가능합니다.
업데이트 및 릴리스
jeff update는 명시적입니다. 최신 호환 GitHub 릴리스를 선택하고, checksums.txt의 SHA-256 항목을 검증한 다음, 설치된 릴리스 바이너리를 교체합니다. 바이너리 디렉토리는 쓰기 가능해야 합니다. 이는 절대 dev/소스 빌드를 업데이트하지 않습니다.
릴리스를 게시하려면 먼저 master에서 실제 eval 워크플로우를 수동으로 실행하고 테스트/홀드아웃 아티팩트를 검토하세요. 그런 다음 의미론적 태그를 푸시합니다:
git switch master
git pull --ff-only
git tag -a v0.1.0 -m "v0.1.0"
...
이 태그는 품질 검사 및 GoReleaser를 실행하여 amd64와 arm64에 대한 Linux, macOS, Windows용 체크섬 아카이브를 게시합니다.
인증 및 구성
환경 변수 TYPESAFE_API_KEY를 설정하거나 jeff auth login으로 자격 증명을 저장하세요. 저장된 자격 증명은 운영 체제의 키링을 사용하며, jeff auth logout을 실행하면 저장된 자격 증명이 제거됩니다.
테스트 중에는 TYPESAFE_BASE_URL을 사용하여 호환되는 HTTPS 엔드포인트를 지정할 수 있습니다. 일반 HTTP는 로컬호스트/루프백 엔드포인트에 대해서만 허용됩니다.
프로젝트 설정
Jeff는 실행 디렉토리의 jeff.toml 파일을 읽습니다. 다른 파일을 선택하려면 --config PATH를 사용하세요. 경로는 프로젝트 루트에 상대적입니다:
src = ["src", "lib"]
exclude = ["docs", "generated/**"]
include = ["scripts/**/*.go"]
...
src는 명령줄에서 경로가 전달되지 않았을 때 디렉토리 검색 범위를 제한합니다. include는 해당 디렉토리를 벗어난 일치하는 파일을 추가하며, exclude가 우선권을 가집니다. 검색 패턴은 양수 글롭(positive globs)(*, ?, 문자 클래스, **)이며, 부정형 ! 패턴은 거부됩니다. 일반적인 제외 항목(예: .git, vendor, node_modules, 빌드 및 캐시 디렉토리)은 항상 활성화되며, .gitignore도 여전히 존중됩니다. 명령줄에서 명시적으로 전달된 경로는 검색 동작을 유지하지만, 소스 파일 안전 필터는 여전히 적용됩니다.
rule-files는 임베디드 카탈로그와 동일한 스키마를 사용하여 외부 YAML 규칙 조각(rule fragments)을 로드합니다. JEFF_CACHE_DIR이 cache-dir을 덮어쓰고, --output-format이 TOML 값을 덮어씁니다. 기본 출력은 text이며 기본 캐시는 .jeff-cache입니다.
개인 정보 보호를 위해 규칙은 기본적으로 인식된 소스 파일에만 적용됩니다. 인증서 및 키(.pem, .key, .crt), .env, YAML/YML, JSON, TOML, TFVars, Markdown/TXT, 숨겨진 경로, 그리고 기본 제외 디렉토리는 전송되지 않습니다. 외부 YAML 규칙은 의도적으로 비(非)소스 파일을 검사해야 할 때 allow-non-source: true를 명시적으로 설정할 수 있습니다.
현재 규칙
| 코드 | 규칙 | 설명 |
|---|---|---|
GEN001 | Failure-path integrity | 상태, 출력 또는 계약을 의미론적으로 일관되지 않게 남길 수 있는 실패 경로를 찾습니다. |
| ... |
Jeff는 대화형 CLI 사용과 자동화를 모두 위해 설계되었습니다:
- 텍스트 출력은 실패한 검사를 강조 표시하고 요약을 인쇄합니다;
--output-format json은 CI를 위한 구조화된 결과와 오류를 방출합니다;0은 적용 가능한 모든 검사가 통과했음을 의미합니다;1은 결정적인 검사에서 위반 사항을 발견했지만 오류가 발생하지 않았음을 의미합니다;2는 사용, 구성, 입력, 제공자(provider), 내부 또는 결론을 내릴 수 없는 결과를 의미합니다.
라이선스
Copyright 2026 Alessandro Ferrini
Apache License, Version 2.0에 따라 라이선스가 부여됩니다.
LICENSE를 참조하십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN OpenAI Codex의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기