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