PR 설명 작성기은(는) 무엇을 하나요?
현재 브랜치의 diff를 읽고 완전한 GitHub 풀 리퀘스트 설명을 작성합니다. 하나의 명령어로 PR을 생성하거나 업데이트하세요.
작성 스타일
다음 규칙을 모든 생성된 PR 설명에 적용하세요:
- 능동태 사용: "X가 추가됨" 대신 "X를 추가함"
- 요약에는 현재 시제("캐싱 레이어 추가"), 맥락에는 과거 시제("기존 방식은 렌더당 N개의 요청을 발생시킴")
- 짧은 문장, 한 가지 아이디어당 하나의 불릿
- 줄표(em dash) 사용 금지 — 대신 쉼표나 마침표 사용
- 불필요한 표현 금지: "이 PR", "이 커밋", "논의에 따라"
- 일반적인 표현보다 구체적인 표현: "성능 개선" 대신 "p95 지연 시간을 800ms에서 90ms로 단축"
1단계: 설정 확인
gh가 인증되었는지 확인:
gh auth status
인증되지 않은 경우: gh auth login 실행 후 안내를 따릅니다.
현재 디렉터리가 활성 브랜치가 있는 Git 저장소인지 확인:
git branch --show-current
분리된 HEAD이거나 브랜치가 없으면 중단하고 사용자에게 설명할 브랜치를 물어봅니다.
2단계: diff 컨텍스트 수집
세 가지 명령어를 실행하여 컨텍스트를 구성:
파일 요약 (변경된 내용):
git diff main...HEAD --stat
커밋 메시지 (변경 이유):
git log main...HEAD --oneline
전체 diff (변경 방법):
origin/main을 먼저 사용(항상 최신 상태), 로컬 main, 그다음 master 순으로 대체:
if git rev-parse origin/main &>/dev/null 2>&1; then
BASE=origin/main
elif git rev-parse main &>/dev/null 2>&1; then
BASE=main
else
BASE=master
fi
git diff $BASE...HEAD
diff가 매우 큰 경우(500줄 초과), --stat 요약과 커밋 메시지만 읽습니다. 또한 diff의 처음 200줄을 읽어 전체 출력을 처리하지 않고 주요 변경 사항을 파악합니다.
또한 기존 PR이 있는지 확인하고 현재 제목/본문을 읽습니다:
gh pr view --json title,body,baseRefName 2>/dev/null
3단계: 포맷 가이드 읽기
작성을 시작하기 전에 references/pr-format-guide.md를 전체 읽습니다. 다음 내용을 숙지하세요:
- 필수 섹션과 순서
- 각 섹션 작성 방법
- 포함할 내용과 생략할 내용
- 테스트 섹션 형식
4단계: 설명 생성
references/pr-format-guide.md의 형식을 사용하여 PR 설명을 작성합니다.
규칙:
- 변경사항 섹션의 모든 불릿은 diff의 내용과 연결되어야 함
- 코드 변경으로 암시되지 않는 테스트 단계를 임의로 작성하지 않음
- 관련 내용이 없는 섹션은 완전히 생략("해당 없음" 또는 빈 상태로 두지 않음)
- 스크린샷 섹션: diff에 UI 변경 사항이 보이는 경우에만 포함
- 커밋 메시지가 "이유"를 설명하는 경우, 요약에 해당 맥락 사용
QA 체크포인트: 제시하기 전에 다음을 확인:
- 요약은 1-2문장, 능동태, 불필요한 표현 없음
- 모든 변경 불릿은 구체적이고 diff와 연결됨
- 임의로 만든 지표나 결과 없음
- 테스트 단계는 실행 가능함 (누군가 따라 할 수 있음)
- 모든 줄에 줄표(em dash) 없음
5단계: PR 생성 또는 업데이트
사용자에게 설명을 제시하고 다음 중 하나를 선택하도록 요청: "PR을 생성할까요, 기존 것을 업데이트할까요, 아니면 출력만 할까요?"
새 PR 생성:
백틱, 따옴표, 줄바꿈을 안전하게 처리하기 위해 본문을 stdin으로 전달:
gh pr create --title "TITLE_HERE" --body-file - << 'EOF'
BODY_HERE
EOF
커밋 메시지와 diff 요약을 기반으로 제목을 제안합니다. 제목은 명령형, 72자 미만이어야 함: "추가된 캐싱" 대신 "Redis 캐싱을 추가하여 사용자 세션 조회 성능 개선"
기존 PR 업데이트:
gh pr edit --body-file - << 'EOF'
BODY_HERE
EOF
출력만: 수동 복사-붙여넣기를 위해 제목과 본문을 코드 블록으로 표시합니다.
생성 또는 업데이트 후 확인: "PR 설명이 업데이트되었습니다. 다음에서 확인하세요: [URL]"