CClaude Code Catalog
전체 Hooks

자동 Changelog 추가

Post-Tool고급Hook 타입: post-tool-use

자동 Changelog 추가는 git commit 명령 이후에 트리거되어 CHANGELOG.md를 자동으로 관리합니다. commit 메시지를 추출하고, Conventional Commits 접두사로 변경 유형(feat, fix, refactor, docs 등)을 분류하며, 현재 버전의 Unreleased 섹션에 포맷된 항목을 추가합니다. Keep a Changelog 규칙에 따라 유형별(Added, Fixed, Changed 등)로 항목을 그룹화합니다. CHANGELOG.md가 없으면 올바른 포맷으로 자동 생성합니다. 이를 통해 모든 commit이 문서화되면서도 수동으로 changelog를 관리하는 번거로움을 제거합니다.

changelog문서화gitConventional Commits자동화

Hook 코드

#!/bin/bash # Auto Changelog Appender Hook # Maintains CHANGELOG.md from commit messages # Only trigger on Bash tool with git commit if [[ "$TOOL_NAME" != "Bash" ]] || ! echo "$TOOL_INPUT" | grep -q "git commit"; then exit 0 fi # Verify commit actually happened LAST_COMMIT=$(git log -1 --format="%H %s" 2>/dev/null) if [ -z "$LAST_COMMIT" ]; then exit 0 fi COMMIT_MSG=$(echo "$LAST_COMMIT" | cut -d' ' -f2-) COMMIT_HASH=$(echo "$LAST_COMMIT" | cut -d' ' -f1 | cut -c1-7) TODAY=$(date +%Y-%m-%d) CHANGELOG="CHANGELOG.md" # Classify commit type classify_commit() { local msg="$1" case "$msg" in feat:*|feat(*) echo "Added" ;; fix:*|fix(*) echo "Fixed" ;; docs:*|docs(*) echo "Documentation" ;; refactor:*|refactor(*) echo "Changed" ;; perf:*|perf(*) echo "Performance" ;; test:*|test(*) echo "Testing" ;; chore:*|chore(*) echo "Maintenance" ;; BREAKING*|!:*) echo "Breaking Changes" ;; *) echo "Changed" ;; esac } # Strip conventional commit prefix clean_message() { echo "$1" | sed -E 's/^(feat|fix|docs|refactor|perf|test|chore)(\([^)]*\))?!?:\s*//' } CATEGORY=$(classify_commit "$COMMIT_MSG") CLEAN_MSG=$(clean_message "$COMMIT_MSG") # Create CHANGELOG if it doesn't exist if [ ! -f "$CHANGELOG" ]; then cat > "$CHANGELOG" << 'TMPL' # Changelog All notable changes to this project will be documented in this file. ## [Unreleased] TMPL fi # Check if Unreleased section exists if ! grep -q "## \[Unreleased\]" "$CHANGELOG"; then sed -i.bak '3a\n## [Unreleased]\n' "$CHANGELOG" rm -f "$CHANGELOG.bak" fi # Check if category subsection exists under Unreleased UNRELEASED_LINE=$(grep -n "## \[Unreleased\]" "$CHANGELOG" | head -1 | cut -d: -f1) NEXT_VERSION_LINE=$(awk "NR>$UNRELEASED_LINE && /^## \[/{print NR; exit}" "$CHANGELOG") NEXT_VERSION_LINE=${NEXT_VERSION_LINE:-$(wc -l < "$CHANGELOG")} ENTRY="- $CLEAN_MSG (\`$COMMIT_HASH\`)" # Insert entry under the appropriate category if grep -q "### $CATEGORY" "$CHANGELOG"; then CATEGORY_LINE=$(grep -n "### $CATEGORY" "$CHANGELOG" | head -1 | cut -d: -f1) sed -i.bak "${CATEGORY_LINE}a\ $ENTRY" "$CHANGELOG" else sed -i.bak "/## \[Unreleased\]/a\ \\n### $CATEGORY\ $ENTRY" "$CHANGELOG" fi rm -f "$CHANGELOG.bak" echo "Changelog updated: [$CATEGORY] $CLEAN_MSG" exit 0

이 Hook을 Claude Code 설정 또는 .claude/settings.json에 추가하면 활성화됩니다.

실행 미리보기

자동 Changelog 추가

자동 Changelog 추가에 대해

Claude Code Hooks는 Claude 작업 중 특정 이벤트에 반응하여 커스텀 셸 명령을 자동으로 실행합니다. 자동 Changelog 추가은(는) 고급 수준의 Post-Tool Hook으로, 개발 워크플로우의 핵심 시점에서 작업을 자동화하여 수동 단계를 줄이고 팀 전체의 일관성을 유지합니다.

관련 Hooks